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

How to create a nuget file with both the Release and Debug configurations using msbuild in Azure Devops

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

由于 NuGet 任务中的错误,我正在使用 MSBuild,如果您使用新的 packagereference 和 projectreference,它不会正确地提供依赖信息。

我试过做两个构建,一个在调试中,一个在发布中,然后让发布一个做一个包。这仍然只给了我一个文件。我还尝试使用 nuspec 文件来尝试告诉它获取两个文件,但这仍然只导致包中有一个文件。

How to create a nuget file with both the Release and Debug configurations using msbuild in Azure Devops

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

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

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

查看 了解更多详情。

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

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

在这种情况下,.targets文件会被打包到build文件夹中,导入到nuget安装项目中:

查看 了解更多详情。

此外,在 .targets 文件中,您可以使用 Choose/When 到 select PackageReference 用于 debugrelease

<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 了解更多详情。

希望这对您有所帮助。