우리의 응용 프로그램은 각각 자신의 하위 디렉토리에있는 사설 어셈블리 집합을 동적으로로드합니다. 그들 각각은 동일한 서브 디렉토리에있는 그들 자신의 의존성을 가지고있다. 각 어셈블리의 이름은 강력하고 종속성은 동일한 라이브러리이지만 버전은 다릅니다.왜 개인 어셈블리 검색에서 정규화 된 어셈블리 이름을 사용하지 않고 파일 이름과 일치합니까?
MyApp
|-> Folder1\
| |->PrivateAssembly1.dll
| |->Dependency.dll Version 1.0.0.0
|
|-> Folder2\
| |->PrivateAssembly2.dll
| |->Dependency.dll Version 2.0.0.0
|
...
우리는 GAC를 사용하지 않도록 xcopy 배포를하고 있습니다.
또한 probing privatePath
을 "Folder1;Folder2"
으로 정의하여 개인 어셈블리를 찾지 못하는 문제를 해결했습니다.
문제는 PrivateAssembly1.dll은 해당 종속성을 찾지 만 PrivateAssembly2.dll은 찾지 못하는 것입니다. 또는 오히려, Folder2 대신에 Folder1에서 Dependency.dll을 사용하려고 시도하는 것 같습니다.
나는이 문제가 AssemblyResolve 이벤트를 사용하여 수동으로 해결할 수 있다는 것을 알고 있지만 가장 명확한 방법은 아닙니다. 내가 바라 보는 다른 해결책이 있습니까?
모든 아이디어에 감사드립니다.
업데이트 :
이퓨전 로그 도구의 출력 :
LOG: DisplayName = Dependency, Version=1.0.0.0, Culture=neutral, PublicKeyToken=#########
(Fully-specified)
LOG: Appbase = file:///C:/Workspaces/Shell/MyApp/bin/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = NULL
...
LOG: Attempting download of new URL file:///C:/Workspaces/Shell/MyApp/bin/Dependency.DLL.
LOG: Attempting download of new URL file:///C:/Workspaces/Shell/MyApp/bin/Dependency/Dependency.DLL.
LOG: Attempting download of new URL file:///C:/Workspaces/Shell/MyApp/bin/Folder2/Dependency.DLL.
LOG: Assembly download was successful. Attempting setup of file: C:\Workspaces\Shell\MyApp\bin\Folder2\Dependency.dll
LOG: Entering run-from-source setup phase.
LOG: Assembly Name is: Dependency, Version=2.0.0.0, Culture=neutral, PublicKeyToken=#######
WRN: Comparing the assembly name resulted in the mismatch: Major Version
ERR: The assembly reference did not match the assembly definition found.
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.
그래서 기본적으로는, Folder2 폴더에 Dependency.dll 발견은 버전이하지 않는 것을보고 그것을로드하려고 시도 시합. 나는 다음에 Folder1을 시도 할 것이라고 가정하지만, 그저 멈출 것입니다.
감사합니다. 질문에 로그를 추가했습니다. –