如何获取发布版本?

16

我想要展示我的桌面应用的发布版本。我正在尝试使用这段代码:

_appVersion.Content = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
问题在于我没有得到与项目属性中完全相同的发布版本。以下是其截图:enter image description here 但我得到的是3.0.0.12546。有人知道问题出在哪里吗?

你是在调试模式下检查吗? - Sajeetharan
没有,在发布模式下。 - IrApp
4个回答

14
我们可以创建一个属性,以如下方式返回版本信息,并且我们可以使用该属性。
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);
        }
    }
}

好的,我通过将它放在Main.CS中并调用它到一个字符串中,使其工作了,我收到了1.0.7379.32346的版本号,但我的版本是20.03.8.3。为什么我得到了错误的版本号?谢谢Dave。 - Dave Hampel
我刚刚将软件安装到我的笔记本电脑上(部署),并成功在主标题文本中显示了正确的版本号。感谢您提供如此出色的解决方案。 - Dave Hampel

12

我之前也遇到过这个问题,发现在AssemblyInfo.cs中设置的版本号与Properties中设置的版本号产生了冲突。

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

我通常会将那些AssemblyInfo中的行注释掉并替换为

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

请检查这些值是否已经硬编码到您的 AssemblyInfo 文件中。

参见这个SO问题,了解有关自动版本控制的有趣讨论。在检查 AssemblyInfo.cs 时,请确保您的自动递增(如果使用)只针对 AssemblyVersion 而不是 AssemblyFileVersion


调试程序时,您可以检查程序集的属性。

\bin\Release\app.publish

Details 选项卡下,检查版本号。它是否与您在 VS 中指定的任何设置匹配?


1
太棒了,你的解决方案非常有效,非常感谢! - IrApp

6
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;
}

请注意,第二种方法可以在应用程序发布后显示发布版本,但是如果直接从Visual Studio启动应用程序,则会引发错误。 - TK-421

1
使用带有Lambda表达式的C#6.0
private string GetVersion => ApplicationDeployment.IsNetworkDeployed 
    ? $"Version: {ApplicationDeployment.CurrentDeployment.CurrentVersion}" 
    : $"Version: {Application.ProductVersion}";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接