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 では非常に重要です。コンパイラはこの属性を特別に扱い、アセンブリのメタデータを生成するときに使用します。そして実際には属性を発行しません。それは2回行うことになります。示されているように、代わりに 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 に答える