2011-06-27 37 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程序集中 –