2009-05-26 68 views
542

AssemblyInfo有兩個集版本:我怎樣才能獲得彙編文件版本

  1. AssemblyVersion:指定程序集的版本被歸因。
  2. AssemblyFileVersion:指示編譯器爲Win32文件版本資源使用特定的版本號。 Win32文件版本不需要與程序集版本號相同。

我能得到Assembly Version與下面的代碼行:

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

但我怎麼能得到Assembly File Version

+2

你是什麼意思的「程序集版本」,而不是「程序集版本」?你能給個例子嗎? – Xiaofu 2009-05-26 08:24:31

+4

@Xiaofu - 「Assembly Version」是.NET在內部使用的。當您右鍵單擊文件並轉到「屬性」,然後選擇「詳細信息」選項卡時,會顯示「Assembly File Version」。他們不一樣。 – 2017-01-20 18:04:37

+0

我發現程序集版本是確定AppData中的user.config位置時使用的。 – 2017-10-30 17:54:32

回答

681

見上面要求澄清你真正想要的我的評論。但願這是它:

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

更新:正如Richard Grimes在my cited post,@Iain和@Dmitry Lobanov中所提到的,我的答案在理論上是正確的,但在實踐中是錯誤的。

正如我應該從無數書籍等中記住的,當使用[assembly: XXXAttribute]設置這些屬性時,它們會被編譯器盜用,並被放入VERSIONINFO資源中。

由於上述原因,您需要使用@Xiaofu's answer中的方法,因爲在從中提取信號後,屬性被剝離。


 
public static string GetProductVersion() 
{ 
    var attribute = (AssemblyVersionAttribute)Assembly 
    .GetExecutingAssembly() 
    .GetCustomAttributes(typeof(AssemblyVersionAttribute), true) 
    .Single(); 
    return attribute.InformationalVersion; 
} 

(從http://bytes.com/groups/net/420417-assemblyversionattribute - 正如指出的還有,如果你正在尋找一個不同的屬性,替代品成以上)

+0

嘿魯本,2條筆記。首先,問題不是AssemblyVersion,而是AssemblyFileVersion。其次,Assembly.GetExecutingAssembly()。GetCustomAttributes(typeof(AssemblyVersionAttribute),true)返回一個長度爲0的數組。我認爲這是因爲AssemblyVersionAttribute不是自定義屬性。 – Iain 2009-10-14 15:02:54

+0

重新說第一點,那就是爲什麼我說「如果你正在尋找一個不同的屬性,替代上述」(IIRC我沒有嘗試過)。重新第二次,這似乎似乎合理,但沒有時間挖... – 2009-10-14 16:12:45

+0

是的,你實際上無法通過.GetCustomAttribute()獲得AssemblyVersion屬性,程序集版本只能通過`AssemblyName.Version`屬性獲取。但與其他所有屬性,這是正確的做法 – 2013-05-14 05:06:39

121

three versions裝配文件,並產品。如果不明確指定它們,它們將被不同的功能使用並採用不同的默認值。

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; 
-3

你可以得到My.Application.Info.Version

53

集的版本。當我要訪問的應用程序文件的版本(什麼是集信息在設置 - >文件版本),說一個標籤的文本設置爲它的形式負載顯示版本,我剛纔用

versionlabel.Text = "Version " + Application.ProductVersion; 
2

使用此:

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

或者這個:

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