如何“dotnet包"一个已经编译好的项目 [英] 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 binPublish 构建解决方案
- 使用 dotnet vstest 运行单元测试
- 使用 dotnet pack 创建 Nuget 包
因为我知道源代码已经在步骤 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
我遇到的困难是在创建包时,因为我没有构建并且输出目录设置为 binPublish - pack 命令正在 binDebug 目录中查找项目.
The difficulty I'm having is that when creating the package, because I am not building and the output directory is set to be binPublish - the pack command is looking for items in the binDebug 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.UnitTestsinPublishMySolution.UnitTests.dll
dotnet pack --no-build --no-restore ..MySolution.ConsoleAppMySolution.csproj -o binPublishNuget
....
error : The file 'D:MySolution.ConsoleAppinDebug
etcoreapp2.0MySolution.ConsoleApp.runtimeconfig.json' to be packed was not found on disk
根据 Microsoft Docs on dotnet pack
"默认情况下,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
选项将尝试使用之前构建的输出,但可以找不到它,因为您构建到非标准输出路径,并且打包逻辑需要定位生成到构建输出中的一些资产.
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.ConsoleAppMySolution.csproj -o binPublishNuget /p:OutputPath=binPublish
这将使用 binPublish
目录中内置的输出并将其放入 binPublishNuget
This will use the output built into the binPublish
directory and put it into the Nuget output directory in binPublishNuget
这篇关于如何“dotnet包"一个已经编译好的项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!