如何修改csproj配置将NuGet包Content文件夹文件移至Test文件夹
NuGet包内自定义文件存放路径实现方案
NuGet对不同MSBuild项类型有默认的打包路径映射规则,Content类型的项默认会被自动放入包内的content、contentFiles目录,这就是你配置了<Content Include="@(Protobuf)"/>后包内自动生成Content文件夹的原因。要把文件移入自定义的Test文件夹且默认不对用户可见,不需要依赖Content项的默认打包逻辑,手动指定文件打包路径即可。
最简配置(不需要本地项目将proto识别为Content的场景)
直接替换原有ItemGroup配置即可:
<ItemGroup> <Protobuf Include="*.proto" GrpcServices="Both" /> <None Include="@(Protobuf)" Pack="true" PackagePath="Test/" /> </ItemGroup>
配置说明:
- 移除原有
Content项配置,避免触发默认Content文件打包规则 - 用
None项引用proto文件,不会被映射到默认的Content目录 Pack="true"标记这些文件需要被打入NuGet包PackagePath="Test/"指定文件在包内的存放路径为根目录下的Test文件夹,该目录下的文件不会被默认引入到安装包的用户项目中,符合你“用户默认看不到这些文件”的需求
兼容配置(本地开发需要保留Content项作用的场景)
如果你本地调试/编译阶段需要这些proto文件作为项目Content项存在,不需要删除原有Content配置,只要关闭Content项的默认打包逻辑,单独指定打包路径即可:
<ItemGroup> <Protobuf Include="*.proto" GrpcServices="Both" /> <Content Include="@(Protobuf)" Pack="false" /> <None Include="@(Protobuf)" Pack="true" PackagePath="Test/" /> </ItemGroup>
这种配置下,本地开发时proto文件依然作为项目Content项存在,但是打包时不会进入Content文件夹,只会被放入包内的Test目录。
小提示:如果不希望这些proto文件在VS解决方案资源管理器中显示,可以给
None项额外添加Visible="false"属性,不会影响打包和编译逻辑。
内容的提问来源于stack exchange,提问作者user19011893
相关产品推荐
相关产品推荐

