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

如何隐藏VS解决方案资源管理器中的NuGet嵌入文件并自动配置ExcludeAssets

增量源生成器NuGet包自动配置ExcludeAssets的可行方案

问题背景

我开发了首个增量源生成器NuGet包,最初将其嵌入analyzer/cs NuGet子目录作为分析器时运行正常。为了让消费者能编辑随包提供的.cs文件以定制生成代码,我修改了包项目的.csproj,添加以下配置嵌入目标.cs文件并打包build目录下的props文件:

<ItemGroup>
  <None Include="Custom_Warnings\SettableNTimesProperty.cs">
    <Pack>true</Pack>
    <PackagePath>Copied_Files\Custom_Warnings</PackagePath>
    <PackageCopyToOutput>false</PackageCopyToOutput>
  </None>
  <None Include="build\*.props">
    <Pack>true</Pack>
    <PackagePath>build\$(TargetFramework)\</PackagePath>
    <PackageCopyToOutput>false</PackageCopyToOutput>
  </None>
</ItemGroup>

修改后出现副作用:消费项目的解决方案资源管理器中会显示props文件和readme文件,而之前仅作为分析器时不会显示。手动在消费项目的.csproj中添加以下配置可解决该问题:

<ItemGroup>
  <PackageReference Include="SettableOnceProperty" Version="0.1.1">
    <ExcludeAssets>Compile</ExcludeAssets>
  </PackageReference>
</ItemGroup>

现需确认是否可通过包内的props文件自动为所有消费项目添加<ExcludeAssets>Compile</ExcludeAssets>配置。

可行方案

完全可以通过包内的props文件实现自动配置,步骤如下:

  1. 在NuGet包项目的build目录下(对应打包后的build\$(TargetFramework)路径),创建或编辑与包名同名的props文件(例如SettableOnceProperty.props)。
  2. 在该props文件中添加以下内容,通过Update属性修改当前包的PackageReference元数据:
<ItemGroup>
  <PackageReference Update="$(NuGetPackageId)" Include="$(PackageVersion)">
    <ExcludeAssets>Compile</ExcludeAssets>
  </PackageReference>
</ItemGroup>

使用$(NuGetPackageId)和$(PackageVersion)可确保配置与当前包的信息自动对齐,无需硬编码版本号。
3. 重新打包并发布NuGet包,消费者安装后,该props文件会被NuGet自动导入项目,无需手动修改配置即可隐藏不必要的文件。

原理说明

NuGet会自动识别包内build目录下的props/targets文件,并在消费项目构建阶段自动导入。通过PackageReference的Update属性,可修改已存在的引用元数据,从而自动为所有消费者添加ExcludeAssets配置,避免手动操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 00:06:25