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

Posted

技术标签:

【中文标题】如何在后面的代码中读取 WPF 发布版本号【英文标题】:How can I read WPF publish version number in code behind 【发布时间】:2014-06-21 00:10:18 【问题描述】:

我想在启动窗口中读取和显示 WPF 应用程序发布版本号,在发布选项卡中的项目属性中有发布版本,我怎样才能得到它并在 WPF 窗口中显示它。

提前致谢

【问题讨论】:

【参考方案1】:

使用Assembly.GetExecutingAssembly() 访问程序集版本并在 UI 中显示

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

【讨论】:

感谢您的宝贵时间,虽然我的应用程序版本是 1.0.0.158,但它可以工作,但始终设置版本 1.0.0.0 ! @AbdusalamElsherif 你在哪里有版本?在 assemblyinfo 里面? 以这种方式添加程序集信息绝对有效。 @AbdulsalamElsharif,我认为这是因为您正在使用来自另一个项目(另一个程序集)的此代码 sn-p。例如,您的主要 Windows 应用版本是 1.0.2,但您的 dll 项目是 1.0.0。 如果您使用“发布”方法进行部署,AssemblyVersion 不起作用。【参考方案2】:

在您的项目中添加对System.Deployment 库的引用,并将此sn-p 调整为您的代码:

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

【讨论】:

如果您首先检查 ApplicationDeployment.IsNetworkDeployed 这将让您知道 CurrentDeployment 是否可用。这样你就不必处理异常,但可以做一个简单的 if-else。 这回答了一半的问题,但不是关于在 WPF 显示中显示它的部分。你如何绑定一个组件然后使用这个版本变量? 这在 .net core 中仍然有效吗? @hybrid2102 效果很好。我在 WPF .NET Core 3.1 上使用了这些代码。我将文本版本 1.1.1.1 添加到项目 -> 属性 -> 包选项卡 -> 包版本。我可以在运行时获得正确的字符串(包括调试)。【参考方案3】:

使用GetEntryAssembly 而不是GetExecutingAssembly 从当前可执行文件而不是从当前执行的DLL 中获取版本,如下所示:

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

【讨论】:

【参考方案4】:
string version = Assembly.GetExecutingAssembly().GetName().Version.ToString(); 

Console.WriteLine(version);

【讨论】:

我不明白为什么这个回复和下面的回复描述了相同的答案,但是一个得到+17,另一个得到-1 @Smith.Lai 因为是相同的答案,除了 2 年后。 @Smith.Lai 你说得对,我已经编辑了other answer 来清理一下。它比这个答案更有效,这只是top-voted answer 的欺骗。

以上是关于如何在后面的代码中读取 WPF 发布版本号的主要内容,如果未能解决你的问题,请参考以下文章

在后面的代码中创建样式

Binding 中的 WPF StringFormat 在后面的代码中不起作用

WPF 在后面的代码中设置 DataTemplate 网格大小(ResourceDictionary)

DELPHI如何读取cxcheckcombobox中的值,在后面的代码中要用到其中的数据(数据库有多个,一个的我会)

如何从 WPF 页面触发 KeyDown 事件

如何允许完整的 WPF 故事板动画