7

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 为何不读取它?

4

3 回答 3

9

如果您只是想获得汇编版本,那很简单:

Console.WriteLine("The version of the currently executing assembly is: {0}", Assembly.GetExecutingAssembly().GetName().Version);

该属性是System.Version的一种类型,它具有MajorMinorBuildRevision属性。

例如。一个版本的程序集1.2.3.4有:

  • Major=1
  • Minor=2
  • Build=3
  • Revision=4
于 2013-02-14T02:21:03.280 回答
4

我将重复 Hans Passant 的评论:

[AssemblyVersion] 在 .NET 中非常重要。编译器特别对待属性,它在生成程序集的元数据时使用它。并且实际上并没有发出该属性,那将是两次。请改用 AssemblyName.Version,如图所示。

于 2013-02-15T00:30:44.487 回答
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));
于 2013-02-14T02:26:58.610 回答