2016-09-27 67 views
5

我想顯示我的桌面應用程序的發佈版本。我試圖用這段代碼:如何獲取發佈版本?

_appVersion.Content = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; 

問題是我沒有得到我的項目屬性中的發佈版本。下面是它的截圖:

enter image description here

但我正在逐漸3.0.0.12546。有人知道問題在哪裏嗎?

+0

你在檢查調試模式? – Sajeetharan

+0

Nop,在發佈模式 – IrApp

回答

5

我也有這個問題,發現AssemblyInfo.cs設置的版本號是用一個集Properties干擾:

[assembly: AssemblyVersion("1.0.0.0")] 
[assembly: AssemblyFileVersion("1.0.0.0")] 

我通常評論的線條勾勒出的AssemblyInfo和替換他們與

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

檢查這些值是否是hard-co登入您的AssemblyInfo檔案。

有關自動版本控制的有趣討論,請參閱this SO question。在檢查AssemblyInfo.cs時,確保您的自動增量(* - 如果您正在使用它)僅針對AssemblyVersion而不是AssemblyFileVersion


當調試程序,你可以檢查組件的性能在

\bin\Release\app.publish 

Details選項卡,檢查版本號。這是否與您在VS中指定的任何設置相匹配?

+1

完美,您的解決方案就像一個魅力,非常感謝! – IrApp

+0

@IrApp沒問題,很高興能幫到你! – Bassie

2

我們可以創建一個屬性,它將返回版本信息 如下所述,我們可以使用該屬性。

public string VersionLabel 
{ 
    get 
    { 
     if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed) 
     { 
      Version ver = System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion; 
      return string.Format("Product Name: {4}, Version: {0}.{1}.{2}.{3}", ver.Major, ver.Minor, ver.Build, ver.Revision, Assembly.GetEntryAssembly().GetName().Name); 
     } 
     else 
     { 
      var ver = Assembly.GetExecutingAssembly().GetName().Version; 
      return string.Format("Product Name: {4}, Version: {0}.{1}.{2}.{3}", ver.Major, ver.Minor, ver.Build, ver.Revision, Assembly.GetEntryAssembly().GetName().Name); 
     } 
    } 
} 
0
System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; 

將讓你存在於AssemblyInfo.cs文件,以獲得發佈您在發佈對話框中設置版本的程序集的版本,你應該使用

System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion 

但是請注意,你有要添加對System.Deployment的引用,並且只有在通過右鍵單擊項目文件發佈應用程序並單擊發布後,它才能工作,每次發佈時,它都會增加修訂版本。

如果你試圖調用調試模式上面一行將無法正常工作,並會拋出一個異常,那麼您可以使用下面的代碼:

try 
{ 
    return System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion; 
} 
catch(Exception ex) 
{ 
    return Assembly.GetExecutingAssembly().GetName().Version; 
} 
0

使用C#6.0中Lambda表達式

private string GetVersion => ApplicationDeployment.IsNetworkDeployed ? $"Version: {ApplicationDeployment.CurrentDeployment.CurrentVersion}" : $"Version: {Application.ProductVersion}";