.NET Core 3.1 WPF应用dynamic转换报CS2066编译错误咨询
.NET Core 3.1下SolidWorks API WPF插件dynamic类型隐式转换编译异常问题
问题背景
正在借助SolidWorks API开发带WPF图形界面的SolidWorks插件,使用Visual Studio 2019创建了基于*.NET Core 3.1*的项目。SolidWorks API的大部分函数返回值类型为dynamic,此前在同样基于.NET Core 3.1的控制台应用中运行相同逻辑的代码时,未触发任何编译错误。
异常复现代码
using SW = SldWorks; using System.Windows; namespace dfdfdf { public partial class App : Application { private void App_Startup(object sender, StartupEventArgs e) { // 连接SolidWorks程序 SW.SldWorks SolidWorksApp = null; SW.ModelDoc2 swDoc; SolidWorksApp = new SldWorks.SldWorks(); // 连接活动文档 --> 此处触发编译错误 swDoc = SolidWorksApp.ActiveDoc; } } }
错误现象
WPF项目编译时触发错误,错误码为CS2066:无法隐式转换‘type1’类型为‘type2’类型,存在显式转换(是否缺少强制转换?),该错误仅在错误列表选择「仅生成」选项时显示。
已知ActiveDoc属性的返回值为dynamic类型,添加如下显式转换后代码即可正常编译:
swDoc = (SW.ModelDoc2) SolidWorksApp.ActiveDoc;
待解答疑问
- 为何完全相同的代码逻辑,在WPF应用中会触发编译错误,在控制台应用中却可以正常通过编译?按照对
dynamic类型的常规认知,dynamic的类型绑定是在运行时而非编译时执行,理论上不应在编译阶段抛出此类隐式转换错误。 - 目前已经对项目中的COM引用开启了「嵌入互操作类型」选项,是否存在其他遗漏的配置项,导致WPF项目和控制台项目出现行为差异?
- 如果.NET Core平台确实要求该COM互操作场景下必须使用显式转换,也可以接受该写法,希望明确两类项目在此场景下编译表现存在差异的根本原因。
内容的提问来源于stack exchange,提问作者StarsKy1990
相关产品推荐
相关产品推荐

