我有一个我写过的程序,我正在尝试创建一个关于框的文件。我最近将我的程序产品版本更新为1.00.0003,我希望将其反映在about窗口中。
aboutBox的默认设置显示值1.0.0.0,即程序集版本,而不是产品版本。我一直在互联网上寻找如何显示产品版本。我尝试了所有这些:
{
Assembly assembly = Assembly.GetExecutingAssembly();
FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location);
string version = fileVersionInfo.ProductVersion;
Debug.WriteLine(version);
Debug.WriteLine(assembly.GetName().Version);
string v = VersionNumber;
Debug.WriteLine(v);
Debug.WriteLine( fileVersionInfo.FileVersion);
Debug.WriteLine(Application.ProductVersion);
Debug.WriteLine(AssemblyProductVersion);
Assembly assembly2 = Assembly.GetEntryAssembly();
FileVersionInfo fileVersionInfo2 = FileVersionInfo.GetVersionInfo(assembly.Location);
string version2 = fileVersionInfo2.ProductVersion;
Debug.WriteLine(version2);
Debug.WriteLine(assembly2.GetName().Version);
return version;
}
private string _ourVersion = "Version: v";
private string VersionNumber
{
get
{
System.Reflection.Assembly _assemblyInfo =
System.Reflection.Assembly.GetExecutingAssembly();
if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed)
_ourVersion += ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString();
else
{
if (_assemblyInfo != null)
_ourVersion += _assemblyInfo.GetName().Version.ToString();
}
return _ourVersion;
}
}
private static string AssemblyProductVersion
{
get
{
object[] attributes = Assembly.GetExecutingAssembly()
.GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), false);
return attributes.Length == 0 ?
"" :
((AssemblyInformationalVersionAttribute)attributes[0]).InformationalVersion;
}
}
这些中的每一个都返回1.0.0.0(是的,我确实在控制台中查找了它们的输出,而不是实际显示的内容),而不是我需要的1.00.0003。产品版本在InstallShield设置的“常规信息”选项卡中设置。安装时,转到程序和功能显示产品版本为1.00.0003,所以我无法弄清楚为什么这么难以以编程方式检索此值。有什么想法吗?
答案 0 :(得分:2)
您的产品版本应与装配版本相匹配 - 请查看How to make Product Version property match executable's version number automatically
答案 1 :(得分:1)
您要检索的版本1.00.0003是产品安装程序的版本。要以编程方式获取此版本,您需要检查安装程序(MSI文件),而不是已安装的文件。我不确定这是你想做什么,但问题Checking ProductVersion of an MSI programatically的答案解释了如何做到这一点。
如果您希望您的可执行文件包含相同的版本号,则需要使用诸如AssemblyFileVersion
之类的.NET属性或Windows VERSIONINFO
资源以某种方式存储版本号。
InstallShield允许您在命令行上指定产品版本。这允许您将产品版本存储在单个文件中,然后将其用作安装程序中嵌入的产品版本以及程序集的AssemblyFileVersion
的来源。
答案 2 :(得分:0)
如果只有安装程序知道此版本信息,那么可以从中检索它的唯一地方就是注册表。
以下安装程序属性提供在注册表项下编写的值:
VersionMinor派生自ProductVersion属性
VersionMajor派生自ProductVersion属性
从ProductVersion属性派生的版本
但我会选择@ devdigital(暗示)的建议 - 你应该有一个装配版本与你的安装程序版本匹配。