我有一個帶有以下文件的.NET 4.0 32位(x86)桌面應用程序,其中一個是從包裝程序庫中調用的傳統非託管庫在託管的c + +。ReflectionTypeLoadException從.Net 4.0應用程序加載.Net 4.0程序集,而2.0作品
- Application.exe(C#,.NET 4)
- Library.dll(C#,.NET 4)
- UnmanagedWrapper.dll(託管C++)
- Unmanaged.dll(c)中
文件1和2由VS 2010解決方案構建。對於這些corflags如下所示:
Version : v4.0.30319
CLR Header: 2.5
PE : PE32
CorFlags : 3
ILONLY : 1
32BIT : 1
Signed : 0
的非託管的包裝庫VS 2008始建,是這樣的:
Version : v2.0.50727
CLR Header: 2.5
PE : PE32
CorFlags : 16
ILONLY : 0
32BIT : 0
Signed : 0
在這種配置中,它的工作沒有問題。然後我遷移的非託管的包裝項目將在2010年建成VS在默認情況下使.NET 4的目標:
Version : v4.0.30319
CLR Header: 2.5
PE : PE32
CorFlags : 16
ILONLY : 0
32BIT : 0
Signed : 0
在裏面Library.dll的一段代碼,我用Assembly.GetExecutingAssembly().GetTypes()
裏面找實現一定的接口類型圖書館。由於庫引用了非託管包裝器,因此它將在此處加載。 在多臺機器上運行(所有Win 7 Pro x64機器)我得到不同的結果: 在幾臺機器上,它拋出一個ReflectionTypeLoadException
抱怨UnmanagedWrapper.dll或其某個依賴不能加載。
它在其他機器上完美工作。無論包裝程序庫是2.0還是4.0,它的工作機器之間有什麼區別,以及只有包裝程序爲2.0時纔可用的機器之間有什麼區別?目前唯一的線索是,使用VS 2010的機器似乎可以工作,而只有.NET(4.0.30319)安裝的機器會看到異常。那應該告訴我什麼?
好的線索。應用程序可能包含VS2008 C++運行時,但不包含2010運行時。在開發機器上都可能安裝,但這可以解釋不同之處。我會快速檢查... –
這是否奏效? – luqi
它比我想象的更爲怪異,或者我不完全理解redists如何工作。在發生故障的機器上,它沒有redist(在windows目錄下)比2005更新。工作版本是用2008構建的,所以我不明白爲什麼它起作用?無論如何,這顯然是我需要的提示,所以我只是將其標記爲答案,謝謝。 –