我希望我的 WPF 应用程序有一个发布版本。我尝试使用 这个 问题的回答,它有效了,但问题是我们可以手动更改那里的值。我想知道我的项目实际上发布了多少次(不需要版本号,只需要知道我发布了多少次应用程序)。这可以做到吗?
使用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";
}
您可能会对两组数字感到困惑。请注意,您可以在两个不同的位置设置 WPF 应用的版本:
AssemblyInfo.cs
文件中声明的 AssemblyVersion,如果您展开解决方案资源管理器中的项目属性节点,就可以找到它。它们相似之处在于它们都提供了 4 个数字:主版本号、次版本号、生成号和修订号。区别在于,如果应用程序实际上已发布(即已安装),则 发布版本
仅在此时可用。它在调试会话中不可用,也不可在将可执行文件复制到另一台计算机并在那里运行时使用。因此,如果您只需要跟踪可执行文件的版本,请使用 AssemblyInfo.cs。
相应地,要读取数据,请使用以下代码:
1 要读取发布版本(在发布选项卡中声明)
using System.Deployment.Application;
ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString();
注意,在这种情况下:a)您需要添加对System.Deployment
程序集的引用,b)如果应用程序未部署,则它将无法正常工作。
Assembly.GetExecutingAssembly().GetName().Version;
这个总是有效的。
如果我们无法从启动程序集中获取应用程序版本号,可以采用通用解决方案:
var version = System.Reflection.Assembly.GetEntryAssembly().GetName().Version;
string appVersion = $"{version.Major}.{version.Minor}";
GetEntryAssembly返回启动项目的版本信息。
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);