【问题标题】:nuget package deploy with VisualStudio publish vs. msbuild publishnuget 包部署与 VisualStudio 发布与 msbuild 发布
【发布时间】:2021-04-18 18:30:38
【问题描述】:

我正在尝试将 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 都没有)

msbuild /t:Pack

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

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

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

使用 VS 2019 16.8.3

【问题讨论】:

    标签: visual-studio msbuild nuget


    【解决方案1】:

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

    VS IDE 上,当您单击 lib 项目的 Publish 按钮时,它实际上会执行 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为pack target,指定生成nuget包的路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-20
      • 2018-02-03
      • 2014-12-21
      • 1970-01-01
      • 2012-05-22
      • 2020-12-26
      • 1970-01-01
      相关资源
      最近更新 更多