我想展示我的桌面应用程序的发布版本。我正在尝试使用此代码:
_appVersion.Content = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
问题是我没有完全获得我在项目属性中的发布版本。下面是它的截图:
但我得到了3.0.0.12546
。有人知道问题在哪里吗?
答案 0 :(得分:6)
我也遇到了这个问题,发现AssemblyInfo.cs
中设置的版本号干扰了Properties
中设置的版本号:
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
我通常会在AssemblyInfo
之外评论这些行,并用
[assembly: AssemblyVersion("1.0.*")]
检查这些值是否已硬编码到AssemblyInfo
文件中。
有关自动版本控制的有趣讨论,请参阅this SO question。检查AssemblyInfo.cs
时,请确保自动增量(*
- 如果您使用它)仅针对AssemblyVersion
而非AssemblyFileVersion
。
调试程序时,可以在
中检查程序集的属性\bin\Release\app.publish
在Details
标签下,检查版本号。这是否与您在VS中指定的任何设置相匹配?
答案 1 :(得分:5)
我们可以创建一个将返回版本信息的属性 如下所述,我们可以使用该属性。
public string VersionLabel
{
get
{
if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed)
{
Version ver = System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion;
return string.Format("Product Name: {4}, Version: {0}.{1}.{2}.{3}", ver.Major, ver.Minor, ver.Build, ver.Revision, Assembly.GetEntryAssembly().GetName().Name);
}
else
{
var ver = Assembly.GetExecutingAssembly().GetName().Version;
return string.Format("Product Name: {4}, Version: {0}.{1}.{2}.{3}", ver.Major, ver.Minor, ver.Build, ver.Revision, Assembly.GetEntryAssembly().GetName().Name);
}
}
}
答案 2 :(得分:1)
System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
将为您提供AssemblyInfo.cs文件中存在的程序集版本,以获取您在发布对话框中设置的发布版本,您应该使用
System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion
但请注意,您必须添加对System.Deployment的引用,并且只有在通过右键单击项目文件并单击“发布”来发布应用程序后,它才会起作用,每次发布时,它都会增加修订版。
如果您尝试在调试模式下调用上面的行,它将无效并将引发异常,因此您可以使用以下代码:
try
{
return System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion;
}
catch(Exception ex)
{
return Assembly.GetExecutingAssembly().GetName().Version;
}
答案 3 :(得分:0)
将C#6.0与Lambda表达式一起使用
private string GetVersion => ApplicationDeployment.IsNetworkDeployed ? $"Version: {ApplicationDeployment.CurrentDeployment.CurrentVersion}" : $"Version: {Application.ProductVersion}";