如何在MSBuild打包NuGet时排除content目录的.proto文件
原因
SDK风格csproj启用NuGet打包时,会默认将项目中标记为Content类型的文件自动放入包内的content、contentFiles目录。你项目中的.proto文件默认被识别为Content类型,或是被Grpc相关构建工具标记为可打包内容,才会被打进最终的nupkg里。
解决方案
二选一即可,Grpc项目优先用方法2,精准度更高。
方法1:全局移除proto文件的Content标记并禁止打包
在csproj中新增如下ItemGroup配置:
<ItemGroup> <!-- 从Content类型中移除所有proto文件 --> <Content Remove="**/*.proto" /> <!-- 将proto文件归为无操作类型,显式禁止打包 --> <None Include="**/*.proto" Pack="false" /> </ItemGroup>
该配置不会影响proto文件在本地项目中的正常使用,仅阻止它们被打入NuGet包。
方法2:针对Protobuf类型文件单独关闭打包(Grpc项目推荐)
如果你使用Grpc.Tools等包自动处理proto文件生成C#代码,proto文件通常会被识别为Protobuf项类型,直接加如下配置即可:
<ItemGroup> <Protobuf Update="**/*.proto" Pack="false" /> </ItemGroup>
该配置不会影响proto文件参与编译生成代码的流程,仅关闭打包逻辑。
如果你仅需要排除部分proto文件,把上述配置中的通配符
**/*.proto替换为对应文件的相对路径即可,多个文件用分号分隔。
验证方式
重新执行dotnet pack或MSBuild打包命令后,将生成的.nupkg文件后缀改为.zip解压,检查content、contentFiles目录下无.proto文件即为配置生效。
内容的提问来源于stack exchange,提问作者user19011893
相关产品推荐
相关产品推荐

