如何在后面的代码中读取 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)