nuget 包部署与 VisualStudio 发布与 msbuild 发布

时间:2021-01-13 17:42:37

标签: visual-studio msbuild nuget

我正在尝试将 netstandard2.0 类库 nuget 部署到本地文件夹存储库(在 FolderProfile.pubxml 中指定)。这可以通过 VisualStudio 对项目的发布上下文操作正常工作:幕后过程构建项目并根据 project.csproj 打包所需的项目,然后根据 FolderProfile.pubxml 复制 nuget 包。我预计这也可以通过 msbuild 实现(用于脚本)。

msbuild /t:Publish /p:PublishProfile=FolderProfile.pubxml 

这会构建项目并将 bin/Debug/netstandard2.0 的内容复制到本地文件夹存储库。不幸的是,这与请求的不同,PublishProfile 指定了Release 配置,而project.csproj 明确声明只打包 .dll(既不是 .deps.json 也不是 .pdb)< /p>

msbuild /t:Pack

根据 project.csproj 打包 nuget 内容,但将包留在 bin/Debug 中。

可以通过 /p:Configuration=Release 实现切换到发布,但这仍然不足以实现预期。

我创建了一个简单的演示项目,可在 https://github.com/JanCervak/NugetPublishDifferenceRepro 获得, 本地文件夹存储库设置为 %TEMP%

使用 VS 2019 16.8.3

1 个答案:

答案 0 :(得分:0)

VS IDE 类库项目的发布按钮是msbuild -t:pack 而不是msbuild -t:publish

VS IDE 上,当您单击 lib 项目的发布按钮时,它实际上会执行 Pack 按钮来创建 nuget 包从 pubxml 文件读取。它是 VS IDE 的特殊功能,由 VS IDE 的集成任务、工具引起。换句话说,它就是这样设计的。 对于不同的项目发布按钮具有不同的功能。

然而,当你从命令行使用 msbuild -t:publish 作为 lib 项目时,摆脱了 VS IDE 环境,它的功能类似于 web 项目,windows 项目。(放置最终输出文件放入自定义发布文件夹)。

所以如果你想在lib项目中使用与VS IDE功能相同的命令,你应该放弃pubxml文件并使用这个命令:

  msbuild NugetPublishDifferenceRepro.csproj -t:pack -p:Configuration=Release;Platform=AnyCPU;PackageOutputPath=%Temp%

PackageOutputPath 用于打包目标并指定生成的 nuget 包的路径。

相关问题