如何在WPF代码后台中读取发布版本号

33

我希望在启动窗口中读取和显示WPF应用程序发布版本号。在项目属性的发布选项卡中有一个发布版本,如何获取并在WPF窗口中显示它。

提前感谢

4个回答

63

使用 Assembly.GetExecutingAssembly() 访问程序集版本,并在用户界面中显示。

Assembly.GetExecutingAssembly().GetName().Version.ToString();

4
感谢您的时间,这个方法可行,但是无论我的应用程序版本是1.0.0.158还是其他版本,它总是设置为1.0.0.0! - Abdulsalam Elsharif
以这种方式添加程序集信息肯定是有效的。 - csmith
2
@AbdulsalamElsharif,我认为这是因为你正在从另一个项目(另一个程序集)中使用此代码片段。例如,你的主Windows应用程序版本是1.0.2,但你的dll项目是1.0.0。 - Vladislav
如果您使用“发布”方法部署,AssemblyVersion 将无法正常工作。 - Vladislav
这不是文件版本而是程序包版本吗? - Mike D.
显示剩余2条评论

31

在你的项目中添加引用 System.Deployment 库,并将此代码段调整到你的代码中:

using System.Deployment.Application;

并且

string version = null;
try
{   
    //// get deployment version
    version = ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString();
}
catch (InvalidDeploymentException)
{
    //// you cannot read publish version when app isn't installed 
    //// (e.g. during debug)
    version = "not installed";
}

正如评论中所述,在调试过程中无法获取发布版本,因此建议处理InvalidDeploymentException异常。


3
如果您首先检查ApplicationDeployment.IsNetworkDeployed,这将让您知道当前部署是否可用。这样,您就不必处理异常,而可以使用简单的if-else语句。 - aliceraunsbaek
这回答了问题的一半,但没有涉及如何在WPF显示器中显示它的部分。你如何绑定一个组件以使用这个版本变量? - njminchin
这在 .net core 中仍然有效吗? - hybrid2102
@hybrid2102 这个很好用。我在 WPF .NET Core 3.1 上使用了这些代码。我在“项目”->“属性”->“包”选项卡->“包版本”中添加了文本“版本1.1.1.1”。我可以在运行时(包括调试)获取正确的字符串。 - cmcromance

8

使用 GetEntryAssembly 而非 GetExecutingAssembly 来获取当前可执行文件的版本而不是当前正在执行的 DLL 的版本,代码如下:

string version = System.Reflection.Assembly.GetEntryAssembly().GetName().Version.ToString();

5
string version = Assembly.GetExecutingAssembly().GetName().Version.ToString(); 

Console.WriteLine(version);

我不明白为什么这个回复和下面的回复描述了相同的答案,但一个得到了+17,而另一个却得到了-1。 - Smith.Lai
7
@Smith.Lai 因为答案相同,只是在两年后回答的。 - Erre Efe
@Smith.Lai 你说得对,我已经编辑了其他答案以使其更加清晰。它比这个答案更有效,而这个答案只是最高票答案的重复。 - Clonkex

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