我创建了我的增量源生成器的第一个 Nuget 包。 一切正常,将其定位为
.csproj
中的分析器,嵌入分析器/cs Nuget 子文件夹下。
但现在我想改进我的包,以允许消费者直接编辑此包中给定的已发货
.cs
文件,以提供我的(不可编辑的)生成源的自定义。
因此,我修改了
.csproj
以嵌入我的 .cs 文件,并创建一个 build/xxx.props 文件来驱动使用项目的已安装 Nuget 包,并执行将嵌入的 .cs 复制到其解决方案中的任务。
<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
文件(以及我的自述文件)。当我的 Nuget 仅作为分析器时,这些是不可见的。
如何将它们隐藏起来?
注意我尝试过this,但它对我不起作用。
这是我在解决方案资源管理器中看到的内容(如果可能的话,希望不再被看到):
编辑,我发现,不是自动的,解决方案是在我的消费项目上设置
ExcludeAssets="Compile"
.csproj
:
<ItemGroup>
<PackageReference Include="SettableOnceProperty" Version="0.1.1">
<ExcludeAssets>Compile</ExcludeAssets>
</PackageReference>
</ItemGroup>
所以现在我的问题可能会变成:如何自动将这个
<ExcludeAssets>Compile</ExcludeAssets>
添加到我的消费项目.csproj
中?您知道是否可以通过 .props
文件实现吗?
事实证明这是设计使然,为了防止隐藏任何人可能在其包中发布的任何潜在的恶意或不需要的 msbuild 操作。 我可以忍受这一点,尽管我宁愿反转逻辑以默认隐藏它(大多数用例)并允许随意披露它(以允许检查任何潜在的不需要/恶意操作)。
顺便说一句,根据我在 GitHub 上得到的答案,我使用
ExcludeAssets="Compile"
的“手动”解决方案似乎是一个错误,不应该被允许。