2009-03-31 2 views
32

Я работаю над программой, и я пытаюсь отобразить Ассамблеи FILE версииC# использование AssemblyFileVersion в программе

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

На данный момент это только возвращает первые два номера версии в «AssemblyVersion», а не «AssemblyFileVersion». Я бы очень хотел, чтобы просто сослаться на AssemblyFileVersion, а не хранить внутреннюю переменную «Version», что я должен обновить как это и версию сборки ...

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

Это мой AssemblyFileVersion от AssemblyInfo.cs. Я хотел бы просто сослаться на "3.5.x" часть, а не "1.0. *":/

Спасибо, Zack

+1

Вы уже 99% пути там, просто изменить возвращение к fvi.FileVersion – McAden

+0

см https://stackoverflow.com/a/12528418/492, чтобы получить информацию о версии от определенной DLL, а не родительского приложения. –

ответ

33

Использование ProductMajorPart/ProductMinorPart вместо 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. Я просто понял, что это версия .dll! Не совсем то, что я хочу. Мне нужна исполняемая версия. (Забыл упомянуть, что он вызывается из .dll) – Zack

+4

Assembly asm = Assembly.GetEntryAssembly(); – Diadistis

+5

Обратите внимание, что fvi.FileVersion предоставит вам форматированную строку напрямую (все четыре части), если это то, что вам нужно ... – Benjol

1

Я думаю, вы должны будете использовать класс FileVersionInfo.

System.Diagnostics.FileVersionInfo.GetVersionInfo(FullpathToAssembly)

+0

В примере, который я показал, используется FileVersionInfo. Но он возвращает атрибут «AssemblyVersion». – Zack

+0

К сожалению. Это глупо, что я не вижу вопроса полностью. Извини за это. – shahkalpesh

3

Чтобы получить версию в настоящее время выполнения сборки вы можете использовать:

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

Класс Ассамблея может также загружать файлы и получать доступ ко всем сборкам, загруженным в процесс.

+0

это AssemblyVersion, а не 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

Это действительно работает! – Roboblob

Смежные вопросы