在c#中获得真实的产品版本

时间:2015-06-03 18:31:22

标签: c# version

这可能看起来相当简单,但是,获取版本的典型方法只能获取需要手动设置的版本信息,而不是发布的构建版本。

这会导致(如果我从未进入属性并在项目设置中深入更改值),则版本始终返回1.0.0.0。实际上,当我从任何发布文件夹中右键单击任何已编译的.NET exe时,这也是一直出现的版本。例如:

/publish/1.0.0.2/foo.exe

属性显示1.0.0.0,即使这是构建1.0.0.2

我愿意接受能够执行以下任一操作的解决方案:

  1. 在发布时自动将实际文件版本设置为当前版本。
  2. 使用c#获取实际版本(不是1.0.0.0)。
  3. 不寻找黑客来添加我自己的版本控制系统。我想使用内置的机制(并且在.NET的前身中完美地工作)。

    为了补充说明,似乎自动版本控制在.NET中是垃圾,而不是使用发布版本,它使用的是内部版本

    属性>申请> [装配信息] enter image description here

    提前致谢:)

2 个答案:

答案 0 :(得分:1)

我认为这可能是你的解决方案:

using System.Reflection;

....

string path = Assembly.GetExecutingAssembly().Location;
FileVersionInfo versioninfo = FileVersionInfo.GetVersionInfo(path);

return fvi.FileVersion; // type: string

这段代码返回清单文件中设置的程序集的版本。它也适用于检索nativ应用程序/库的程序集版本

编辑:正如adv12之前所写,这将是我更新的解决方案:

using System.Deployment;

...

if (ApplicationDeployment.IsNetworkDeployed)
    return ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString(4));

答案 1 :(得分:1)

您可能正在使用以下内容:

Assembly.GetExecutingAssembly().GetName().Version

...(我认为)将从AssemblyInfo.cs中包含的属性中获取版本号:

[assembly: AssemblyFileVersion("1.0.0")]
[assembly: AssemblyVersionAttribute("1.0.0")]

要从构建中获取信息,请使用:

System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion

...但请注意,后者将在未部署应用程序时抛出异常,就像在Visual Studio中进行调试一样。因此,您可能希望围绕后者尝试/捕获,这可以追溯到前者。