2010-02-12 4 views
5

우리는 다른 이름이 아닌 어셈블리를 가지고 있으며, app.exe.config에서 바인딩 리디렉션/프로빙 경로가 없습니다. 예 : MyDll (1.0.0.0_null_neutral) 및 MyDll (2.0.0.0_null_neutral). app.exe와 관련하여이 어셈블리는 LAC \ MyDll_1.0.0.0_null_neutral 및 LAC \ MyDll_2.0.0.0_null_neutral에 저장됩니다..NET 런타임은 강력하지 않은 어셈블리를 어떻게 찾습니까?

내 이해 MyDll 어셈블리는 강력한 이름이 없기 때문에 .NET 런타임은 다른 버전의 MyDll을 구분하지 않습니다. 따라서 MyDll 1.0.0.0이 이미 메모리에로드되어 있고 MyDll 2.0.0.0에 대해 작성된 일부 코드가 실행 된 경우 .NET 런타임은 MyDll 2.0.0.0을로드하지 않습니다.

그러나 VS2008로 프로세스에 연결하고 모듈 창을 볼 때 MyDll 1.0.0.0과 MyDll 2.0.0.0이 모두 LAC 폴더에서로드되었음을 확인했습니다.

어딘가 내 이해에 차이가있는 것 같습니다. 누군가 그것을 지적 할 수 있습니까?

편집 : 지금까지 답변 해 주셔서 감사합니다. 예, 저는 그 비트를 건너 뛰었습니다. 실행 파일은 AssemblyResolve 이벤트를 수신하고 LAC를보고 처리합니다.

어셈블리가 강하게 명명되지 않은 한 그 버전이 무시되기 전에 MSDN 설명서를 보았습니다. 나는 그것을 파낼 수 있는지 보자.

+3

설명대로 작동하지 않을 수 있습니다. CLR이 프로빙 경로를 변경하지 않고 LAC 하위 디렉토리에서 DLL을 찾을 수있는 방법은 없습니다. –

+0

두 개의 서로 다른 버전의 어셈블리를 여기에서 볼 수있게하려는 목적은 무엇입니까? 응용 프로그램이 작동하도록 최신 정보를로드 할 수 없습니까? –

+0

두 가지 버전이 있습니다. 응용 프로그램이 다른 팀에서 작성한 서로 다른 플러그인으로 구성되어 있으며 각각 다른 버전의 어셈블리를 사용할 수 있기 때문입니다. 일반적으로 프로빙 경로/바인딩 리디렉션을 통해 가장 높은 버전을 사용합니다. 그러나 CLR이 강력한 어셈블리가 아닌 어셈블리의 버전을 무시하는지 여부를 알고 싶었습니다. –

답변

1

http://msdn.microsoft.com/en-us/library/yx7xezcf.aspx

2 단계가로드 된 것 있는지 확인하고, 그조차 강력한 이름되지 않은 항목, 버전에만 적용됩니다.

4 단계에서 프로빙을 통해 어셈블리를로드하려고하는데이 버전은 버전과 관련이 없습니다.

내가 혼란스러워하는 점은 설정 파일에 정보가 없다면 어떻게하면 DLL을 처음부터 찾는 것입니까? 내 이해에는 갭이 있다고 생각합니다 .--).

관련 문제