我正在针对目标框架进行开发.NET Framework 3.5
。一个项目Logger
使用以下库
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
到相应的输出目录中。请注意,Newtonsoft.Json.dll
GAC中没有
到目前为止还好。
现在我将以下库安装到.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 中,而不是 GAC 3.5 使用的MyApp
)。
- 为什么目标框架 3.5 项目的构建系统知道 GAC 中的程序集
.NET Framework 4.0
? - 如何将
Newtonsoft.Json.dll
目标框架3.5引用的本地复制到GAC 4.0中MyApp
有a时的输出目录?Newtonsoft.Json.dll