Dot-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文件夾中創建。但是,它會重新建構該項目。我正在尋找類似於
dotnetcli的東西。dotnet pack --no-build但我不能使用
dotnet,因為我的項目有一個 COM 引用。我也查看了 Nuget.exe,但是當我呼叫它時似乎會拋出一個錯誤
nuget packUnable to cast object of type 'System.String' to type NuGet.Frameworks.NuGet.Frameworks1051960.NuGetFramework'.msbuild 是否有可以跳過建構的屬性?
這取決於您的工作流程是否可以接受,但您可以在建構項目時使用文件中的屬性
<GeneratePackageOnBuild>來獲取包。如果您的測試沒有通過,您可以丟棄該文件,但至少沒有額外的重建來獲取 NuGet 包。<PropertyGroup>``.csproj``.nupkg在文章的末尾有一個更完整的範例,說明如何使用此設置輕鬆支持 VS2017 和 Nuget 1的多個目標框架 (TFM) ,但範例性非常簡單的程式碼段如下所示:
<PropertyGroup> <GeneratePackageOnBuild>True</GeneratePackageOnBuild> </PropertyGroup>1:雖然原始連結未報告 404,但在 2021 年 10 月顯示為空白。但是,可以在另一個 URL上找到同一篇文章。