eco*_*fey 28 .net c# versioning version-control version
鉴于Blah.dll的AssemblyInfo.cs的这个片段:
[assembly: AssemblyVersion("3.3.3.3")]
[assembly: AssemblyFileVersion("2.2.2.2")]
Run Code Online (Sandbox Code Playgroud)
然后在一个单独的.exe中:
var fileInfo = FileVersionInfo.GetVersionInfo("/path/to/Blah.dll");
fileInfo.ProductVersion == fileInfo.FileVersion == true;
Run Code Online (Sandbox Code Playgroud)
其他SO问题显示ProductVersion是"正确的",如果对我如何使用它有些奇怪的话会很奇怪.
ProductVersion不应该是"3.3.3.3"而FileVersion应该是"2.2.2.2"吗?什么会导致它将这两个属性报告为AssemblyFileVersion?
Mat*_*vis 49
我原来在这里找到了答案.我正在重复细节以便于参考.
AssemblyInfo.cs文件中可以包含三个"版本":
[assembly: AssemblyVersion("1.1.1.1")]
[assembly: AssemblyInformationalVersion("2.2.2.2")]
[assembly: AssemblyFileVersion("3.3.3.3")]
Run Code Online (Sandbox Code Playgroud)
AssemblyInformationalVersionAssemblyFileVersion如果未指定,则默认为.同样,AssemblyInformationalVersion 和 AssemblyFileVersion默认AssemblyVersion如果两者都没有规定.
在您的示例中,AssemblyInfo.cs文件未包含AssemblyInformationalVersion,因此默认值为AssemblyFileVersion.正如您将在下面看到的,AssemblyInformationalVersion映射到FileVersionInfo.ProductVersion属性,这解释了测试返回true的原因.
显然,这有一些令人沮丧的方面.首先,没有办法(我知道)AssemblyInformationalVersion从Visual Studio 设置.您必须直接修改AssemblyInfo.cs文件以包含此属性.其次,AssemblyInformationalVersion映射到FileVersionInfo.ProductVersion属性,这是非直观的.应该更恰当地命名该属性AssemblyProductVersion.显然,标题也是描述等.
那就是说,我们如何在代码中检索这些(和相关的)值?像这样:
Run Code Online (Sandbox Code Playgroud)AssemblyFileVersion => System.Diagnostics.FileVersionInfo.FileVersion AssemblyInformationalVersion => System.Diagnostics.FileVersionInfo.ProductVersion AssemblyVersion => System.Reflection.Assembly.Version /// others... AssemblyTitle => System.Diagnostics.FileVersionInfo.FileDescription AssemblyDescription => System.Diagnostics.FileVersionInfo.Comments AssemblyProduct => System.Diagnostics.FileVersionInfo.ProductName AssemblyCompany => System.Diagnostics.FileVersionInfo.CompanyName AssemblyCopyright => System.Diagnostics.FileVersionInfo.LegalCopyright AssemblyTrademark => System.Diagnostics.FileVersionInfo.LegalTrademarks
在这种情况下AssemblyVersion,使用这个:
string ver = Assembly.GetExecutingAssembly().GetName().Version.ToString();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14197 次 |
| 最近记录: |