2012-03-17 88 views
3

我有一個在VS2010中使用4.0框架(是的,它是完整的4.0,而不是客戶端配置文件)創建的dll。我想在VS2008項目中引用它(意思是我不能將引用項目重新定位到4.0,即使我想要),並且將該項目升級到VS2010不是一個選項。如何在VS2008中引用框架4.0 dll項目目標中的3.5

我明白爲什麼在3.5項目中引用4.0'項目'時存在問題,但我不明白爲什麼我應該在3.5項目中引用4.0 dll時遇到問題。就我所知,這可能不是問題,但我似乎無法想象它會是什麼。

我正在嘗試使用Fasterflect(http://fasterflect.codeplex.com/),它很依賴3.5項目中的4.0功能(並且我的公司還沒準備好爲VS2010提供資金,所以我不能改變這一點)。一開始似乎一切正常,直到我試圖編譯出錯的Fasterflect程序集未被彈出。所以我下載了實際的源代碼,簽名,重新編譯,並引用了我新簽署的程序集。問題是,現在它顯示警告符號,並說:

解決的文件有一個不好的形象,沒有元數據,否則 無法訪問。無法加載文件或程序集 'C:.... \ Fasterflect.dll'或其某個依賴項。此程序集由運行時構建的 比當前加載的運行時更新,並且不能加載 。

我試着按照這裏建議的答案http://social.msdn.microsoft.com/Forums/en/clr/thread/36b1a209-55d5-4323-91dc-0919ba2e1d03。但是,當我這樣做時,我收到另一個錯誤消息:

找不到架構信息 'supportedRuntime'。 C:.... \ DynamicSql \ App.config

而且我似乎無法找出錯誤。

當然,有一些方法可以讓我在VS2008中使用這個DLL?

+0

我相信這是不可能的,但我不確定。讓我們等待更確定的人。 – zmbq 2012-03-17 06:32:44

+0

@zmbq我不知道它是否可以動態加載? – 2012-03-17 06:33:51

+0

我仍然認爲這是不可能的。但是,我不確定。 – zmbq 2012-03-17 06:37:00

回答

6

當您創建一個針對特定版本的框架的項目時,您告訴編譯器哪個版本的框架庫和運行時版本將運行該項目的計算機已安裝。例如,3.5中的System.dll和4.0中的System.dll並不相同,這很像爲什麼2.0和3.5中的System.dll不相同。

理論上,由於4.0程序集可能使用3.5中不存在的API,因此無法保證轉發兼容性(3.5引用4.0)。同樣,你不能保證4.0在2.0中向後兼容,因爲一些API可能已被棄用和刪除。實際上,4.0具有足夠的3.5向後兼容性,它們允許您在4.0應用程序中引用3.5組裝,但有一些注意事項(在配置文件中有時需要add a directive,因爲4.0中的組裝加載從3.5變爲3.5)。不幸的是,由於4.0引入了大量的新API,3.5與4.0沒有太大的兼容性,所以我認爲你不能從3.5引用4.0組件。

您可能會看到該架構信息異常,可能是由於此原因。 「supportedRuntime」是.NET 4.0引入的配置元素。但是,由於您在3.5中引用了程序集,System 3.5的.NET 3.5版本。解析配置文件的配置不識別該元素,從而引發異常。

唯一的方法可能是(1)更改源代碼並重新編譯,將所有API調用修復爲3.5中不工作的4.0庫,或者(2)做同樣的事情,但是在IL級別,生成一個新程序集(可以使用al.exe來完成)。

+0

感謝您的建議。幸運的是,我發現實際上有一個針對3.5框架的dll版本。我剛開始並沒有想到要找一個,因爲我已經看到了源代碼,它使用了動態關鍵字和其他4.0特性,我不知道它們保留了另一個版本的源代碼。 – 2012-03-18 02:39:30

相關問題