在 C# 中获取真实产品版本
get real product version in c#
这可能看起来相当简单,但是,获取版本的典型方法仅获取需要手动设置的版本信息,而不是发布的构建版本。
这导致(如果我从不进入属性并更改项目设置深处的值),版本总是返回 1.0.0.0。事实上,这也是当我从任何发布文件夹中右键单击任何已编译的 .NET exe 时始终显示的版本。例如:
/publish/1.0.0.2/foo.exe
属性显示 1.0.0.0
,即使是构建 1.0.0.2
。
我愿意接受将执行以下任一操作的解决方案:
- 发布时自动将实际文件版本设置为当前版本。
- 使用c#获取实际版本(非1.0.0.0)
不寻找黑客来添加我自己的版本控制系统。我想使用内置的机制(并且在 .NET 的前身中完美运行)。
为了进一步说明,似乎自动版本控制在 .NET 中是垃圾,它没有使用发布版本,而是使用内部版本
属性 > 应用程序 > [程序集信息]
提前致谢:)
我认为这可能是您的解决方案:
using System.Reflection;
....
string path = Assembly.GetExecutingAssembly().Location;
FileVersionInfo versioninfo = FileVersionInfo.GetVersionInfo(path);
return fvi.FileVersion; // type: string
这段代码 returns 清单文件中设置的程序集版本。它还适用于检索 nativ application/library
的汇编版本
编辑: 正如 adv12 之前所写,这将是我更新的解决方案:
using System.Deployment;
...
if (ApplicationDeployment.IsNetworkDeployed)
return ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString(4));
您可能正在使用类似的东西:
Assembly.GetExecutingAssembly().GetName().Version
...这将(我认为)从通常包含在 AssemblyInfo.cs
:
中的属性中获取版本号
[assembly: AssemblyFileVersion("1.0.0")]
[assembly: AssemblyVersionAttribute("1.0.0")]
要从您的构建中获取信息,请使用:
System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion
...但请注意,当应用程序未部署时,后者将抛出异常,就像您在 Visual Studio 中调试时一样。所以你可能想要一个 try/catch 围绕后者回退到前者。
这可能看起来相当简单,但是,获取版本的典型方法仅获取需要手动设置的版本信息,而不是发布的构建版本。
这导致(如果我从不进入属性并更改项目设置深处的值),版本总是返回 1.0.0.0。事实上,这也是当我从任何发布文件夹中右键单击任何已编译的 .NET exe 时始终显示的版本。例如:
/publish/1.0.0.2/foo.exe
属性显示 1.0.0.0
,即使是构建 1.0.0.2
。
我愿意接受将执行以下任一操作的解决方案:
- 发布时自动将实际文件版本设置为当前版本。
- 使用c#获取实际版本(非1.0.0.0)
不寻找黑客来添加我自己的版本控制系统。我想使用内置的机制(并且在 .NET 的前身中完美运行)。
为了进一步说明,似乎自动版本控制在 .NET 中是垃圾,它没有使用发布版本,而是使用内部版本
属性 > 应用程序 > [程序集信息]
提前致谢:)
我认为这可能是您的解决方案:
using System.Reflection;
....
string path = Assembly.GetExecutingAssembly().Location;
FileVersionInfo versioninfo = FileVersionInfo.GetVersionInfo(path);
return fvi.FileVersion; // type: string
这段代码 returns 清单文件中设置的程序集版本。它还适用于检索 nativ application/library
的汇编版本编辑: 正如 adv12 之前所写,这将是我更新的解决方案:
using System.Deployment;
...
if (ApplicationDeployment.IsNetworkDeployed)
return ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString(4));
您可能正在使用类似的东西:
Assembly.GetExecutingAssembly().GetName().Version
...这将(我认为)从通常包含在 AssemblyInfo.cs
:
[assembly: AssemblyFileVersion("1.0.0")]
[assembly: AssemblyVersionAttribute("1.0.0")]
要从您的构建中获取信息,请使用:
System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion
...但请注意,当应用程序未部署时,后者将抛出异常,就像您在 Visual Studio 中调试时一样。所以你可能想要一个 try/catch 围绕后者回退到前者。