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

如何阻止Visual Studio/Rider包管理器修改指定.csproj的<PackageReference>元素

问题描述

我有部分仅用于模拟器调试场景的NuGet包引用,配置代码如下:

<PackageReference Include="Foo.Bar" Version="1.2.4" Condition=" '$(IsForSimulator)' == 'false' ">

<PackageReference Include="Foo.Bar" Version="1.2.3-force-dud" Condition=" '$(IsForSimulator)' == 'true' ">
            <NoWarn>$(NoWarn);NU1605</NoWarn>
</PackageReference>

当我通过NuGet包管理器GUI将包更新至1.2.5版本时,两个<PackageReference>元素都会被修改!我希望第二个元素不受影响,请问是否可行?

解决方案

可行,你可以通过以下两种方式实现:

  • 给调试专用引用添加PrivateAssets="All"属性
    在模拟器专用的PackageReference中添加该属性后,NuGet包管理器GUI会将其识别为仅用于本地构建的内部引用,不会在更新操作中修改它。修改后的配置如下:

    <PackageReference Include="Foo.Bar" Version="1.2.3-force-dud" Condition=" '$(IsForSimulator)' == 'true' ">
        <NoWarn>$(NoWarn);NU1605</NoWarn>
        <PrivateAssets>All</PrivateAssets>
    </PackageReference>
    

    注意:后续通过GUI查看包列表时,这个调试专用引用可能会被标记为“已过时”,直接忽略即可,这正是我们想要的效果。

  • 用自定义MSBuild目标控制更新范围
    若不想添加PrivateAssets,可以在项目文件中添加自定义目标,明确指定仅更新非模拟器场景的包引用:

    <Target Name="UpdateNonSimulatorPackages">
        <PackageUpdate Include="Foo.Bar" Version="1.2.5" Condition=" '$(IsForSimulator)' == 'false' " />
    </Target>
    

    后续更新时通过MSBuild命令执行该目标,替代GUI操作,就能避免误改调试专用的引用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 08:40:55