2014-04-04 117 views
0

针对.NET 3.5框架项目的现有应用程序使用第三方DLL。我决定重新定位到4.5以使用默认的CultureInfo设置。将.NET从3.5升级到4.5打破依赖关系

重定向后,调用第三方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. 
+0

尽管StackOverflow具有英文性质,但发布原始错误可能会有帮助。您也可以使用http://unlocalize.com/获取英文版本。 – Mitch

+0

这是由于C#4.0语法更改(COM互操作) – linquize

+0

您好linquize,我很高兴调整代码并放弃向后兼容性。也许你可以发布需要的答案? –

回答

3

英语错误信息是:

错误CS1752:互操作类型 'Envox.ADXVoice.ADXVoiceClass' 不能被嵌入。改为使用适用的界面。

它是因Envox互操作库中的“Embed interop types”属性设置为True而生成的。 .NET 4.0中的新功能,非常适合,因为您不再需要部署互操作库或PIA了。它要求你使用一个稍微不同的编程风格,创建与COM服务器的对象:

var obj = new Envox.ADXVoice.ADXVoice(); 

换句话说,你用操作的接口类型,而不是类的类型。 C#程序员在看到这些时倾向于吹出垫片,这通常是非法的。但是它很准确,COM对象在C#中的处理方式有点不同寻常。它在其他方面符合COM编程模型,您严格使用COM中的接口。

您还可以将“嵌入互操作类型”属性重新设置为False,以便不必进行任何代码更改。真是浪费。 Fwiw,你可能会提前让你的C#编译器讲英文而不是法文。检查this answer