[英]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.