在包时设置包 ID?



我试图弄清楚如何在构建时或特别是在包时指定packageId。我的 csproj 中有以下内容,它非常适合在本地创建包以进行测试。我们正在使用 Azure DevOps 生成管道来生成和打包 nuget 包,我希望能够将 packageId 设置为生成管道中的任务或 msbuild 参数。

有人对我如何实现这一目标有建议吗?

谢谢

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net461</TargetFramework>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);Dependencies</TargetsForTfmSpecificBuildOutput>
<Version>0.1.0.5</Version>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<AssemblyName>MyAssembly</AssemblyName>
<RootNamespace>MyAssembly</RootNamespace>
<AssemblyVersion>1.0.0.0</AssemblyVersion>
<PackageId>MyAssembly.Test</PackageId>          <----- set at package time
<FileVersion>1.0.0.0</FileVersion>
<PackageLicenseUrl>https://my.domain.xyz/license.pdf</PackageLicenseUrl>
<AppxAutoIncrementPackageRevision>True</AppxAutoIncrementPackageRevision>
<Description>A useful description.</Description>
<Company>XYZ</Company>
<Authors>UiPath</Authors>
<PackageIconUrl>http://my.domain.xyz/favicon.ico</PackageIconUrl>

在打包时设置 PackageId?

答案是肯定的。

根据文档 MSBuild 包目标输入,我们可以知道支持在构建时设置PackageId

注意:

我看到您将属性GeneratePackageOnBuild设置为true,因此视觉工作室将自动生成 nuget 包。

因此,如果不使用额外的dotnet pack任务来打包包,请将 msbuild 参数-p:PackageId=<PackageId>添加到 dotnet 生成任务中,如下所示:

dotnet build -c Release -p:PackageId=<PackageId>

如果您有其他dotnet pack任务来打包包裹,@Martin的答案是正确的。

注2:

当我们使用选项-p:PackageId更改包 ID 时,程序集名称没有更改。所以生成的包的Package ID与其AssemblyName不一致。当我们使用这个nuget包时,我们需要更加注意。或者,我们也可以更改AssemblyName,使其通过选项与包 ID 匹配-p:AssemblyName=<AssemblyName>

希望这有帮助。

你试过打电话吗?

dotnet pack -c Release -p:PackageId=The.Other.Packge.id

或 .NET Core CLI 任务中的等效项

您可以使用文件转换任务在克隆之后和构建之前修改 csproj 的 XML:

https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/file-transform?view=azure-devops

最新更新