从 VS 解决方案资源管理器中隐藏嵌入的 nuget 文件

Hide embedded nuget files from VS solution explorer

提问人:TRex 提问时间:8/28/2023 最后编辑:TRex 更新时间:8/31/2023 访问量:28

问:

我创建了增量源生成器的第一个 Nuget 包。 一切正常,将其定位为分析器,嵌入在 analyzer/cs Nuget 子文件夹下。.csproj

但是现在我想改进我的包,以允许消费者直接编辑此包中的给定交付文件,以提供我(不可编辑的)生成源的自定义。.cs

因此,我修改了我的文件以嵌入我的 .cs 文件,并创建一个 build/xxx.props 文件来驱动已安装的消费项目的 Nuget 包,并执行将嵌入.cs复制到其解决方案中的任务。.csproj

<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>

这确实是可行的,但作为一个不必要的副作用,现在使用项目可以在解决方案资源管理器中看到该文件(以及我的自述文件)。这些在当时是不可见的,因为我的 Nuget 只是作为分析器的目标。.props

如何把它们藏起来?

注意:我试过了,但它对我不起作用。

这是我在解决方案资源管理器中看到的内容(如果可能的话,希望不再被看到):enter image description here

编辑,我发现,不是自动的,解决方案是在我的消费项目上设置:ExcludeAssets="Compile".csproj

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

所以现在我的问题可能变成了:如何自动将其添加到我的消费项目中?你知道它是否可以通过文件实现吗?<ExcludeAssets>Compile</ExcludeAssets>.csproj.props

NuGet csproj msbuild-task csharp-source-generator

评论


答:

1赞 TRex 8/31/2023 #1

事实证明,这是设计使然,为了防止隐藏某人可能随其包发布的任何潜在的恶意或不需要的 msbuild 操作。 我可以忍受这一点,尽管我宁愿反转逻辑以默认隐藏它(大多数用例)并允许随意披露它(以允许检查任何潜在的不需要/恶意的行为)。

顺便说一句,根据我在 GitHub 上得到的答案,我的“手动”使用解决方案似乎是一个错误,不应该被允许。ExcludeAssets="Compile"