2

(ここで用語が混同されていたらすみません。私は Java 開発者で、.Net と C# は初めてです。必要に応じて、この質問にタグを追加/修正してください。)

プロジェクトのビルドに MSBuild スクリプトを使用しています。タスクの 1 つは、アセンブリ情報を書き込むことです。

<Target Name="UpdateAssemblyInfo">
    <Message Text="Updating assemblies to file version $(AssemblyVersion) ($(AssemblyFileVersion))" Importance="high"/>
    <AssemblyInfo CodeLanguage="CS"
                  OutputFile="SharedAssemblyInfo.cs" 
                  AssemblyVersion="$(AssemblyVersion)"
                  AssemblyFileVersion="$(AssemblyFileVersion)"
                  AssemblyProduct="SVN revision $(BUILD_NUMBER)"/>
</Target>

これは次のように変換SharedAssemblyInfo.csされます。

[assembly: System.Reflection.AssemblyVersion("0.0.0")]

これに:

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.30319.18063
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

[assembly: System.Reflection.AssemblyVersion("1.4.0")]
[assembly: System.Reflection.AssemblyFileVersion("1.4.0.85725")]
[assembly: System.Reflection.AssemblyProduct("SVN revision 85725")]

ここまでは順調ですね。ただし、TeamCity のビルド ログに次のメッセージが表示されます。

CSC 警告 CS1607: アセンブリ生成 -- 'ファイル バージョン' に指定されたバージョン '1.4.0.85725' は、通常の 'major.minor.build.revision' 形式ではありません

バージョンの形式が警告メッセージで指定された形式に従っているように見えるのに、なぜこの警告が表示されるのですか?

4

2 に答える 2

4

バージョンの形式が警告メッセージで指定された形式に従っているように見えるのに、なぜこの警告が表示されるのですか?

その警告を再読し、強調を加えます。

通常の「major.minor.build. リビジョン' 形式

.NET のバージョン番号には、3 つではなく 4 つの部分があります。

これSystem.Versionに使用されるタイプは、より少ないタイプのバージョンを処理しますが、コードを使用System.Versionしてチェックし、より厳密にすることができます。

追加、Mihaiで指摘されているように、バージョンの要素は (65535) に制限されています。これは、コンパイラがさまざまなアセンブリからアセンブリに挿入するネイティブ1System.UInt16.MaxValueリソースに関連する Windows API の制限です (System.Version では、各要素は です)。属性。これにより、Windows エクスプローラーなどのツールでバージョンを読み取ることができます。System.Int32VS_FIXEDFILEINFO

概要:

  • バージョンには4 つの部分があるはずです。
  • 各部分は [0, 65535] の範囲にある必要があります。

1バージョンは 2 つのDWORDメンバーにまたがって格納されます。1 つはメジャー パーツとマイナー パーツ用、もう 1 つはビルドとリビジョン用です (ただし、Win32 ではこれらの名前は付けられません)。

于 2014-03-06T10:10:59.157 に答える