2009-10-08 8 views
25

Compte tenu de ce qui suit:Numéro de version d'une dll dans .NET

string file = @"c:\somepath\somefile.dll"; 

Comment puis-je trouver les numéros de version fichier et produit de cette DLL en utilisant .NET?

La DLL peut être native ou gérée.

Merci.

Répondre

38

Oui , en utilisant System.Diagnostics.FileVersionInfo.

string fileVersion = FileVersionInfo.GetVersionInfo(file).FileVersion; 
string productVersion = FileVersionInfo.GetVersionInfo(file).ProductVersion; 

Notez que la version de fichier d'un assembly peut être différente de sa version d'assembly. La version d'assemblage fait partie de l'identité de l'assembly.

+0

Merci Lars, j'ai en quelque sorte ignoré la classe FileVersionInfo. – rein

+0

J'ai un problème avec cette classe FileVersionInfo. Je ne le trouve pas. J'ai essayé d'utiliser namespace System :: Diagnostics mais ce n'est pas dans le diagnostic. J'ai essayé le projet de clr, le projet vide de C++, j'ai lié le version.lib, le system.dll et ne peux toujours pas le trouver. S'il vous plaît aider. – shake

+0

Sachez simplement que FileVersionInfo.FileVersion est une représentation de chaîne qui peut ne pas être à jour. Vous devriez regarder FileVersionInfo.FileMajorPart, FileMinorPart, FileBuildPart, FilePrivatePart. Voir [GetFileVersionInfo() renvoie les informations de version de fichier incorrect] (http://stackoverflow.com/questions/5263954/getfileversioninfo-returns-wrong-files-version-information) – bdeem

4

Je ne sais pas, mais avec dll indigènes dll gérés cela fonctionne comme ceci:

System.Reflection.Assembly.LoadFile(file).GetName().Version 

EDIT: Je pense que vous pouvez lire les informations de version en C avec GetFileVersionInfo() ...

+1

Soyez averti: Que retourner la version d'assemblage, pas la version de fichier. Les deux pourraient différer. –

+1

Ce n'est pas la même chose que la fonction win32 GetFileVersionInfo, qui renvoie la version du fichier et non la version Assembly. –

+0

Vous avez raison, bien sûr. – EricSchaefer

0

Si vous souhaitez que les informations de version de fichier puis utilisez la FileVersionInfo classe (FileVersionInfo documentation)

Si vous voulez la version de montage, vous devrez charger cet ensemble en utilisant la réflexion. Il est un exemple de la façon de le faire sur code plex

4
FileVersionInfo fi = FileVersionInfo.GetVersionInfo(path); 
string fileVersion = fi.FileVersion; 

Dans Windows, la version « Fichier » et « la version du produit » sont les mêmes (ou du moins il est pour un .dll géré).

+1

La version du fichier et la version du produit peuvent également différer pour les DLL gérées. [AssemblyFileVersion] vs [AssemblyInformationalVersion]. Voir http://stackoverflow.com/questions/7770068/get-the-net-assemblys-assemblyinformationalversion-value et http://stackoverflow.com/questions/64602/what-are-differences-between-assemblyversion-assemblyfileversion-and -assemblyin –

0

pour la version de fichier d'assemblage .net pourrait bien être quelque chose 1.0. , 1.1. 1.2. , 2.0. et ainsi de suite en d'autres termes, l'éditeur peut choisir de corriger la version majeure et mineure pour le projet mais laisser le reste à .net pour compiler et incrémenter. D'autre part

string version=System.Reflection.Assembly.GetExecutingAssembly() 
    .GetName().Version.ToString(); 

donnera le numéro de version complète avec majeure, mineure, construire des nombres

le code ci-dessus C# fonctionne dans l'exécution .exe et l'exécution .dll

Bien sûr, si vous essayez d'utiliser la DLL de quelqu'un, vous pouvez utiliser la suggestion d'Eclipsed4utoo ou d'EricSchaefer selon la façon dont l'éditeur a choisi d'assigner la version et la construction.

Questions connexes