You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据引用的PackageReference版本动态设置C#项目Version属性

从PackageReference同步版本到项目Version属性

要实现将指定PackageReference的Version同步到项目自身的Version属性,关键是要在MSBuild正确的执行时机里获取包的版本值——因为PackageReference的元数据解析是在特定目标阶段完成的,直接在PropertyGroup中引用会因为时机不对拿不到值。

以下是可行的配置方案:

<PropertyGroup>
  <!-- 初始留空,后续通过目标赋值 -->
  <Version></Version>
</PropertyGroup>

<ItemGroup>
  <PackageReference Include="A" Version="1.2.3.4" />
</ItemGroup>

<Target Name="SyncPackageAVersionToProject" BeforeTargets="PrepareForBuild">
  <!-- 过滤出引用的包"A" -->
  <ItemGroup>
    <TargetPackage Include="@(PackageReference)" Condition="'%(PackageReference.Identity)' == 'A'" />
  </ItemGroup>
  <!-- 将包的Version赋值给项目Version -->
  <PropertyGroup Condition="'@(TargetPackage)' != ''">
    <Version>%(TargetPackage.Version)</Version>
  </PropertyGroup>
</Target>

说明

  • BeforeTargets="PrepareForBuild":确保目标在项目版本被确定之前执行,此时PackageReference的元数据已经完成解析,能正确获取到Version值。
  • 通过Condition过滤出指定的包"A",避免其他包干扰。
  • 如果包"A"存在,就将其Version赋值给项目的Version属性;如果不存在,Version会保持初始空值(可根据需要添加默认值)。

验证方法

执行dotnet build后,查看生成的程序集文件属性,或运行dotnet msbuild /t:SyncPackageAVersionToProject /p:verbosity=detailed,在输出中可以看到Version属性已被正确赋值。

内容的提问来源于stack exchange,提问作者Roy Guggenheim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 04:35:07