2017-03-14 8 views
19

TLDR:dotnet packは、アセンブリのためのナゲットパッケージを作成するときにバージョン情報を取得していますか?パッケージのバージョンは常にドットネットパックで1.0.0です

私は.NET 4.6.1プロジェクトから.NETコアプロジェクトproject.jsonに移行したライブラリを持っています。この期間の私のCI(TFS 2015 vnextを使用)では、私は自分のバージョン番号を取得し、project.jsonファイルのバージョン番号を新しいバージョンに置き換えます。 dotnet packコマンドはバージョンアップだけを行い、更新されたバージョン番号で新しいパッケージを作成します。

先週、TFS 2015からTFS 2017にアップグレードしました.Part.jsonが更新された.csprojファイルに置き換えられました。私はCIを更新しました。私のCIの間に - /Properties/AssemblyInfo.csファイルを更新し、AssemblyVersionタグを現在のビルドのバージョンに置き換えます。それから、私はソリューションを構築します。これはうまくいきます。それから私はソリューションをパッケージ化します。

しかし、正しいビルド番号にAssemblyInfo.csに設定されているAssemblyVersionAssemblyFileVersionにもかかわらず - dotnet packまだ*.1.0.0.nupkgあるファイルを.nupkg生産しています。

私には何が欠けていますか?あなたがdotnet packを使用する場合

dotnet pack $projectFile -o $currentDirectory 
+0

これはちょうど ' value'ですか? –

答えて

13

、バージョンが(今*.csproj以前project.json、)プロジェクト定義から引き出され、ないAssemblyInfo.cs

は、ここに私のpackコマンドです。したがって、新しいワークフローは、project.jsonの場合と非常によく似ています。

project.json to csproj migration docsからは、VersionPrefixVersionSuffixのプロパティを使用できます。

前に:今

{ 
    "version": "1.0.0-alpha-*" 
} 

<PropertyGroup> 
    <VersionPrefix>1.0.0</VersionPrefix> 
    <VersionSuffix>alpha</VersionSuffix> 
</PropertyGroup> 

また、1つのVersionプロパティを使用することができますが、ドキュメントは、これは "パッケージング中にバージョン設定を無効にすることができる" と警告しています。より良い

<PropertyGroup> 
    <Version>1.0.0-alpha</Version> 
</PropertyGroup> 
+1

私はpowershellを使って、ビルドの一部として.csprojを書き換えて、バージョン接頭辞とバージョン接尾辞を置き換えました。 –

+1

@AlexanderMatusiakあなたはpowershellコードを投稿できますか?ありがとう – mcintyre321

+3

これに追加するには、コマンドラインでVersionPrefixとVersionSuffix(または単一のVersionプロパティ)を "/p:Version=1.0.0-alpha"のようなものをdotnet packコマンドに追加します。 –

27

まだ、DOTNETパックコマンドに/p:Version=$(Build.BuildNumber)(TFS/VSTS)を指定し、それがnugetパッケージで指定されたバージョンでそれを構築します。 例(非TFSの特定):

dotnet pack .\src\example\example.csproj -o c:\published\example -c Release /p:Version=1.2.3 

例(TFSの特定)< - 私たちはPowerShellのスクリプトステップを使用して私たちのTFS 2017のパッキングのためにこれを使用しています。

dotnet pack $(Build.SourcesDirectory)\src\example\example.csproj -o $(Build.ArtifactStagingDirectory)\Pack -c Release /p:Version=$(Build.BuildNumber) 

注:パッケージ参照バージョンは更新されません。

+4

これに苦労する人は、 '* .csproj'ファイルに' 'や' 'の値がないことを確認してください。そうしないと、コマンドラインで指定したものが上書きされます。ありがとうエドワード、 – trailmax

+0

。インターネットを検索した後、私は同じ結論に達しました(私はCIビルドを介してバージョンを設定したい)。 csprojにデフォルトを追加して、Devが個人用PCを構築しているかどうかを確認することができます。私は定義されていない場合にのみVersionSuffixを設定するためにcsprojのConditionを使用しました。私はバージョン定義を上書きしませんでした。この方法では、バージョンには最後に "private。$ USERNAME"が付きます。ビルドのソースコードにはどのようにまとめられていますか?https://github.com/dotnet/sdk/blob/94a3f2856cb09e66ee7472820b4e26fb576b4686/src/Tasks/Microsoft.NET.Build.Tasks/build/Microsoft.NET.DefaultAssemblyInfo.targets – ripvlan

関連する問題