CLR类库编译正常但C#调用返回CS0103错误如何解决?
故障原因与修复方案
1 最常见原因:未导入对应命名空间
C++/CLI项目中如果没有为CLRClass显式声明命名空间,会默认使用项目属性中配置的根命名空间。VS的F12跳转功能会自动解析类型的全限定名,因此可以正常跳转,但C#编译时要求必须显式导入命名空间或者使用类型全限定名。
修复方法
- 查看C++/CLI项目的根命名空间:右键C++/CLI项目→属性→常规→根命名空间,记录该名称
- 任选以下一种方式修改C#代码:
- 在C#代码顶部添加命名空间导入:
using 你记录的根命名空间; - 调用时使用全限定名:
你记录的根命名空间.CLRClass.CLRMethod();
- 在C#代码顶部添加命名空间导入:
2 目标框架或平台架构不匹配
排查与修复
- 确认两个项目的目标框架兼容:如果C#项目使用.NET Core 3.0+/.NET 5+,C++/CLI项目必须选择对应版本的CLR支持,不能使用仅兼容.NET Framework的C++/CLI项目。
- 统一项目架构:C++/CLI不支持AnyCPU架构,需要将整个解决方案的所有项目目标平台统一为x86或x64,避免编译时加载架构不匹配的程序集导致识别失败。
3 引用配置错误
如果C#项目是直接引用编译后的dll文件而非项目引用,需要确认引用的dll路径与C++/CLI项目最新编译输出的路径一致,且版本匹配。建议优先使用项目引用,会自动同步编译输出和架构匹配。
内容的提问来源于stack exchange,提问作者Marc Cayuela
相关产品推荐
相关产品推荐

