2012-10-09 1 views
3

내 질문은 밀접 한두 개의 서로 다른 log4net 어셈블리를 사용하는 방법 - 각각 동일한 버전의 .Net Framework 버전을 대상으로합니다.

Log4Net : 2 libraries need 2 different version of it

하지만 약간 다른 관련이있다.

우리의 메인 EXE는 .Net Framework 4.0으로 컴파일되지만, 참조 된 어셈블리 중 일부는 Framework v2.0 용으로 컴파일되며 이러한 어셈블리 내에서 로깅을 추가해야합니다. 우리가 log4net v1.2.11 (최신 버전)을 선택한 반면, 우리는 솔루션에서 2 가지 다른 어셈블리를 사용하는로드 블록을 타파하고 있습니다.

+2

그리고로드 블록은 ...? – RedFilter

+0

@RedFilter - log4net 어셈블리의 파일 이름이 같고 다른 하나를 복사하면 더 이상 찾을 수 없습니다. 전체 어셈블리 이름을 가진 어셈블리를로드 할 수 없다는 예외가 발생합니다. – veljkoz

+0

"로드 블록"을 더 일찍 정교화하지 않아서 죄송합니다. 덧붙이 자면, 나는 원래 "log4net.dll"을 "log4net_dotNet2.dll"과 "log4net_dotNet4.dll"로 이름을 바꾸려고했다. 그러나 CLR은 log4net.dll 만 기대하고있는 것으로 보입니다. 어쩌면, 나는 닷넷에 대한 근본적인 이해를 놓치고있다. 나는 아직까지 [link] (http://msdn.microsoft.com/en-us/library/7wd6ex19.aspx)에서 "veljkoz"에 의해 답변 아래 제공된 –

답변

0

나는 닷넷 2.0 버전을 사용하는 것이 안전하다고 생각한다.

2

먼저, 같은 폴더에있는 모든 dll 파일을 찾을 수 없습니다 (이미 찾은 폴더).

Here 런타임이 어셈블리를로드하려고하는 방법에 대해 설명합니다.

이 지식을 사용하여 수 :

  • Redirect assembly versions (그들은 내가 그들이 생각하는, 호환되는 경우) - 예를 들어, 오래된 log4net의 DLL에서 어셈블리를로드 할 때 사용되어야하는 새 DLL

  • Specify assemlby location에 (예 : \ libs와 폴더 및 참조에 넣어)

  • Load the assembly manually -이 있음을로드 있기 때문에 이론적으로,이 일할 수있는 어셈블리를 도메인에 추가하십시오. ("이름이 같은 여러 어셈블리") here에서 촬영

한 예 :이 섹션을 사용할 수 있습니다

<dependentAssembly> 
    <assemblyIdentity name="Server" publicKeyToken="c0305c36380ba429" /> 
    <codeBase version="1.0.0.0" href="v1/Server.dll"/> 
    <codeBase version="2.0.0.0" href="v2/Server.dll"/> 
</dependentAssembly> 
+0

아래를 보았습니다. Assembly.LoadFrom 솔루션을 좋아합니다. . 어쨌든 둘 다 GAC에 등록 할 수 있어야합니다. –

관련 문제