如何让NuGet包被引用时自动在消费者csproj中添加<ExcludeAssets>runtime</ExcludeAssets>
实现NuGet包自动添加ExcludeAssets配置的方法
你只需要修改A.PluginBase项目自身的.csproj文件,添加对应配置,就能让消费者引用该包时自动带上<ExcludeAssets>runtime</ExcludeAssets>,无需手动编辑.csproj:
方法一:设置默认排除资产(推荐)
在项目的<PropertyGroup>节点中添加DefaultExcludeAssets属性,直接定义包的默认排除规则:
<PropertyGroup> <PackageId>A.PluginBase</PackageId> <Version>1.0.0</Version> <!-- 补充其他必填包属性:Authors、Description等 --> <DefaultExcludeAssets>runtime</DefaultExcludeAssets> </PropertyGroup>
这个属性会告诉NuGet,当任何项目引用该包时,默认排除runtime类型的资产,对应生成的PackageReference会自动包含<ExcludeAssets>runtime</ExcludeAssets>。
方法二:通过包引用元数据控制
如果需要更精细的资产权限控制,可以在项目的<ItemGroup>中添加对自身的引用并配置规则:
<ItemGroup> <PackageReference Update="A.PluginBase" Version="1.0.0"> <ExcludeAssets>runtime</ExcludeAssets> <!-- 确保该排除规则传递给所有引用此包的项目 --> <PrivateAssets>none</PrivateAssets> </PackageReference> </ItemGroup>
这种方式会明确指定该包的runtime资产被排除,并且让规则自动同步到消费者的引用配置中。
验证效果
构建并发布你的NuGet包后,当消费者通过NuGet包管理器安装A.PluginBase时,其项目的.csproj文件中会自动生成如下引用:
<PackageReference Include="A.PluginBase" Version="1.0.0"> <ExcludeAssets>runtime</ExcludeAssets> </PackageReference>
完全符合需求,无需消费者手动修改配置。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

