Blah.dllのAssemblyInfo.csからのこのスニペットを考えると:
[Assembly: AssemblyVersion("3.3.3.3")]
[Assembly: AssemblyFileVersion("2.2.2.2")]
そして、別の.exeで:
var fileInfo = FileVersionInfo.GetVersionInfo("/path/to/Blah.dll");
fileInfo.ProductVersion == fileInfo.FileVersion == true;
その他のSOの質問は、ProductVersionが「正しい」ことを示しています。私がそれをどのように使用しているかについて何か奇妙なことがあるかどうか、興味があります。
ProductVersionを「3.3.3.3」、FileVersionを「2.2.2.2」にするべきではありませんか?両方のプロパティをAssemblyFileVersionとして報告する原因は何ですか?
私は最初に答えを見つけました ここ 。参照しやすいように詳細を繰り返します。
AssemblyInfo.csファイルに含めることができる「バージョン」は3つあります。
[Assembly: AssemblyVersion("1.1.1.1")]
[Assembly: AssemblyInformationalVersion("2.2.2.2")]
[Assembly: AssemblyFileVersion("3.3.3.3")]
AssemblyInformationalVersion
は、指定されていない場合、デフォルトでAssemblyFileVersion
になります。同様に、AssemblyInformationalVersion
andAssemblyFileVersion
デフォルトはAssemblyVersion
両方が指定されていない場合。
あなたの例では、AssemblyInfo.csファイルにAssemblyInformationalVersion
が含まれていなかったため、デフォルトでAssemblyFileVersion
の値になります。以下に示すように、AssemblyInformationalVersion
はFileVersionInfo.ProductVersion
プロパティにマップされます。これは、テストがtrueを返す理由を説明しています。
明らかに、これにはいくつかの苛立たしい側面があります。まず、VisualStudioからAssemblyInformationalVersion
を設定する方法(私が知っている)はありません。この属性を含めるには、AssemblyInfo.csファイルを直接変更する必要があります。次に、AssemblyInformationalVersion
はFileVersionInfo.ProductVersion
プロパティにマップされますが、これは直感的ではありません。属性には、より適切にAssemblyProductVersion
という名前を付ける必要があります。そして明らかに、titleはdescriptionなどでもあります。
そうは言っても、これらの(および関連する)値をコードで取得するにはどうすればよいでしょうか?このような:
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();