2014-04-04 141 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