web-dev-qa-db-ja.com

VSTSビルドプロセスで「dotnet pack」を使用してパッケージバージョンにビルド番号を追加する

.NET Frameworkライブラリを使用すると、ワイルドカードを使用してバージョンを指定でき、VSTSでNUGETビルドタスクを実行すると、NUGET packコマンドがビルド日付とバージョンを自動的に追加します。

[Assembly: AssemblyVersion("1.0.*")]

NUGET PACKは、日付番号とビルドIDを追加した_1.0.6604.1234_のようなバージョンのNUPKGファイルを生成します。

NET標準の問題

.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)に設定できますか?

または、パッケージ化時にビルドバージョンの自動インクリメントを処理する別の方法はありますか?

8
Quango

@ patricklu-msftの提案に感謝します。

以前にNUGET packdotnet packを使用して行ったワイルドカードの動作をエミュレートする組み込みの方法も、<Version>タグをプロジェクトファイルから取得する方法もないようです。

そのため、これを行う新しいVSTSビルドタスクを作成しました。MarketPlaceに VersionTaskReader を作成します。

この拡張機能は.csprojまたは.vbprojを指すことができ、VERSIONが追加された環境変数BUILDIDVERSION_BUILDを設定します。必要に応じて、オプションでプレフィックスを追加して、各インスタンスを異なるものにすることができます。

たとえば、プロジェクトに<Version>1.1</Version>が含まれている場合、VERSION_BUILD1.1.8680のようになります。

次に、dotnet packタスクは、バージョン番号オプション画面で環境変数VERSION_BUILDを使用できるため、ビルド番号が自動的に増加します。

5
Quango

最初に_Use an environment variable_を選択して自動パッケージのバージョン管理temp$(build.buildNumber))as環境変数

enter image description hereenter image description here

詳細については、次のリンクを参照してください。 ドットネットパックの自動パッケージのバージョン管理ビルド番号の説明

もう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_になります。この場合、自動パッケージバージョン管理を選択しないでください。

9
PatrickLu-MSFT