2017-08-08 79 views
0

我正在開發一個應用程序(C#winforms),它依賴於供應商提供的與硬件通信的DLL。.NET目標框架如何影響第三方DLL的加載?

如果讓我選擇.NET 4中(或其他更高)的目標框架,我得到嘗試調用的參考DLL的方法當出現以下消息:

DllNotFoundException:無法加載DLL「somelibrary .dll':對內存位置的訪問無效。 (來自HRESULT的異常:0x800703E6)

如果我選擇.NET 2.0或3.0的目標框架,則不會發生該錯誤。

我懷疑存在不兼容性或庫比.NET 3.0早。

這很可能是由於.DLL啓動了一個可執行文件,它充當應用程序和串口之間的通信處理程序。我曾嘗試將該應用程序設置爲使用各種兼容模式,並以管理員身份運行,但未成功。

我能做些什麼來避免這個錯誤,並針對更現代的.NET平臺,如4.5或更高版本? (或者我是否因爲使用了一個潛在的老DLL而被卡住了?)

應用程序平臺目標是x86,我正在使用默認設置的UAC在Win7 x64上開發。

+0

是否您嘗試加載的.net程序集?你有沒有試過用'ildasm.exe'打開它?是否有'fuslogwv.exe'提供的其他信息? – ironstone13

+0

@ ironstone13我會進一步調查你所建議的工具。我不確定裝配的類型。 – JYelton

回答

1

我不認爲這是100%正確的解決方案,但這裏有個想法,我認爲是有效的。

當您缺少依賴關係時,通常會發生此錯誤。在您的案例依賴關係爲您的somelibrary.dll。在FW2.0中,大多數文件都存儲在一些Program files (x86)\Reference Assemblies...中。我們知道有些事情在FW4 +中發生了變化,一些類被移走了,程序集不再在Program Files中,而是通過Nuget下載。因此,當你的目標是FW4.0 +時,你的應用開始尋找v4.0的依賴關係。我會使用一些反彙編程序,如免費的dotPeek,查看您在該DLL中引用的內容。然後我會嘗試在機器上找到這些內容,看看您是否沒有與命名空間相關的版本衝突

+0

感謝您的回答/建議。我對dotPeek並不熟悉,因此我會調查並瞭解它是否提供了任何見解。 – JYelton

+0

@JYelton只需google JetBrains dotPeek。 JetBrains是一家值得信賴的公司,擁有一系列.net的重要工具,比如'resharper'。下載它,安裝它並使用該程序打開DLL。或者你可以使用類似'NDepend'的東西。當然,有很多工具可以做到這一點。但dotPeek也是一個反射器。你可以看到裏面的代碼。除非你有DLL被混淆。然後dotPeek沒有什麼幫助。但我不知道依賴查看器是否可以在混淆的DLL中看到引用 –