我正在尝试为一个dotnet core 2.0项目设计一个构建脚本,它执行以下操作:
- 清理输出目录
- 使用 -o bin\Publish 构建解决方案
- 使用 dotnet vstest 运行单元测试
- 使用 dotnet pack 创建 Nuget 包
由于我知道在步骤1-3中源代码已经被构建和测试过,所以我不想为nuget包重新构建我的代码,因此我指定了 --no-build 和 --no-restore。
我遇到的问题是,在创建包时,因为我没有进行构建并且输出目录设置为 bin\Publish,所以 pack 命令正在查找 bin\Debug 目录中的文件。
有没有办法设置 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)构建方案中通常非常有用,因为您知道代码以前已经构建过。所以我希望这是可能的,只是我漏掉了一些显而易见的东西。感谢任何帮助。
--no-build
也会隐式地设置--no-restore
(根据文档)。 - Alex 75dotnet pack
命令只包含自身的构建输出,而不包括任何依赖项(这些依赖项作为NuGet依赖项包含在内,因此您会得到每个csproj的.nupkg文件)。如果您正在构建工具,则可以构建工具包 教程文档。 - Martin Ullrich