동일한 솔루션에서 서로 다른 두 버전의 log4net 참조
log4net 1.2.10.0을 참조하는 NHibernate 2.1.2.400을 사용하고 있습니다. 같은 프로젝트에서 나는 또한 단순한 회계 SDK를 사용하는데, 슬프게도 여전히 log4net 1.2.9.0을 사용하고 있습니다.
log4net 1.2.10.0을 참조하면 NHibernate가 작동하도록 할 수 있습니다. 그 반대 ...
대부분의 문제는 log4net이 어셈블리 키를 변경했다는 사실에서 비롯된 것입니다. 성공하지 않고 리디렉션을 리디렉션을 보았습니다. 2 개의 DLL에 동일한 키가 없습니다.
나는 NHibernate를 다시 사용하여 log4net 1.2.9.0을 사용하는 것을 고려하고 잘못된 일처럼 보 Simply Accounting이 잘못된 일처럼 log4net 1.2.10.0을 사용하도록 SDK를 업데이트하지 않을 생각합니다.
이를 처리하는 가장 좋은 방법은 무엇입니까? 전혀없는 수 있습니까?
질문에 대한 답변을 사용하여 해결을 찾았습니다.
프로젝트에 log4net의 각 버전에 대해 하나씩 2 개의 폴더를 만듭니다. 솔루션에 파일을 추가하여 각 log4net.dll을 해당 폴더에 배치합니다 (추가 참조가 아님). 출력 디렉터리로 복사 속성을 항상 복사하도록 설정하여 빌드 할 때 출력 폴더에 자동으로 복사 할 수 있습니다.
그런 다음 다음과 같이 추가하여 app.config 파일을 수정합니다.
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="log4net" publicKeyToken="681549d62126b7b8" />
<codeBase version="1.2.9.0" href="log4netv1.2.9.0\log4net.dll" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="log4net" publicKeyToken="1b44e1d426115821" />
<codeBase version="1.2.10.0" href="log4netv1.2.10.0\log4net.dll" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" />
<codeBase version="1.2.11.0" href="log4net.dll" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
sn -T [assemblyName]을 사용하여 어셈블리의 공개 키 토큰을 얻을 수 있습니다.
겹침 제외를 추가 할 수 있습니다. 다음 키를 추가하십시오.
HKEY_LOCAL_MACHINE\Software\Microsoft\StrongName\Verification\log4net,681549d62126b7b8
HKEY_LOCAL_MACHINE\Software\Microsoft\StrongName\Verification\log4net,1b44e1d426115821
HKEY_LOCAL_MACHINE\Software\Microsoft\StrongName\Verification\log4net,669e0ddf0bb1aa2a
이렇게하면 .net 실행이 실행이 어셈블리에 대한 유효성 검사를 건너옵니다. 이론적으로는 보안 문제이지만 비공개 키가 공개되어 있기 때문에 거의 영향을받지 않습니다.
바인딩 리디렉션이 작동하지 않고 회계 SDK가 닫힌 소스 인 경우 가능한 솔루션은 NHibernate를 다시 설치하여 log4net 1.2.9.0을 사용하는 것입니다.
'ProgramingTip' 카테고리의 다른 글
Windows에서 OpenSSL 인증서 만들기 (0) | 2020.10.16 |
---|---|
IEnumerable에는 Count 메서드가 없습니다. (0) | 2020.10.16 |
배열에서 첫 번째 요소를 제거하는 가장 좋은 방법은 무엇입니까? (0) | 2020.10.16 |
모델의 특정 필드 만 업데이트합니다. (0) | 2020.10.16 |
ipython 노트북의 루프에서 전체를 동적으로 업데이트하는 방법 (한 셀 내에서) (0) | 2020.10.16 |