在 DNCore Pack 期间更改 "Referencee" $(PackageVersion)
Change "Referencee" $(PackageVersion) During DNCore Pack
我正在尝试使用 MSBuild 根据分支名称自动更新包版本。这适用于项目本身,但引用的项目(使用相同的 MSBuild 目标)使用默认版本 - 这意味着我的目标不是 运行。例如,假设我有以下项目:
- ConsoleApp1
- 项目参考:ClassLibrary1
- 类库1
构建上述内容时,我得到以下内容 nuspec/nugets:
- ConsoleApp1
version 0.0.2-beta00001
dependency id="ClassLibrary1" version="1.0.0"
- 类库
version 0.0.2-beta00001
请注意,正在拉取的 PackageVersion
是 ProjectReference
的默认值,而项目本身是使用发现的包版本构建的。
我已经尝试更改 GetTargetPathDependsOn
以及 BeforeTargets="GetTargetPath;GetProjectsReferencingProjectJson"
(在 Nuget Pack MSBuild 中四处寻找之后),但它们似乎没有效果。
<PropertyGroup>
<BuildDependsOn>
OverridePackageVersion;
$(BuildDependsOn);
</BuildDependsOn>
<GetTargetPathDependsOn>
OverridePackageVersion;
$(GetTargetPathDependsOn);
</GetTargetPathDependsOn>
</PropertyGroup>
<Target Name="OverridePackageVersion"
BeforeTargets="GetTargetPath;GetProjectsReferencingProjectJson"
DependsOnTargets="GetDefaultVersion">
<CreateProperty
Value=""
Condition="'$(AutoPackagePreName)'=='$(ReleaseBranchName)'">
<Output TaskParameter="Value" PropertyName="AutoPackagePreName" />
</CreateProperty>
<CreateProperty
Value="$([System.String]::Format( $(AutoPackagePreNumberFormat), $([MSBuild]::Add($(AutoPackagePreNumber), 0)) ))">
<Output TaskParameter="Value" PropertyName="AutoPackagePreNumber" />
</CreateProperty>
<!-- Final Override -->
<CreateProperty
Value="$(AutoPackageVersion)"
Condition="'$(AutoPackagePreName)'==''">
<Output TaskParameter="Value" PropertyName="PackageVersion" />
</CreateProperty>
<CreateProperty
Value="$(AutoPackageVersion)-$(AutoPackagePreName)$(AutoPackagePreNumber)"
Condition="'$(AutoPackagePreName)'!=''">
<Output TaskParameter="Value" PropertyName="PackageVersion" />
</CreateProperty>
<CreateProperty
Value="$(PackageVersion)"
Condition="'$(UpdateVersion)'=='true'">
<Output TaskParameter="Value" PropertyName="Version" />
</CreateProperty>
<Message Importance="High" Text="Selected package version $(PackageVersion)." />
</Target>
这完全可能吗,还是我必须在 CI 中使用 Powershell?
对于最近的 NuGet 和 .NET Core 2.* SDK 版本,您之前需要 运行 的目标是 CollectPackageReferences;PrepareForBuild
。为了让它在旧版本中工作,我还使用了 Restore;_GenerateRestoreProjectSpec
,但在最近的工具中应该不再需要这些了。请参阅我的 Directory.Builds.targets 我正在使用它来创建 public NuGet 程序包。
目前,依赖包版本在还原期间被锁定并从 obj\project.assets.json
文件中读取,这就是使用还原特定目标的原因。请注意,恢复不会从 NuGet 包导入 props/targets 文件,因此您目前无法通过包含适用于项目到项目引用的构建资产的 NuGet 包来使用版本控制逻辑。请参阅 the GitHub issue for it - 计划似乎是从读取资产文件转移到重新评估引用项目的版本,而不是在恢复期间锁定它们。
我正在尝试使用 MSBuild 根据分支名称自动更新包版本。这适用于项目本身,但引用的项目(使用相同的 MSBuild 目标)使用默认版本 - 这意味着我的目标不是 运行。例如,假设我有以下项目:
- ConsoleApp1
- 项目参考:ClassLibrary1
- 类库1
构建上述内容时,我得到以下内容 nuspec/nugets:
- ConsoleApp1
version 0.0.2-beta00001
dependency id="ClassLibrary1" version="1.0.0"
- 类库
version 0.0.2-beta00001
请注意,正在拉取的 PackageVersion
是 ProjectReference
的默认值,而项目本身是使用发现的包版本构建的。
我已经尝试更改 GetTargetPathDependsOn
以及 BeforeTargets="GetTargetPath;GetProjectsReferencingProjectJson"
(在 Nuget Pack MSBuild 中四处寻找之后),但它们似乎没有效果。
<PropertyGroup>
<BuildDependsOn>
OverridePackageVersion;
$(BuildDependsOn);
</BuildDependsOn>
<GetTargetPathDependsOn>
OverridePackageVersion;
$(GetTargetPathDependsOn);
</GetTargetPathDependsOn>
</PropertyGroup>
<Target Name="OverridePackageVersion"
BeforeTargets="GetTargetPath;GetProjectsReferencingProjectJson"
DependsOnTargets="GetDefaultVersion">
<CreateProperty
Value=""
Condition="'$(AutoPackagePreName)'=='$(ReleaseBranchName)'">
<Output TaskParameter="Value" PropertyName="AutoPackagePreName" />
</CreateProperty>
<CreateProperty
Value="$([System.String]::Format( $(AutoPackagePreNumberFormat), $([MSBuild]::Add($(AutoPackagePreNumber), 0)) ))">
<Output TaskParameter="Value" PropertyName="AutoPackagePreNumber" />
</CreateProperty>
<!-- Final Override -->
<CreateProperty
Value="$(AutoPackageVersion)"
Condition="'$(AutoPackagePreName)'==''">
<Output TaskParameter="Value" PropertyName="PackageVersion" />
</CreateProperty>
<CreateProperty
Value="$(AutoPackageVersion)-$(AutoPackagePreName)$(AutoPackagePreNumber)"
Condition="'$(AutoPackagePreName)'!=''">
<Output TaskParameter="Value" PropertyName="PackageVersion" />
</CreateProperty>
<CreateProperty
Value="$(PackageVersion)"
Condition="'$(UpdateVersion)'=='true'">
<Output TaskParameter="Value" PropertyName="Version" />
</CreateProperty>
<Message Importance="High" Text="Selected package version $(PackageVersion)." />
</Target>
这完全可能吗,还是我必须在 CI 中使用 Powershell?
对于最近的 NuGet 和 .NET Core 2.* SDK 版本,您之前需要 运行 的目标是 CollectPackageReferences;PrepareForBuild
。为了让它在旧版本中工作,我还使用了 Restore;_GenerateRestoreProjectSpec
,但在最近的工具中应该不再需要这些了。请参阅我的 Directory.Builds.targets 我正在使用它来创建 public NuGet 程序包。
目前,依赖包版本在还原期间被锁定并从 obj\project.assets.json
文件中读取,这就是使用还原特定目标的原因。请注意,恢复不会从 NuGet 包导入 props/targets 文件,因此您目前无法通过包含适用于项目到项目引用的构建资产的 NuGet 包来使用版本控制逻辑。请参阅 the GitHub issue for it - 计划似乎是从读取资产文件转移到重新评估引用项目的版本,而不是在恢复期间锁定它们。