대상 프레임 워크 .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
이 없음을 유의하십시오.
지금까지 Fine. 더 이상 MyApp
의 출력 디렉토리에 복사됩니다 Newtonsoft.Json.dll
를 참조하는 프로젝트의 원인이됩니다 .NET Framework 4.0
의 GAC에 설치이 라이브러리를 갖는
Newtonsoft.Json.dll
Version = 4.5.0.0
AssemblyFileVersion = 4.5.8.15203
PublicKeyToken = 30ad4fe6b2a6aeed
TargetFramework = v4.0
:
는 지금은.NET Framework 4.0
GAC에 다음 라이브러리 (
%windir%\Microsoft.NET\assembly
)를 설치하지 . 그러나 여전히 출력 디렉토리
Logger
에 복사됩니다.
나는 나 자신이 행동을 설명하려 :이 프로젝트는
Copy Local
속성이
true
로 설정되어 있기 때문에
Newtonsoft.Json.dll
이
Logger
의 출력 디렉토리에 복사됩니다 참조.
그러나 Newtonsoft.Json.dll
이 더 이상 출력 디렉토리 MyApp
에 복사되지 않습니다. .NET Framework 4.0
의 GAC에 설치 한 라이브러리는 내 프로젝트가 빌드 .NET Framework 3.5
에 대해 빌드 된 이후로 (내 의견으로는) 빌드 시스템에 '보이지'않아야합니다.
는 런타임에있을 것입니다 System.IO.FileNotFoundException
Newtonsoft.Json.dll
라이브러리 (라이브러리가 MyApp
에서 사용하는 GAC 3.5되지 않습니다 4.0 GAC에 위치하기 때문에이 나에게 분명하다)를 찾을 수 없습니다 때문입니다.
- 대상 프레임 워크 3.5 프로젝트의 빌드 시스템이 GAC의 어셈블리에 대해 알고있는 이유는 무엇입니까?
.NET Framework 4.0
? Newtonsoft.Json.dll
이 GAC 4.0에있을 때MyApp
의 출력 디렉토리에 대상 프레임 워크 3.5가있는 로컬 참조Newtonsoft.Json.dll
을 어떻게 복사합니까?
왜 GAC에 라이브러리를 설치하나요? – galenus
이것은 작동하지 않을 것입니다. 실제로 Newtonsoft.Json.dll의 해당 버전을 사용하려면 .NET 4.5를 대상으로해야합니다. .NET 3.5를 대상으로하는 것이 잘못 된 부분입니다. 해당 어셈블리의 이전 버전도 사용할 수 있지만 4.5 버전을 사용하려는 Logger 어셈블리는 여전히 사용할 수 없습니다. 3.5를 대상으로하면 * 사용하는 모든 어셈블리가 v2 CLR에서 실행될 수 있어야합니다. GAC에 문제가 있으면 해결 방법이 아닙니다. –
@HansPassant 그가 언급하는 어셈블리의 첫 번째 버전은 3.5를 목표로하는 것 같습니다 (마지막 줄!). 만약 내가 그때 착각하지 않는다면, 그가 올바른 버전을 참조하도록 응용 프로그램을 관리하는 한 괜찮습니다. – Kjartan