如何" dotnet pack"已编译的项目

时间:2018-05-08 11:20:43

标签: .net msbuild .net-core nuget dotnet-cli

我正在尝试为执行以下操作的dotnet core 2.0项目设计构建脚本

  1. 清理输出目录
  2. 使用-o bin \ Publish
  3. 构建解决方案
  4. 使用dotnet vstest运行单元测试
  5. 使用dotnet pack
  6. 创建Nuget包

    因为我知道源代码已在步骤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)构建方案中,您可以了解代码   以前是建造的。"

    所以我希望这是可能的,我错过了一些明显的东西。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

原因是dotnet pack --no-build选项将尝试使用以前构建的输出,但由于您构建到非标准输出路径并且包逻辑需要找到某些资产,因此无法找到它生成到构建输出中。

-opack命令的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\

中的Nuget输出目录