アプリケーションバージョンにビルド番号を追加します。例えば、 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")]
なぜこれが起こるのでしょうか?
here と読むと、どちらかの部分の最大値は65534です。これはオペレーティングシステムによって課される制限であるため、.NET固有のものでもありません。 Windowsはバージョン番号を2つの整数にまとめ、4つの符号なしショートを形成します。
メタデータを追加する (*
オプションの場合)は、最大許容値UInt16.MaxValue - 1 = 65534
になります( Gary Walker に感謝):
バージョンのすべてのコンポーネントは、0以上の整数である必要があります。メタデータは、アセンブリのメジャー、マイナー、ビルド、およびリビジョンコンポーネントを
UInt16.MaxValue - 1
の最大値に制限します。コンポーネントがこの値を超えると、コンパイルエラーが発生します。
201606071
はこの制限を超えています。
バージョンの各数字がushortであるため !それは残念だ。
netcoreapp2.0
をターゲットにしており、AssemblyInfo.cs
がまったくない場合は修正できます
エラーCS7034:指定されたバージョン文字列は必要な形式に適合していません
これを.csproj
ファイルに追加することにより:
<PropertyGroup>
<GenerateAssemblyInfo>False</GenerateAssemblyInfo>
<Deterministic>False</Deterministic>
</PropertyGroup>
.csprojファイルで、Deterministicをfalseに設定する必要があります。次に、ビルドまたはリビジョンでコンパイラに「*」を受け入れます。
この制限はアセンブリとファイルのバージョンにのみ適用されるため、.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>