c# 확인할 동일한 참조 어셈블리의 여러 버전




프로젝트 를 빌드 한 후 다시 시도 하거나 (2)

문제가있어 지금까지 해결할 수 없었습니다.

폴더 (.dll 어셈블리) 플러그인을로드하는 어셈블리 (실행 .net 4.0) 있습니다. 주 실행 파일에는 telerik.windows.controls.dll에 대한 참조가 있으며 모두 잘 실행됩니다.

이제는 새로운 버전의 telerik 라이브러리를 사용하는 새로운 플러그인을 작성하고 더 구체적으로 어셈블리 telerik.windows.controls.GanttView를 작성합니다. 문제는 GanttView 컨트롤이 telerik.windows.controls.dll의 최신 버전을 사용하므로 플러그인이 telerik 참조 어셈블리를로드 할 수 없어 충돌이 발생한다는 것입니다.

나는 모든 것을 참조 된 어셈블리 (telerik)의 최신 세트로 업그레이드함으로써이 문제를 해결할 수 있다는 것을 알고 있지만, 새로운 버그가 없다는 것을 보증하기 위해 이러한 컨트롤이 우리 팀에 의해 QA'd / 테스트되지는 않았습니다.

그래서 그것을 요약하면 다음과 같습니다.

main.exe -> a.dll -> X.dll (v1)

그런 다음 b.dll이라는 새 플러그인을 추가합니다.

main.exe -> b.dll -> X.dll (v2) + ------------> X.dll (v1)

그래서 문제는 내 plguin이 주 어셈블리에 의해로드 된 어셈블리를로드 할 때와 다른 위치에서 다른 버전의 어셈블리 (그리고 참조 된 어셈블리도 참조)를 참조 할 수 있다는 것입니다.

감사.


우리는 앱의 어느 시점에서이를 수행했습니다. 우리가 해낸 방법은 오래된 DLL을 보유한 bin 디렉토리 내의 폴더를 만든 다음 이전 dll을 참조하는 app.config 파일에 다음 행을 추가 한 것입니다.

<runtime>
    <assemblyBinding xmlns = "urn:schema-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity 
                name = "YourAssembly"
                />
            <codeBase version="YourAssemblyVersion" href = "FolderWithinBinDirectory/YourAssembly.dll"/>
        </dependentAssembly>
    </assemblyBinding>
</runtime>

더 많은 것이 있었을 지 모르지만 그게 전부라고 생각합니다.


새 dll에 동일한 어셈블리 정보가 있으면 짧은 대답은 '아니요'입니다.

더 긴 대답은 응용 프로그램 도메인 (자신을 더 많이 만들지 않는 한 더 이상 가질 수없는 응용 프로그램 도메인)에서 특정 어셈블리를 한 번만로드 할 수 있다는 것입니다. 다시 한번 말하지만, 이것은 우리가 말하는 어셈블리 (dll)가 동일한 어셈블리 정보를 가지고 있다고 가정합니다. 최신 어셈블리를로드하려면 별도의 응용 프로그램 도메인을 만들어야합니다. 그러나 다른 컨트롤이 '살아있는'초기 응용 프로그램 도메인에서는 사용할 수 없습니다.





telerik