扩展GRPC生成的密封分部类失败,求问题排查解决
问题原因及解决办法
1. 密封分部类的定义一致性问题
GRPC生成的MyClass是密封分部类(sealed partial class MyClass),C#要求同一个类的所有分部定义必须统一标记sealed。如果你的自定义分部类没加sealed修饰符,编译器会将其视为独立类,无法共享成员。
解决方式:自定义分部类必须添加sealed,示例代码:
namespace MyNamespaceA { sealed partial class MyClass { public string MyProperty { get; set; } } }
2. 命名空间与项目文件的有效性问题
- 确认自定义分部类的命名空间与生成类完全一致(C#命名空间区分大小写);
- 检查自定义文件是否被正确包含在项目中,没有被标记为“排除”或“不编译”。
3. 原类成员的访问权限限制
GRPC生成的myProp1大概率是私有(private)或内部(internal)级别:
- 私有成员仅在自身定义文件内可见,哪怕同命名空间的分部类也无法访问;
- 内部成员仅在同一程序集内可见,若自定义类在其他项目中则无法访问。
解决方式:若需访问该成员,可修改.proto文件配置,让GRPC生成公共属性(GRPC默认生成的属性多为PascalCase格式,比如MyProp1),通过公共属性间接访问。
4. 代码编译顺序问题
确保项目构建时先完成GRPC代码生成,再编译自定义分部类。若编译顺序颠倒,编译器会因找不到生成的MyClass,将自定义分部类识别为独立类,导致成员无法互通。
内容的提问来源于stack exchange,提问作者Slepoyi
相关产品推荐
相关产品推荐

