2017-10-27 15 views
1

ビルド、テスト、デプロイの各段階でCI/CDパイプラインをセットアップしたいと思います。 私が構築し、すでに構築されている..\BuildOutput\MyProject.dllに対してテストを実行しますプロジェクトを再ビルドせずにmsbuildでnugetパッケージを作成するには?

msbuild src\MyProject.csproj /t:Restore 
msbuild src\MyProject.csproj /p:Configuration=Release /p:OutputPath=../BuildOutput 

次でビルド段階で私のプロジェクトをビルドすることができます。

msbuild tests\MyProject.Tests.csproj /t:Restore 
msbuild tests\MyProject.Tests.csproj /p:Configuration=Release /p:OutputPath=../BuildOutput /p:BuildProjectReferences=false 
vstest.console BuildOutput\MyProject.Tests.dll 

これまでに動作するようです。

今、私はナゲットパッケージを生成したいと思います。

msbuild src\MyProject.csproj /t:Pack /p:Configuration=Release /p:OutputPath=../BuildOutput /p:VersionPrefix=1.2.3 

をそして、それはBuildOutputフォルダにMyProject.1.2.3.nupkgを作成します。 私は呼び出すことができます。 しかし、それはそのプロジェクトを再ビルドします。

私はdotnet cliと似たようなものを見ています。

dotnet pack --no-build 

しかし、私のプロジェクトは、COMの参照を持っているので、私はdotnetを使用することはできません。

は、私はまた、Nuget.exeに見えたが、私はMSBuildの構築スキップすることができる性質を持っていますnuget pack

Unable to cast object of type 'System.String' to type NuGet.Frameworks.NuGet.Frameworks1051960.NuGetFramework'. 

を呼び出すときにエラーを投げているようですか?

答えて

1

これはあなたのワークフローに受け入れられるかどうかに依存しますが、あなたはあなたのプロジェクトをビルドするたびに、パッケージを得るためにあなたの.csprojファイルの<PropertyGroup><GeneratePackageOnBuild>プロパティを使用することができます。テストが完了しない場合は、.nupkgファイルを破棄できますが、少なくともNuGetパッケージを入手するための追加の再構築はありません。

this articleの終わりに、この設定を使用する方法の詳細な例がありますが、代表的な非常に単純なスニペットは次のようになります。同様に私の心を交差させフロー

<PropertyGroup> 
    <GeneratePackageOnBuild>True</GeneratePackageOnBuild> 
</PropertyGroup> 
+0

。ビルド段階で私は自分のプロジェクトをビルドし、そのパッケージを作成します。展開するときは、ビルド段階で生成されたパッケージを発送するだけです。ビルド段階ではいつもパッケージを作成するのが少し冗長だと感じていますが、私はまだまったく使用できないパイプラインを好みます:)。 –

関連する問題