[英]Warning as Error: Possible unintended reference comparison when upgrading from .Net 3.5 to .Net 4.5
[英]Upgrading .NET from 3.5 to 4.5 breaks dependencies
面向.NET 3.5框架项目的现有应用程序使用第三方DLL。 我决定重新定位到4.5,以使用默认的CultureInfo设置。
重新定向后,调用第三方dll的代码不再编译。
这是一个多语言的应用程序(英语/法语),我认为这可能与它有关,因为该构建的错误列表现在以法语显示。 在3.5中,错误列表是英文的。
我对错误消息的解释是:
"Impossible to incorporate the type interop 'Envox.ADXVoice.ADXVoiceClass.' Utilise the interface appropriate to the place."
该应用程序具有各种线程,这些线程有条件地调用法国文化,因此将测试移至基类并设置应用程序默认文化会很好。
有人遇到过类似的问题吗?
逐字错误是:
Error 7 Impossible d'incorporer le type interop 'Envox.ADXVoice.ADXVoiceClass'. Utilisez l'interface applicable à la place.
英文错误消息是:
错误CS1752:无法嵌入互操作类型'Envox.ADXVoice.ADXVoiceClass'。 请改用适用的界面。
生成它是因为您在Envox互操作库上将“嵌入互操作类型”属性设置为True。 .NET 4.0中的一项新功能非常理想,因为您不再需要部署互操作库或PIA。 它确实要求您使用略有不同的编程样式,并使用以下命令创建该COM服务器的对象:
var obj = new Envox.ADXVoice.ADXVoice();
换句话说,您在接口类型而不是类类型上使用new运算符。 C#程序员在看到这种情况时往往会吹破垫片,这通常是完全非法的。 但是准确的是,用C#处理COM对象的方式有点不寻常。 否则,它非常适合COM编程模型,因此您必须严格使用COM中的接口。
您还可以将“嵌入互操作类型”属性设置回False,这样就不必进行任何代码更改。 真的有点浪费。
Fwiw,让C#编译器说英语而不是法语,可能会领先一步。 检查此答案 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.