我想设置一个带有构建,测试和部署阶段的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是否有可以跳过构建的属性?
答案 0 :(得分:3)
这取决于您的工作流程中这是否可以接受,但您可以在<GeneratePackageOnBuild>
<PropertyGroup>
文件的.csproj
中使用.nupkg
属性,以便在构建项目时获取程序包。如果您的测试没有通过,您可以丢弃<PropertyGroup>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
</PropertyGroup>
文件,但至少没有额外的重建来获取NuGet包。
有一个更完整的示例说明如何在this article结尾使用此设置,但示例非常简单的代码段如下所示:
{{1}}