2011-10-27 158 views
1

我有一個帶有以下文件的.NET 4.0 32位(x86)桌面應用程序,其中一個是從包裝程序庫中調用的傳統非託管庫在託管的c + +。ReflectionTypeLoadException從.Net 4.0應用程序加載.Net 4.0程序集,而2.0作品

  1. Application.exe(C#,.NET 4)
  2. Library.dll(C#,.NET 4)
  3. UnmanagedWrapper.dll(託管C++)
  4. 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)安裝的機器會看到異常。那應該告訴我什麼?

回答

1

在安裝了Visual Studio的應用程序無法正常工作的情況下,偶爾解決的辦法是需要安裝Visual Studio Runtime。嘗試安裝Microsoft Visual C++ 2008 Redistributable Package (x86)Microsoft Visual C++ 2010 Redistributable Package (x86),如果它能正常工作,請確保其部署策略。

+0

好的線索。應用程序可能包含VS2008 C++運行時,但不包含2010運行時。在開發機器上都可能安裝,但這可以解釋不同之處。我會快速檢查... –

+0

這是否奏效? – luqi

+0

它比我想象的更爲怪異,或者我不完全理解redists如何工作。在發生故障的機器上,它沒有redist(在windows目錄下)比2005更新。工作版本是用2008構建的,所以我不明白爲什麼它起作用?無論如何,這顯然是我需要的提示,所以我只是將其標記爲答案,謝謝。 –

相關問題