我正在针对目标框架.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