如何在C#中以编程方式获取当前产品版本?
我的代码:
VersionNumber = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
我得到的VersionNumber=1.0.0.0,但当前版本是1.0.0.12。
有三个版本:汇编、文件和产品。获取产品版本:
using System.Reflection;
using System.Diagnostics;
Assembly assembly = Assembly.GetExecutingAssembly();
FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location);
string version = fileVersionInfo.ProductVersion;
我得到了问题的答案——只需引用System.Deployment.Application,尽管它在visual studio的开发中不起作用,但一旦部署应用程序,它就会起作用。
//using System.Deployment.Application;
//using System.Reflection;
public string CurrentVersion
{
get
{
return ApplicationDeployment.IsNetworkDeployed
? ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString()
: Assembly.GetExecutingAssembly().GetName().Version.ToString();
}
}
System.Reflection.Assembly.GetEntryAssembly().GetName().Version
获取产品版本(使用AssemblyInformationalVersionAttribute
指定)的另一种方法是
private static string AssemblyProductVersion
{
get
{
object[] attributes = Assembly.GetExecutingAssembly()
.GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), false);
return attributes.Length == 0 ?
"" :
((AssemblyInformationalVersionAttribute)attributes[0]).InformationalVersion;
}
}
在C#中,您需要使用反射和诊断
Assembly assembly = Assembly.GetExecutingAssembly();
FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location);
string version = fileVersionInfo.ProductVersion;
试试这个:
var thisApp = Assembly.GetExecutingAssembly();
AssemblyName name = new AssemblyName(thisApp.FullName);
VersionNumber = "v. " + name.Version;
另请参阅AssemblyName.Version
属性上的此Microsoft文档。
所有这些答案都要求使用.GetExecutingAssembly()
进行组装
如果您在dll中有此代码,它将返回dll版本号。
将该调用转换为GetCallingAssembly()
,以获得代码中想要知道的位置。
/// <summary>
/// Returns version like 2.1.15
/// </summary>
public static String ProductVersion
{
get
{
return new Version(FileVersionInfo.GetVersionInfo(Assembly.GetCallingAssembly().Location).ProductVersion).ToString();
}
}
var productVersion = FileVersionInfo.GetVersionInfo(typeof(SomeClassFromDesiredAssembly).Assembly.Location).ProductVersion;
我和你们大多数人都遇到了同样的问题。除非您手动进入并将assemblyInfo.cs更新到想要显示的版本,否则它将始终显示1.0.0.0。我想我们想在项目属性下显示发布版本修订号,但这似乎不是一个选项(根据我所读到的内容)。
我不确定在发表这些评论时是否存在这种情况,但现在在assemblyinfo.cs中有一种方法可以自动做到这一点。我也不满足于每次发布都必须手动更新这些内容。
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.*")]
这*会随着每次发布而自动递增。它与您在项目属性下看到的发布编号不同,但它肯定是递增的,而且肯定比手动操作要好。
然后您有几个选项来显示它,如上所述。我个人使用了我在另一个网站上发现的这个
Version version = Assembly.GetExecutingAssembly().GetName().Version;
lblRevision.Text = String.Format("{0}.{1}.{2}.{3}", version.Major, version.Minor, version.Build, version.Revision);