.NET Frameworkライブラリを使用すると、ワイルドカードを使用してバージョンを指定でき、VSTSでNUGETビルドタスクを実行すると、NUGET packコマンドがビルド日付とバージョンを自動的に追加します。
[Assembly: AssemblyVersion("1.0.*")]
NUGET PACKは、日付番号とビルドIDを追加した_1.0.6604.1234
_のようなバージョンのNUPKGファイルを生成します。
.NET Coreおよび.NET標準では、新しい_.csproj
_形式はこのワイルドカード形式をサポートしていません。
Nuget.exeと一緒にパッケージ化することはできません(理由: この問題 )。ただし、ビルド番号を自動インクリメントする必要がある場合を除き、_dotnet pack
_を使用できます。 VSTSのdotnet
ビルドタスクを使用すると、バージョン番号を完全に置き換えることができますが、csprojファイルにバージョンを保持し、ビルド番号を追加するだけです(以前のように)。
Csprojファイルで_<VersionPrefix>x.y</VersionPrefix>
_を使用すると_nuget pack
_で機能することがわかり、追加のパラメーターVersionSuffix=$(Build.BuildNumber)
をpackタスクに追加できました。
最初の開発者がプロジェクトプロパティダイアログでプロジェクトのバージョンを更新するまで、すべてが問題なく見えました。 Visual StudioはVersionPrefixを無視して_<Version>
_タグを設定しました-Version
タグが存在するため、ビルド番号の修正は無視されます。
CsprojからVersion
を読み取る方法はありますか?もしそうなら、私はビルドプロパティをVersion=$(ProjectVersion).$(Build.BuildNumber)
に設定できますか?
または、パッケージ化時にビルドバージョンの自動インクリメントを処理する別の方法はありますか?
@ patricklu-msftの提案に感謝します。
以前にNUGET pack
でdotnet pack
を使用して行ったワイルドカードの動作をエミュレートする組み込みの方法も、<Version>
タグをプロジェクトファイルから取得する方法もないようです。
そのため、これを行う新しいVSTSビルドタスクを作成しました。MarketPlaceに VersionTaskReader を作成します。
この拡張機能は.csproj
または.vbproj
を指すことができ、VERSION
が追加された環境変数BUILDID
とVERSION_BUILD
を設定します。必要に応じて、オプションでプレフィックスを追加して、各インスタンスを異なるものにすることができます。
たとえば、プロジェクトに<Version>1.1</Version>
が含まれている場合、VERSION_BUILD
は1.1.8680
のようになります。
次に、dotnet pack
タスクは、バージョン番号オプション画面で環境変数VERSION_BUILD
を使用できるため、ビルド番号が自動的に増加します。
最初に_Use an environment variable
_を選択して自動パッケージのバージョン管理、temp
($(build.buildNumber)
)as環境変数。
詳細については、次のリンクを参照してください。 ドットネットパックの自動パッケージのバージョン管理ビルド番号の説明
もう1つの方法は、dotnet CLIタスクの「arguments」フィールドを使用することです。追加の引数をdotnet cliに渡すことができます。
--version-suffix $(Build.BuildNumber)
を使用すると、ビルド番号がバージョンサフィックスとして渡されます。 csprojに_<version>
_要素を設定せず、_<versionprefix>
_要素を設定してください。ビルドされたバージョンは_versionprefix-versionsuffix
_のようになります。たとえば、_<versionprefix>1.2.3</versionprefix>
_とビルド番号_201805002
_がある場合、ビルドされたバージョンは_1.2.3-201805002
_になります。この場合、自動パッケージバージョン管理を選択しないでください。