将.NET从3.5升级到4.5会破坏依赖性

时间:2014-04-04 00:37:33

标签: c# .net

面向.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. 

1 个答案:

答案 0 :(得分:3)

英文错误消息是:

  

错误CS1752:Interop type' 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#编译器说英语而不是法语。检查this answer