assemblyinfo.cs文件具有AssemblyVersion属性,但是当我运行以下命令时:
Attribute[] y = Assembly.GetExecutingAssembly().GetCustomAttributes();
我明白了:
System.Runtime.InteropServices.ComVisibleAttribute
System.Runtime.CompilerServices.RuntimeCompatibilityAttribute
System.Runtime.CompilerServices.CompilationRelaxationsAttribute
System.Runtime.InteropServices.GuidAttribute
System.Diagnostics.DebuggableAttribute
System.Reflection.AssemblyTrademarkAttribute
System.Reflection.AssemblyCopyrightAttribute
System.Reflection.AssemblyCompanyAttribute
System.Reflection.AssemblyConfigurationAttribute
System.Reflection.AssemblyFileVersionAttribute
System.Reflection.AssemblyProductAttribute
System.Reflection.AssemblyDescriptionAttribute
然而我已无数次检查过我的代码中存在此属性:
[assembly: AssemblyVersion("5.5.5.5")]
...如果我尝试直接访问它,我会得到一个例外:
Attribute x = Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(), typeof(AssemblyVersionAttribute)); //exception
我想我将无法使用该属性,但是.NET怎么没有阅读呢?
答案 0 :(得分:9)
如果你想要获得程序集版本,那就非常简单了:
Console.WriteLine("The version of the currently executing assembly is: {0}", Assembly.GetExecutingAssembly().GetName().Version);
该属性属于System.Version,其Major
,Minor
,Build
和Revision
属性。
EG。版本1.2.3.4
的程序集包含:
Major
= 1
Minor
= 2
Build
= 3
Revision
= 4
答案 1 :(得分:4)
我将重复Hans Passant的评论:
[AssemblyVersion]在.NET中是一个非常重要的事情。编译器特别处理该属性,它在生成程序集的元数据时使用它。并且实际上不会发出属性,这将是两次。请改用AssemblyName.Version,如图所示。
答案 2 :(得分:0)
(只是为了完善获得版本的风格......)
如果您尝试在任意程序集上获取文件版本信息(即,没有一个已加载/正在运行),您可以使用FileVersionInfo
- 但请注意,这可能不会与元数据中指定的AssemblyVersion
相同:
var filePath = @"c:\path-to-assembly-file";
FileVersionInfo info = FileVersionInfo.GetVersionInfo(filePath);
// the following two statements are roughly equivalent
Console.WriteLine(info.FileVersion);
Console.WriteLine(string.Format("{0}.{1}.{2}.{3}",
info.FileMajorPart,
info.FileMinorPart,
info.FileBuildPart,
info.FilePrivatePart));