我正在尝试为执行以下操作的dotnet core 2.0项目设计构建脚本
因为我知道源代码已在步骤1-3中构建和测试,所以我不想重建我的nuget包代码,所以我指定--no-build和--no-restore
我遇到的困难是,在创建软件包时,因为我没有构建并且输出目录设置为bin \ Publish - pack命令正在bin \ Debug目录中查找项目。 / p>
有没有办法可以将dotnet pack命令设置为知道在哪里查找已编译的对象?
以下是我的构建脚本
的示例dotnet clean ..\MySolution.sln -o bin/Publish/
dotnet build ..\MySolution.sln /p:Configuration=Release -o bin/Publish/
dotnet vstest ..\MySolution.UnitTests\bin\Publish\MySolution.UnitTests.dll
dotnet pack --no-build --no-restore ..\MySolution.ConsoleApp\MySolution.csproj -o bin\Publish\Nuget\
....
error : The file 'D:\MySolution.ConsoleApp\bin\Debug\netcoreapp2.0\MySolution.ConsoleApp.runtimeconfig.json' to be packed was not found on disk
根据Microsoft Docs on dotnet pack
"默认情况下,dotnet pack首先构建项目。如果你愿意的话 避免这种行为,传递--no-build选项。这通常很有用 在持续集成(CI)构建方案中,您可以了解代码 以前是建造的。"
所以我希望这是可能的,我错过了一些明显的东西。任何帮助将不胜感激。
答案 0 :(得分:3)
原因是dotnet pack --no-build
选项将尝试使用以前构建的输出,但由于您构建到非标准输出路径并且包逻辑需要找到某些资产,因此无法找到它生成到构建输出中。
-o
和pack
命令的build
选项在内部不同,但您可以将pack命令更改为:
dotnet pack --no-build --no-restore ..\MySolution.ConsoleApp\MySolution.csproj -o bin\Publish\Nuget\ /p:OutputPath=bin\Publish\
这将使用bin\Publish
目录中内置的输出并将其放入bin\Publish\Nuget\