2009-03-31 6 views
32

Je travaille sur un programme, et je suis en train d'afficher l'ensemble FICHIER VersionC# l'utilisation de AssemblyFileVersion dans un programme

public static string Version 
    { 
     get 
     { 
      Assembly asm = Assembly.GetExecutingAssembly(); 
      FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(asm.Location); 
      return String.Format("{0}.{1}", fvi.FileMajorPart, fvi.FileMinorPart); 
     } 
    } 

À l'heure actuelle, cela ne renvoie les deux premiers numéros de version dans le "AssemblyVersion", pas "AssemblyFileVersion". Je voudrais vraiment faire référence à tout le AssemblyFileVersion plutôt que de stocker une variable interne appelée « Version » que je dois mettre à jour à la fois ceci et la version de montage ...

[assembly: AssemblyVersion("1.0.*")] 
[assembly: AssemblyFileVersion("3.5.0")] 

C'est mon AssemblyFileVersion de AssemblyInfo.cs. Je voudrais faire référence seulement la partie "3.5.x", pas "1.0 *.":/

Merci, Zack

+1

Vous êtes déjà 99% du chemin, il suffit de changer le retour à fvi.FileVersion – McAden

+0

voir https://stackoverflow.com/a/12528418/492 pour obtenir les informations de version d'un DLL spécifique, plutôt que l'application exécutant parent. –

Répondre

33

Utilisez ProductMajorPart/ProductMinorPart au lieu de FileMajorPart/FileMinorPart:

public static string Version 
    { 
     get 
     { 
      Assembly asm = Assembly.GetExecutingAssembly(); 
      FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(asm.Location); 
      return String.Format("{0}.{1}", fvi.ProductMajorPart, fvi.ProductMinorPart); 
     } 
    } 
+0

Err. Je viens de réaliser que c'est la version .dll! Pas exactement ce que je veux. Je veux la version exécutable. (J'ai oublié de mentionner qu'il est appelé depuis un fichier .dll) – Zack

+4

Assembly asm = Assembly.GetEntryAssembly(); – Diadistis

+5

Notez que fvi.FileVersion vous donnera la chaîne formatée directement (les quatre parties), si c'est ce dont vous avez besoin ... – Benjol

1

Je suppose que vous devrez utiliser la classe FileVersionInfo.

System.Diagnostics.FileVersionInfo.GetVersionInfo(FullpathToAssembly)

+0

L'exemple que j'ai montré utilise FileVersionInfo. Mais il ne renvoie que l'attribut "AssemblyVersion". – Zack

+0

Oups. C'est stupide de ma part de ne pas voir la question complètement. Désolé pour ça. – shahkalpesh

3

Pour obtenir la version du vous pouvez l'assemblage en cours d'exécution utiliser:

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

La classe Assemblée peut charger également des fichiers et accéder à tous les assemblys chargés dans un processus.

+0

c'est AssemblyVersion, pas AssemblyFileVersion – Slava

6
using System.Reflection; 
using System.IO; 

FileVersionInfo fv = System.Diagnostics.FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location); 

Console.WriteLine("AssemblyVersion : {0}", Assembly.GetExecutingAssembly().GetName().Version.ToString()); 

Console.WriteLine ("AssemblyFileVersion : {0}" , fv.FileVersion.ToString()); 
3
var fileVersion = GetCustomAttributeValue<AssemblyFileVersionAttribute>(assembly, "Version"); 

    private static string GetCustomAttributeValue<T>(Assembly assembly, string propertyName) 
     where T : Attribute 
    { 
     if (assembly == null || string.IsNullOrEmpty(propertyName)) return string.Empty; 

     object[] attributes = assembly.GetCustomAttributes(typeof(T), false);    
     if (attributes.Length == 0) return string.Empty; 

     var attribute = attributes[0] as T; 
     if (attribute == null) return string.Empty; 

     var propertyInfo = attribute.GetType().GetProperty(propertyName); 
     if (propertyInfo == null) return string.Empty; 

     var value = propertyInfo.GetValue(attribute, null); 
     return value.ToString(); 
    } 
+0

Cela fonctionne réellement! – Roboblob

Questions connexes