私はターゲット フレームワークに対して開発してい.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
コピーされます。GACNewtonsoft.Json.dll
にはないことに注意してください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
ため、実行時に が表示されます (ライブラリが で使用される GAC 3.5 ではない 4.0 GAC にあるため、これは明らかです)。Newtonsoft.Json.dll
MyApp
- ターゲット フレームワーク 3.5 プロジェクトのビルド システムが の GAC 内のアセンブリを認識するのはなぜ
.NET Framework 4.0
ですか? - GAC 4.0 にがある場合
Newtonsoft.Json.dll
、ターゲット フレームワーク 3.5 で参照されるローカルを出力ディレクトリにコピーするにはどうすればよいですか?MyApp
Newtonsoft.Json.dll