我正在針對目標框架.NET Framework 3.5
進行開發。一個項目Logger
使用下列庫Visual Studio使用來自較新目標框架的程序集
Newtonsoft.Json.dll
Version = 4.5.0.0
AssemblyFileVersion = 5.0.8.16617
PublicKeyToken = 30ad4fe6b2a6aeed
TargetFramework = v3.5
這是在項目中引用的程序集。
應用程序MyApp
對Logger
項目具有項目引用,因此間接引用Newtonsoft.Json.dll
。
將Copy Local
屬性設置爲true
將強制Newtonsoft.Json.dll
被複制到輸出目錄。編譯MyApp
也會將Newtonsoft.Json.dll
複製到相應的輸出目錄中。請注意,GAC中沒有Newtonsoft.Json.dll
到目前爲止還不錯。
現在我安裝了下列庫爲.NET Framework 4.0
GAC(%windir%\Microsoft.NET\assembly
):
Newtonsoft.Json.dll
Version = 4.5.0.0
AssemblyFileVersion = 4.5.8.15203
PublicKeyToken = 30ad4fe6b2a6aeed
TargetFramework = v4.0
了該庫安裝在GAC爲.NET Framework 4.0
會造成引用Newtonsoft.Json.dll
項目不再複製到的MyApp
輸出目錄。但它仍被複制到Logger
的輸出目錄。
我試圖解釋這種行爲對自己說:該項目引用Newtonsoft.Json.dll
被複制到的Logger
輸出目錄,因爲它是Copy Local
屬性設置爲true
。
但我不明白爲什麼Newtonsoft.Json.dll
不再被複制到輸出目錄MyApp
。我安裝到GAC的庫(.NET Framework 4.0
)應該(在我看來)不會對構建系統「可見」,因爲我的項目是針對.NET Framework 3.5
構建的。
在運行時會有一個System.IO.FileNotFoundException
因爲Newtonsoft.Json.dll
庫中沒有找到(這個我很清楚,因爲庫位於4.0 GAC是不是MyApp
使用的GAC 3.5)。
- 爲什麼目標框架3.5項目的構建系統知道GAR中的程序集是
.NET Framework 4.0
? - 如何在目標框架中獲得本地引用的
Newtonsoft.Json.dll
3.5在GAC 4.0中有Newtonsoft.Json.dll
時,將其複製到輸出目錄MyApp
?
爲什麼您首先在GAC中安裝庫? – galenus
這只是不工作,你真的*做*必須針對.NET 4.5才能夠使用該版本的Newtonsoft.Json.dll。針對.NET 3.5是出錯的地方。該程序集的早期版本也可以使用,但是仍然無法使用想要使用4.5版本的Logger程序集。定位3.5需要您使用的* all *程序集可以在v2 CLR上運行。與GAC混淆並不是一種解決方法。 –
@HansPassant他引用的程序集的第一個版本似乎指向3.5(最後一行!)。如果我沒有弄錯,那麼應該可以正常工作,只要他設法使他的申請參考正確的版本即可。 – Kjartan