如何在 Azure Devops 中使用 msbuild 创建具有发布和调试配置的 nuget 文件

Posted

技术标签:

【中文标题】如何在 Azure Devops 中使用 msbuild 创建具有发布和调试配置的 nuget 文件【英文标题】:How to create a nuget file with both the Release and Debug configurations using msbuild in Azure Devops 【发布时间】:2020-02-03 21:59:27 【问题描述】:

我需要创建一个 nuget 文件,其中包含我的 dll 的发布版本和调试版本。我需要能够使用 MSBuild 任务在 Azure Devops 中执行此操作。

由于 NuGet 任务中的错误,我正在使用 MSBuild,如果您使用新的包引用和项目引用,它不会正确执行依赖项信息。

我尝试过进行两次构建,一次在调试中,一次在发布中,然后让发布版本进行打包。这仍然只给了我一个文件。我还尝试使用 nuspec 文件来告诉它抓取两个文件,但这仍然只导致包中的一个文件。

【问题讨论】:

【参考方案1】:

如何在 Azure Devops 中使用 msbuild 创建具有发布和调试配置的 nuget 文件

恐怕您目前无法创建使用 msbuild 的 Release 和 Debug 配置的 nuget 文件。

这是因为 NuGet 包通常只包含一组特定目标框架的程序集。它并不是真正为发布调试和发布版本而设计的。

如果我们使用 nuget,我们可以使用 .nuspec 中的自定义 MSBuild .targets 文件,该文件有自己的引用和配置信息:

查看this thread了解更多详情。

但是,如果要使用MSBuild,我们无法直接指定dll文件,我们必须为debugrelease创建两个包,然后我们在项目文件中添加一个自定义的MSBuild .targets文件具有<Pack>true</Pack><PackagePath>build\</PackagePath> 属性,如下所示:

  <ItemGroup>
    <None Include="build\*.targets" Pack="True" PackagePath="build\" />
  </ItemGroup>

这种情况下,.targets文件会被打包到build文件夹中,然后导入到nuget安装工程中:

查看this thread了解更多详情。

此外,在.targets 文件中,您可以使用Choose/Whendebugrelease 选择PackageReference

<Choose>
    <When Condition=" '$(Configuration)'=='debug' ">
        <ItemGroup>
            <PackageReference Include="MyRefDebug"> 
              <Version>1.0</Version> 
            </PackageReference>
        </ItemGroup>
    </When>
    <Otherwise>
        <ItemGroup>
            <PackageReference Include="MyRefRelease"> 
              <Version>2.0</Version> 
            </PackageReference>
        </ItemGroup>
    </Otherwise>
</Choose>

查看github ticket 了解更多详情。

希望这会有所帮助。

【讨论】:

以上是关于如何在 Azure Devops 中使用 msbuild 创建具有发布和调试配置的 nuget 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在脚本中使用 system.accesstoken 创建 Azure Devops 服务连接

如何在 Azure Devops 中安装 Mac 配置文件?

如何使用 Azure 自动化运行手册将 Azure devops 存储库下载为 zip 文件?

如何通过 SSH 在 azure devops 管道复制文件中使用公钥

如何将 Azure Policy 与 Azure DevOps 集成?

如何在 Azure DevOps 的 OWASP ZAP 扫描中使用 XSLT 文件添加误报?