web-dev-qa-db-ja.com

指定されたバージョン文字列が必要な形式に準拠していません-major [.minor [.build [.revision]]]

アプリケーションバージョンにビルド番号を追加します。例えば、 1.3.0.201606071

AssemblyInfoでこれを設定すると、次のコンパイルエラーが発生します。

エラーCS7034指定されたバージョン文字列は必要な形式に準拠していません-major [.minor [.build [.revision]]]

アセンブリ情報:

[Assembly:System.Reflection.AssemblyFileVersionAttribute("1.0.0.201606071")]
[Assembly:System.Reflection.AssemblyVersionAttribute("1.0.0.201606071")]
[Assembly:System.Reflection.AssemblyInformationalVersionAttribute("1.0.0.201606071")]

なぜこれが起こるのでしょうか?

39
Dave New

here と読むと、どちらかの部分の最大値は65534です。これはオペレーティングシステムによって課される制限であるため、.NET固有のものでもありません。 Windowsはバージョン番号を2つの整数にまとめ、4つの符号なしショートを形成します。

メタデータを追加する*オプションの場合)は、最大許容値UInt16.MaxValue - 1 = 65534になります( Gary Walker に感謝):

バージョンのすべてのコンポーネントは、0以上の整数である必要があります。メタデータは、アセンブリのメジャー、マイナー、ビルド、およびリビジョンコンポーネントをUInt16.MaxValue - 1の最大値に制限します。コンポーネントがこの値を超えると、コンパイルエラーが発生します。

201606071はこの制限を超えています。

40
Patrick Hofman
7
Dave New

netcoreapp2.0をターゲットにしており、AssemblyInfo.csがまったくない場合は修正できます

エラーCS7034:指定されたバージョン文字列は必要な形式に適合していません

これを.csprojファイルに追加することにより:

<PropertyGroup>
  <GenerateAssemblyInfo>False</GenerateAssemblyInfo>
  <Deterministic>False</Deterministic>
</PropertyGroup>
4
Dmitry Pavlov

.csprojファイルで、Deterministicをfalseに設定する必要があります。次に、ビルドまたはリビジョンでコンパイラに「*」を受け入れます。

0
HRolle

この制限はアセンブリとファイルのバージョンにのみ適用されるため、.Net Core 2.xを使用している場合は、csprojでそれぞれのバージョンを個別に設定することでこの制限を回避できます。

</PropertyGroup>
    <VersionPrefix>1.1.1.9000001</VersionPrefix>
    <VersionSuffix>$(VersionSuffix)</VersionSuffix>
    <AssemblyVersion>1.1.1.0</AssemblyVersion>
    <FileVersion>1.1.1.0</FileVersion>
</PropertyGroup>
0
J.D. Cain