簡體   English   中英

引用非托管第三方程序集的C#項目在Debug中構建良好,但在Release配置中失敗

[英]The C# project referencing unmanaged third-party assembly builds fine in Debug, but fails in Release configuration

我在C#中有一個項目,該項目引用了非托管第三方DLL(它是ChilkatDotNet2.dll ,但似乎無關緊要)。 第三方DLL有2個版本,即x86和x64。 該項目在相應的<Reference>元素中引用了x86版本processorArchitecture=x86 它在Debug | Any CPU和Release | Any CPU中都可以正常構建。

現在,我將對第三方DLL的x64版本的引用更改為processorArchitecture=AMD64 (請不要問我原因,請:))。 Debug | Any CPU再次構建得很好。 但是Release | Any CPU失敗,並顯示以下錯誤: An attempt was made to load an assembly with an incorrect format: ChilkatDotNet2.dll

可能是什么原因? 我認為這是因為VS本身作為32位進程運行(對嗎?),但為什么它在Debug中構建良好?

可能是您的發布配置中的平台類型不正確。 如果您強烈引用x86 / AMD64程序集,則您的構建不能是任何CPU,並且必須是特定於平台的

我很驚訝這是一個編譯時錯誤。 以我的經驗,這些問題在運行時表現為BadImageFormatException 雖然您的解決方案平台是Any CPU,但我會檢查引用項目的目標平台,以確保它也設置為Any CPU。 另外,默認情況下,Visual Studio將使用x86配置而不是任何CPU創建應用程序項目。 因此,即使引用項目設置為Any CPU,入口應用程序項目最終也是引用任何CPU目標項目的JIT的決定因素。

好吧,問題似乎隱藏在該項目是從VS的較舊版本升級的事實中(我想是從2005年開始)。 我已經從頭開始重新創建它,添加了所有必要的東西,然后它起作用了! 而且,它變得對壞人而言是相同的,這使我發瘋:一個起作用,另一個不起作用。

所以,我放棄了,因為“太陽升起了?不要在那兒碰任何東西”。 :)感謝所有建議嘗試的人-感謝您的努力(+1)。

接受我自己的答案以將線程標記為已完成,但不要對其進行投票-它不包含有用的信息...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM