0

C# を使用してファイル バージョンを取得しようとしています。

string file = @"C:\somefile.dll";
Console.WriteLine(FileVersionInfo.GetVersionInfo(file).FileVersion);

ほとんどのファイルではこれで問題ありませんが、一部のファイルでは、Windows ファイル エクスプローラーに表示される結果とは異なる結果が返されます。

添付の画像を参照してください。Windows に表示されるファイル バージョンは「0.0.0.0」ですが、FileVersion プロパティを使用して取得したバージョンは「000.000.000.000」です。

同じ結果が得られる.NETの異なるバージョン(2、3.5、4)を使用してみました。

他の誰かがこの問題を経験しましたか?

ありがとう

ここに画像の説明を入力

4

2 に答える 2

1

その理由は、WIN32 API(およびファイルメタデータ)では、製品バージョンは文字列として定義されますが、ファイルバージョンは整数として定義されますが、.NETではすべてが整数として定義されます。

リフレクターを使用してFileVersionInfoクラスを検査すると、ロードが異なることがわかります。

 this.productVersion = GetFileVersionString(memIntPtr, string.Format(CultureInfo.InvariantCulture, format, new object[] { codepage, "ProductVersion" }))

だが:

this.fileMajor = HIWORD(fixedFileInfo.dwFileVersionMS);
this.fileMinor = LOWORD(fixedFileInfo.dwFileVersionMS);
this.fileBuild = HIWORD(fixedFileInfo.dwFileVersionLS);
this.filePrivate = LOWORD(fixedFileInfo.dwFileVersionLS);
于 2011-03-28T14:30:05.173 に答える
1

Windows エクスプローラーがバージョン部分の先頭の 0 を削除しているようです。

FileVersion 001.001.001.001 でアセンブリを作成してみてください。エクスプローラーで 1.1.1.1 と表示されます。ただし、コードは実際の値 (001.001.001.001) を返します。

編集:

Explorer はProductVersionとして 001.001.001.001 を返しますが、 AssemblyInformationalVersionが設定されていない場合のみで、その場合は ProductVersion として返されます。

于 2011-03-28T14:24:12.027 に答える