0

我正在針對目標框架.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 

這是在項目中引用的程序集。

應用程序MyAppLogger項目具有項目引用,因此間接引用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
+0

爲什麼您首先在GAC中安裝庫? – galenus

+0

這只是不工作,你真的*做*必須針對.NET 4.5才能夠使用該版本的Newtonsoft.Json.dll。針對.NET 3.5是出錯的地方。該程序集的早期版本也可以使用,但是仍然無法使用想要使用4.5版本的Logger程序集。定位3.5需要您使用的* all *程序集可以在v2 CLR上運行。與GAC混淆並不是一種解決方法。 –

+0

@HansPassant他引用的程序集的第一個版本似乎指向3.5(最後一行!)。如果我沒有弄錯,那麼應該可以正常工作,只要他設法使他的申請參考正確的版本即可。 – Kjartan

回答

0

您是否嘗試過在參數的屬性下將Specific version設置爲true?我懷疑編譯期間會首先搜索GAC,因此如果您未指定版本,則任何版本都將被視爲「可接受」,並且不會導出其他版本。

如果您指定了一個版本,那麼來自GAC的版本不應被視爲有效,而另一個版本應如前所述導出。

更新:我做了一個快速搜索,發現the Newtonsoft package seems to be released under an MIT liscence,這實際上意味着你可以做任何你想做的事情。

您可能需要自己編譯一個解決方案,無論您需要什麼目標框架和版本號。

+0

這兩個庫都有'版本4.5.0.0'。這是反射器發現的版本信息,此版本信息也由Visual Studio提供。不同的是'AssemblyFileVersion',但visual studio似乎忽略了這一點。 – faronel

+0

@faronel啊,好的。我沒有注意到你的OP。但我發現它有點奇怪,有不同版本的'Newtonsoft.Json.dll'版本號相同(當它們針對不同版本的.Net框架時,它們怎麼不會不同?)。我認爲'Newtonsoft' dll不是你自己編譯的東西? (如果是這樣,你可以簡單地創建它自己的不同版本,來解決這個問題) – Kjartan

+1

'Newtonsoft.Json.dll'庫不是我自己編譯的。具有目標框架3.5的版本從http://json.codeplex.com/下載,位於'/ Bin/Net35/Newtonsoft.Json.dll'下的zip文件中。 我自己用另一個版本號編譯這個庫是另一種選擇。但是我想知道爲什麼這樣做不起作用,因爲我的目標框架是3.5,而GAC庫是4.0。 – faronel

相關問題