web-dev-qa-db-fra.com

Comment puis-je obtenir la version du fichier Assembly?

Dans AssemblyInfo, il existe deux versions d'assemblage:

  1. AssemblyVersion: Spécifiez la version de l'assembly en cours d'attribution.
  2. AssemblyFileVersion: ordonne à un compilateur d'utiliser un numéro de version spécifique pour la ressource de version de fichier Win32. Il n'est pas nécessaire que la version du fichier Win32 soit identique au numéro de version de l'Assemblée.

Je peux obtenir le Assembly Version avec la ligne de code suivante:

Version version = Assembly.GetEntryAssembly().GetName().Version;

Mais comment puis-je obtenir le Assembly File Version?

667
Enyra

Voir mon commentaire ci-dessus demandant des éclaircissements sur ce que vous voulez vraiment. J'espère que c'est ça:

System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(Assembly.Location);
string version = fvi.FileVersion;
813
Xiaofu

Il y a trois versions : Assemblage , fichier , et produit . Ils sont utilisés par différentes fonctionnalités et prennent différentes valeurs par défaut si vous ne les spécifiez pas explicitement.

string assemblyVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(); 
string assemblyVersion = Assembly.LoadFile('your Assembly file').GetName().Version.ToString(); 
string fileVersion = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion; 
string productVersion = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).ProductVersion;
184
Check6

Lorsque je souhaite accéder à la version du fichier de l’application (ce qui est défini dans Informations sur l’assemblage -> Version du fichier), dis pour définir le texte d’une étiquette lors du chargement du formulaire afin d’afficher la version, je viens d’utiliser

versionlabel.Text = "Version " + Application.ProductVersion;
60
syntap

MISE À JOUR: Comme mentionné par Richard Grimes dans mon post cité , @Iain et @Dmitry Lobanov, ma réponse est correcte en théorie mais erronée en pratique.

Comme j'aurais dû m'en souvenir d'innombrables livres, etc., alors que ces propriétés sont définies à l'aide du [Assembly: XXXAttribute], elles sont détournées par le compilateur et placées dans la ressource VERSIONINFO.

Pour la raison ci-dessus, vous devez utiliser l'approche dans réponse de @ Xiaof car les attributs sont supprimés une fois le signal extrait.


 chaîne publique statique GetProductVersion () 
 {
 var attribut = (AssemblyVersionAttribute) Assembly 
 .GetExecutingAssembly () 
 .GetCustomAttributes (typeof (AssemblyVersionAttribute) , true) 
 .Single (); 
 renvoyer attribut.InformationalVersion; 
} 

(De http://bytes.com/groups/net/420417-assemblyversionattribute - comme indiqué ici, si vous recherchez un attribut différent, remplacez-le par ce qui précède)

21
Ruben Bartelink

Utilisez ceci:

((AssemblyFileVersionAttribute)Attribute.GetCustomAttribute(
    Assembly.GetExecutingAssembly(), 
    typeof(AssemblyFileVersionAttribute), false)
).Version;

Ou ca:

new Version(System.Windows.Forms.Application.ProductVersion);
3
user6438653