如何使用msbuild创建nuget包而无需重建项目?

时间:2017-10-27 11:39:01

标签: .net msbuild nuget

我想设置一个带有构建,测试和部署阶段的CI / CD管道。 我可以使用

在构建阶段构建我的项目
msbuild src\MyProject.csproj /t:Restore 
msbuild src\MyProject.csproj /p:Configuration=Release /p:OutputPath=../BuildOutput

接下来,我将针对已经构建的..\BuildOutput\MyProject.dll构建并运行测试。

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

到目前为止,它似乎有效。

现在我想生成nuget包。 我可以打电话:

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

这会在MyProject.1.2.3.nupkg文件夹中创建BuildOutput。 然而,它重新构建了该项目。

我正在寻找与dotnet cli类似的东西。

dotnet pack --no-build

但是我不能使用dotnet,因为我的项目有一个COM引用。

我也查看了Nuget.exe,但是当我调用nuget pack

时似乎会出错
Unable to cast object of type 'System.String' to type NuGet.Frameworks.NuGet.Frameworks1051960.NuGetFramework'.

msbuild是否有可以跳过构建的属性?

1 个答案:

答案 0 :(得分:3)

这取决于您的工作流程中这是否可以接受,但您可以在<GeneratePackageOnBuild> <PropertyGroup>文件的.csproj中使用.nupkg属性,以便在构建项目时获取程序包。如果您的测试没有通过,您可以丢弃<PropertyGroup> <GeneratePackageOnBuild>True</GeneratePackageOnBuild> </PropertyGroup> 文件,但至少没有额外的重建来获取NuGet包。

有一个更完整的示例说明如何在this article结尾使用此设置,但示例非常简单的代码段如下所示:

{{1}}