6

3桁のみのパッケージバージョンを生成する必要がありnuget packます(セマンティックバージョニングを行いたい)が、AssemblyVersion属性が「1.0.0」に設定されているcsprojで呼び出すと、結果のnupkgファイルはバージョン「1.0」で終了します.0.0" がメタデータ (およびファイル名) に含まれています。AssemblyVersionコマンド ライン ツールが、属性で指定された桁数を受け入れないのはなぜですか?

nuget specこれは、このようなスタブ nuspec ファイルを生成する csproj ファイルに対する呼び出しから開始しました(実際には、プレースホルダー値を持つタグがさらに含まれていますが、必要ないため削除しました)。

<?xml version="1.0"?>
<package >
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>$author$</authors>
    <owners>$author$</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>$description$</description>
    <releaseNotes>Release notes.</releaseNotes>
    <copyright>Copyright 2015</copyright>
  </metadata>
</package>

この nuspec ファイルを TFS で csproj ファイルと同じフォルダーにチェックインすると、次のように pack を呼び出すことができます。

nuget pack MyProject.csproj

プロジェクトの AssemblyInfo.cs ファイルには、バージョンを明示的に設定する行が含まれています。

[assembly: AssemblyVersion("1.0.0")]

ツールがアセンブリ バージョンを取得するときに 4 桁を使用しているという事実を除いて、すべて問題なく動作しています。ファイルエクスプローラーでdllを右クリックして詳細に移動すると、Windowsでもバージョンが3桁しか表示されません。NuGet が 4 桁を使用するのはなぜですか? 私はおそらく明らかな何かを見逃していますか?

nuspec でバージョンをハードコーディングすることは、明らかに理想的ではありません。これは、バージョン番号が常に同じであることを意図しているにもかかわらず、2 つの異なる場所でバージョン番号を維持する必要があるためです。$version$つまり、これは、NuGet 自体がプロジェクトから抽出する方法を知っている特別なプレースホルダー値の背後にある考え方であるはずでした。

4

3 に答える 3