我有一个内部WPF应用程序(.NET Framework4.8),该应用程序最近被更改为使用。使用侧加载和自动更新(正在运行)。这是所有的设置和工作良好;证书已安装,应用程序正确部署,并自动更新。
我现在想做的是更新我们当前显示的版本号。最初,我们通过ClickOnce进行部署,并使用ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString()
获取版本号。
我一直在为如何用新的部署战略来完成这一任务而奋斗。
据我所知,为了使用Windows.ApplicationModel
类,我需要使用Package
。但对于我的生活,我不知道如何把这个包到我的WPF应用程序(确切地说,是MainWindow.xaml.cs
)。我需要与这里相同的代码。
我目前尝试的是:
Microsoft.Windows.SDK.Contracts
nuGet包。参考文献UwpDesktop
nuGet包。参考文献我已经到了可以在应用程序中没有错误地拥有一个using Windows.ApplicationModel
的地步,但是我仍然不能访问Package
类。
我需要完成的唯一事情是让版本号显示在页脚栏中,并知道是否有新版本,这样我们就可以提示用户重新启动应用程序。我们不需要任何其他的UWP/WinRT库。我们有一些元素的软件,有昂贵的影响现实世界,不希望一个沉默的更新。人们通常会打开软件,而不是一整天都关闭它。然后,大多数用户可以在不知道修复或改进的情况下运行该软件。
最后的方法是手动查询和解析部署位置,检查新版本,但我仍然不确定如何获得本地应用程序版本。
我阅读的大部分资源都是2年以上的,而且随着桌面桥接器和其他与UWP的部署相关元素的交互,情况似乎发生了很大变化。我觉得有些东西已经改变到足以引起所有这些头痛,或者我完全错过了一些愚蠢的东西,这都是我。我也没有使用UWP的经验,所以有些文档有点神秘。
出于与我们使用的证书和某些库相关的相当重要的原因,我们需要更改此部署策略。用ClickOnce维护部署会比当前解决这个问题更麻烦。
有人知道如何检索通过Windows应用程序打包项目部署的WPF应用程序的版本号吗?
发布于 2022-05-12 05:17:47
如果WPF应用程序的目标是比.NET 5更早的版本,包括.NET Framework的所有版本,则应该将Microsoft.Windows.SDK.Contracts
NuGet包安装到WPF应用程序项目中。
然后,假设您运行打包项目(而不是直接运行未打包的WPF应用程序),您可以使用Windows.ApplicationModel.Package
属性:
var version = Windows.ApplicationModel.Package.Current.Id.Version;
还要确保打包项目的目标版本是Windows 10、版本1803或更高版本。
如果您的目标是.NET 5或更高版本的,则不应该安装Microsoft.Windows.SDK.Contracts
包。相反,您应该将WPF应用程序项目的<TargetFramework>
项目文件中的.csproj
元素的值更改为特定于Windows版本的TFM:
<TargetFramework>net5.0-windows10.0.17763.0</TargetFramework>
然后,您可以像以前一样使用Package
属性。
有关如何在桌面应用程序中调用文档 API的更多信息,请参考WinRT。
https://stackoverflow.com/questions/72207970
复制相似问题