2012-01-31 88 views
7

假設我有兩個項目,P4和P3,分別針對.net 4.0和3.5。我的.Net應用程序可以引用.net框架庫的兩個不同版本嗎?

每個項目也有對System.Data的引用。 在P4的情況下,它將是System.Data v4.0.0.0 在P3的情況下,它將是System.Data v2.0.0.0

項目P4也引用P3。

如果P4加載並執行,它使用.net 4.0 CLR。在運行時,對System.Data的引用似乎在P4和P3內解析爲v4.0。我可以通過使用assemblyBinding重定向覆蓋此,但是然後P4和P3解析爲v2.0。

有什麼辦法可以配置我的應用程序,以便P4使用v4.0和P3使用v2.0?

回答

3

如果你能控制P3,是的。轉到項目的引用部分,找到System.Data引用,並查看它的屬性窗口(右鍵單擊 - >屬性)。

爲「特定版本」屬性選擇「真」。重新編譯,重新部署等。

請注意,如果.NET 2,3或3.5在程序集嘗試加載時沒有安裝在機器上,將導致各種運行時失敗。

編輯

我想這一點,但沒有運氣。 P3仍然運行v4.0。你知道這個設置是否會在爲P3生成的程序集中有任何可見的效果?例如。無論「特定版本」是否設置爲true,清單都會顯示「.ver 2:0:0:0」。

嘗試添加以下內容到的app.config:

<configuration> 
    <startup> 
    <supportedRuntime version="v2.0.50727" /> 
    <supportedRuntime version="v4.0" /> 
    </startup> 
</configuration> 
+0

我試過這個,但沒有運氣。 P3仍然運行v4.0。你知道這個設置是否會在爲P3生成的程序集中有任何可見的效果?例如。無論「特定版本」是否設置爲true,清單都會顯示「.ver 2:0:0:0」。 – Rob 2012-01-31 15:02:13

+1

是的 - 這就是我遵循Seb的建議所做的。我還需要在啓動標記中指定useLegacyV2RuntimeActivationPolicy =「true」作爲屬性。否則,它會崩潰與未處理的異常:System.BadImageFormatException – Rob 2012-01-31 15:18:21

+0

太棒了。他的鏈接讓我想起了配置,所以絕對接受他的回答。 – Randolpho 2012-01-31 15:19:46

4

看一看這樣的:In-Process Side-by-Side它可能有一定的幫助。

+1

是的 - 這是訣竅! – Rob 2012-01-31 15:15:29

+0

對不起。我是個白癡。不幸的是,這並沒有幫助,除非我錯過了一些東西。我設法取消註釋assemblyBinding重定向,同時檢查這一點。沒有重定向,它不起作用。 – Rob 2012-01-31 17:02:08

相關問題