如何在C#中获取当前产品版本?

时间:2011-06-27 13:37:36

标签: c# windows

如何以编程方式获取C#中的当前产品版本?

我的代码:

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

我得到VersionNumber = 1.0.0.0,但当前版本是1.0.0.12。

9 个答案:

答案 0 :(得分:67)

有三个版本:程序集,文件和产品。要获得产品版本:

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

答案 1 :(得分: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();
    }
} 

答案 2 :(得分:15)

System.Reflection.Assembly.GetEntryAssembly().GetName().Version

答案 3 :(得分:6)

获取产品版本(使用AssemblyInformationalVersionAttribute指定)的另一种方法是

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

答案 4 :(得分: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();
    }
}

答案 5 :(得分:2)

试试这个:

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

另请参阅AssemblyName.Version属性上的this MSDN文章。

答案 6 :(得分:2)

在C#中,您需要使用反射和诊断

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

答案 7 :(得分:0)

我和你们大多数人有同样的问题。除非您手动输入并将assemblyInfo.cs更新为要显示的版本,否则它将始终显示1.0.0.0。我认为我们想在项目属性下显示发布的版本修订号,但这似乎不是一个选择(根据我的阅读)。

我不确定这些评论是在什么时候存在的,但是现在在 assemblyinfo.cs 中,有一种自动执行此操作的方法。我也不满意每次发布时都必须手动更新它们。

// You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.*")]

*每次发布都会自动递增。它不会与您在项目属性下看到的发布号相同,但是它肯定会增加,并且肯定比手工完成要好。

然后,您有两个选择来显示它,如上所述。我个人使用了我在另一个网站上找到的

Version version = Assembly.GetExecutingAssembly().GetName().Version; lblRevision.Text = String.Format("{0}.{1}.{2}.{3}", version.Major, version.Minor, version.Build, version.Revision);

答案 8 :(得分:0)

var productVersion = FileVersionInfo.GetVersionInfo(typeof(SomeClassFromDesiredAssembly).Assembly.Location).ProductVersion;