如何“ dotnet pack”一个已经编译的项目 [英] How to "dotnet pack" an already compiled project
问题描述
我正在尝试为dotnet core 2.0项目设计一个生成脚本,该脚本执行以下操作
I'm trying to design a build script for a dotnet core 2.0 project that does the following actions
- 清理输出目录
- 使用-o bin\Publish 构建解决方案
- 使用dotnet vstest运行单元测试
- 创建Nuget包使用dotnet pack
- Cleans output directories
- Builds Solution with -o bin\Publish
- Runs Unit Tests with dotnet vstest
- Creates a Nuget package with dotnet pack
因为我知道源代码已经在步骤1-3中构建并测试过,所以我不想重建我的代码对于nuget软件包,所以我要指定--no-build和--no-restore
Because I know the source code has been built and tested in steps 1-3 I do not want to rebuild my code for the nuget package, so I am specifying --no-build and --no-restore
我遇到的困难是创建软件包时,因为我不在构建中,输出目录设置为bin\Publish-pack命令在bin\Debug目录中查找项目。
The difficulty I'm having is that when creating the package, because I am not building and the output directory is set to be bin\Publish - the pack command is looking for items in the bin\Debug directory.
有没有办法我可以将dotnet pack命令设置为知道在哪里查找已编译的对象?
Is there a way I can set the dotnet pack command to know where to look for the already compiled objects?
这是我的构建脚本示例
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
默认情况下,dotnet pack首先构建项目。如果您希望
避免这种情况,请传递--no-build选项。这在连续集成(CI)构建方案中通常很有用,因为您知道代码
是先前构建的。
"By default, dotnet pack builds the project first. If you wish to avoid this behavior, pass the --no-build option. This is often useful in Continuous Integration (CI) build scenarios where you know the code was previously built."
所以我希望这是可能的,并且我遗漏了一些显而易见的东西。我们将不胜感激。
So I'm hoping that this is possible and I'm missing something obvious. Any help would be appreciated.
推荐答案
这是因为 dotnet pack --no-build
选项将尝试使用以前构建的输出,但是由于您将其构建为非输出而找不到它-standard输出路径和打包逻辑需要定位生成到生成输出中的某些资产。
The reason for this is that the dotnet pack --no-build
option will try to use the previously built output, but can't find it since you built to a non-standard output path and the pack logic needs to locate some assets generated into the build output.
-o
pack
和 build
命令的内部选项不同,但是您可以将pack命令更改为:
The -o
options are internally different for the pack
and build
commands but you can change the pack command to:
dotnet pack --no-build --no-restore ..\MySolution.ConsoleApp\MySolution.csproj -o bin\Publish\Nuget\ /p:OutputPath=bin\Publish\
这将使用构建的输出放入 bin\Publish
目录并将其放在 bin\Publish\Nuget\
This will use the output built into the bin\Publish
directory and put it into the Nuget output directory in bin\Publish\Nuget\
这篇关于如何“ dotnet pack”一个已经编译的项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!