2011-06-27 47 views
47

如何以編程方式獲取C#中的當前產品版本?如何在C#中獲取當前產品版本?

我的代碼:

VersionNumber = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); 

我越來越VERSIONNUMBER = 1.0.0.0,但目前的版本是1.0.0.12。

+1

檢查什麼是它'System.Reflection.Assembly.GetExecutingAssembly()返回。的GetName()' –

+0

此外,你找程序集的版本或者是你真正尋找的ClickOnce應用程序版本? –

+1

「當前版本是1.0.0.12」 - 設置在哪裏?你對資源管理器中的文件版本有什麼看法(瓷磚視圖或屬性版本) – Rup

回答

26

我得到了我的問題的答案它只是給System.Deployment.Application的參考,儘管它不會在Visual Studio的開發工作,但它將工作,一旦應用程序部署。

//using System.Deployment.Application; 
    //using System.Reflection; 
    public string CurrentVersion 
    { 
     get 
     { 
      return ApplicationDeployment.IsNetworkDeployed 
        ? ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString() 
        : Assembly.GetExecutingAssembly().GetName().Version.ToString(); 
     } 
    }  
3

試試這個:

var thisApp = Assembly.GetExecutingAssembly(); 
AssemblyName name = new AssemblyName(thisApp.FullName); 
VersionNumber = "v. " + name.Version; 

而且,看到在AssemblyName.Version財產this MSDN文章。

+0

其仍然是1.0.0.0 –

+0

IS是assemblyversion還是assemblyFileVersion? –

+0

您回覆的代碼。其實事情是我需要我們正在構建的應用程序的當前版本。所以我怎麼能得到這個。與解決方案屬性中的相同。 –

57

有三個版本:程序集,文件和產品。要獲得產品版本:

using System.Reflection; 
using System.Diagnostics; 
Assembly assembly = Assembly.GetExecutingAssembly(); 
FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location); 
string version = fileVersionInfo.ProductVersion; 
+0

很荒謬的是,如何在項目屬性中緊密排列的兩個版本設置在內部甚至不是同一個類。哎呀,即使這兩個類中的屬性也不一樣;最後一部分在彙編版本中被稱爲「修訂」,但在文件版本中被稱爲「私人」。 – Nyerguds

5

以獲得產品版本(這是使用AssemblyInformationalVersionAttribute指定的)另一種方法是

private static string AssemblyProductVersion 
{ 
    get 
    { 
     object[] attributes = Assembly.GetExecutingAssembly() 
      .GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), false); 
     return attributes.Length == 0 ? 
      "" : 
      ((AssemblyInformationalVersionAttribute)attributes[0]).InformationalVersion; 
    } 
} 
+1

在無法訪問文件系統的情況下(例如SqlClr),情況會更好。 – rrreee

2

在C#中,你需要使用反射和診斷

Assembly assembly = Assembly.GetExecutingAssembly(); 
FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location); 
string version = fileVersionInfo.ProductVersion; 
+1

如果您有網絡部署版本或使用其他項目作爲啓動項目,則這不起作用。 –

3

所有這些答案都要求與.GetExecutingAssembly()的程序集。
如果你有這個代碼在DLL中,它會返回DLL版本號。

將呼叫轉換爲GetCallingAssembly()以獲取您想要了解的代碼。

/// <summary> 
/// Returns version like 2.1.15 
/// </summary> 
public static String ProductVersion 
{ 
    get 
    { 
     return new Version(FileVersionInfo.GetVersionInfo(Assembly.GetCallingAssembly().Location).ProductVersion).ToString(); 
    } 
} 
10
System.Reflection.Assembly.GetEntryAssembly().GetName().Version 
+0

應該是一個評論。 –

+0

GetEntryAssembly是獲取正在運行的應用程序的關鍵點,即使代碼位於DLL程序集中 –