如何获取WPF应用程序的发布版本

15

我希望我的 WPF 应用程序有一个发布版本。我尝试使用 这个 问题的回答,它有效了,但问题是我们可以手动更改那里的值。我想知道我的项目实际上发布了多少次(不需要版本号,只需要知道我发布了多少次应用程序)。这可以做到吗?


不知道这是否有帮助,但您可以计算发布根文件夹下“应用程序文件”子文件夹的数量。缺点是,您可能会使用相同的版本号进行覆盖(例如,使用相同的版本号两次发布只会在那里得到1个子文件夹)。 - Bolu
4个回答

14

使用Click Once,每次发布时,Visual Studio都会自动更改编号。它会每次递增该值。您的问题是您手动更改了编号。解决方法是发布并让Visual Studio更新该值...您应该注意到一旦发布项目,就需要保存项目。这是因为Visual Studio已经为您递增了该值。


更新 >>>

如果您想要从代码中访问已发布的版本(这应该在您的问题中已经明确),那么您可以使用此代码,但您必须确保应用程序首先进行了网络部署...也就是说它已经被发布,所以在调试时它无法工作。请尝试以下内容:

private string GetPublishedVersion()
{
    if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed)
    {
        return System.Deployment.Application.ApplicationDeployment.CurrentDeployment.
            CurrentVersion.ToString();
    }
    return "Not network deployed";
}

也许你认为我是给你的回答投了反对票的人。不是我。无论如何,我会尝试你的方法。 - Raj123
不,我根本没有那样想。无论如何,在你的问题中,你真的应该让所有的要求都很明确,而不是依靠用户跟随你的链接。你其实在问题中并没有提到你想要用代码来实现这个功能。 - Sheridan
10
注意:这需要引用 System.Deployment 程序集。 - Shaun Luttin

10

您可能会对两组数字感到困惑。请注意,您可以在两个不同的位置设置 WPF 应用的版本:

  1. 项目属性 / 发布选项卡 / 发布版本
  2. AssemblyInfo.cs 文件中声明的 AssemblyVersion,如果您展开解决方案资源管理器中的项目属性节点,就可以找到它。

它们相似之处在于它们都提供了 4 个数字:主版本号、次版本号、生成号和修订号。区别在于,如果应用程序实际上已发布(即已安装),则 发布版本 仅在此时可用。它在调试会话中不可用,也不可在将可执行文件复制到另一台计算机并在那里运行时使用。因此,如果您只需要跟踪可执行文件的版本,请使用 AssemblyInfo.cs

相应地,要读取数据,请使用以下代码:


1 要读取发布版本(在发布选项卡中声明)

using System.Deployment.Application;
ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString();
注意,在这种情况下:a)您需要添加对System.Deployment程序集的引用,b)如果应用程序未部署,则它将无法正常工作。
2 读取程序集版本(在AssemblyInfo.cs中声明)
Assembly.GetExecutingAssembly().GetName().Version;

这个总是有效的。


我应该在哪里添加这个功能(发布版本)?我是将其添加到主页cs文件还是App.xaml.cs文件中? - Leon Proskurov

4

如果我们无法从启动程序集中获取应用程序版本号,可以采用通用解决方案:

var version = System.Reflection.Assembly.GetEntryAssembly().GetName().Version;
string appVersion = $"{version.Major}.{version.Minor}";

GetEntryAssembly返回启动项目的版本信息。


2
 var obj=Assembly.GetExecutingAssembly().GetName().Version;
    string version= string.Format("Application Version {0}.{1}", obj.Build, obj.Revision);  

OR

 string version= string.Format("Application Version {0}.{1}", obj.Major, obj.Minor); 

无论哪种属性适合您。

这只是返回了1.0.0.0给我...不太符合我的需求。 - Justas
1
这是汇编版本,不是发布版本。 - TheAtomicOption
这段代码返回程序集版本。我们正在寻找发布版本。 - Mashhad Saleem

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