2011-07-27 8 views
1

응용 프로그램 MyApplication에서 사용하는 api, MyApi가 있습니다..NET 어셈블리 바인딩

MyApi에는 .NET 4.0 클라이언트 프로파일을 대상으로하는 여러 dll이 있습니다. 예를 들어

  • MyApi.Core
  • MyApi.Domain
  • MyApi.Providers

(좀 더) 전개 편의상

, 이들은

로되어 ILMerged
  • MyApi.ClientProfile

모든 MyApis dll의 이름이 강력합니다.

MyApplication의 모든 프로젝트는 MyApi.ClientProfile을 참조합니다.

이제 일부 웹 기능을 MyApi에 추가하고 있으므로 .NET 4.0 Extended Profile을 대상으로하는 dll MyApi.Web을 추가했습니다. MyApi.Web은 MyApi.Core 및 MyApi.Domain (System.Web dlls뿐 아니라)을 참조합니다.

이제 MyApplication.Web 프로젝트도 있습니다. MyApplication (MyApi.ClientProfile dll에 대한 참조가있는)의 다른 프로젝트를 참조합니다. MyApplication.Web 프로젝트는 MyApi.Web dll을 참조해야합니다.

어떻게하면됩니까?

MyApplication.Web에서 MyApi.Core 및 MyApi.Domain에 대한 참조를 추가하면 MyApplication.Web에 대한 여러 어셈블리에 존재하는 유형이 있습니다. 내가 MyApplication.Web에서 MyApi.Core 및 MyApi.Domain에 대한 참조를 추가하지 않으면 그것은 (MyApi.Core 또는 MyApi.Domain을 찾을 수 없기 때문에

, MyApi.Web로드하는 데 실패 때문에에만 MyApi.ClientProfile 존재 함).

어셈블리 해결 이벤트를 처리 할 수없고 MyApi.Core/MyApi.Domain에 대한 요청을 MyApi.ClientProfile로 리디렉션합니다. MyApi 어셈블리는 모두 강력한 이름을 가지며 실패하게됩니다.

MyApi.ClientProfile은 MyApi.ClientProfile에 병합 할 수 없습니다. MyApi.ClientProfile은 .NET 4.0 Client Profile에서 지원되어야하고 MyApi.Web은 System.Web 등을 참조해야하기 때문입니다.

MyApi.ClientProfile을 참조하도록 MyApi.Web을 변경하면이 경우에 적합하지만 이상적인 것은 아닙니다. 다른 응용 프로그램에서 MyApi.Core 및 MyApi.Domain을 직접 참조하기 때문에 작동하지 않기 때문입니다.

MyApplication.Web이 해당 구성에서 bypassTrustedAppStrongNames를 지정하도록하고 싶지 않습니다. (MyApi.Web에서이 설정을 어떻게 든 사용할 수있는 옵션이 될 수 있습니다 ...).

그래서이 문제에 대한 적절한/우아한 해결책을 생각해 보았습니다.

제안 사항?

감사합니다.

답변

0

나는 실현에 온 : 당신의 어셈블리가 동일한 공개 키 토큰이있는 경우, 리디렉션을 할 수 있으며, 이름은 중요하지 않습니다

.

MyApi.Client 프로필은 MyApi.Core와 동일한 키로 서명되기 때문에 MyApi.Web에서 AssemblyResolve를 처리하면 MyApi.Core 대신 MyApi.ClientProfile을 사용하도록 실제로 알릴 수 있습니다.

나는 강력한 이름 확인 오류가 발생할 것이라고 생각했을 것입니다. 그것은 공개 키가 동일하기 때문에 ....하지 않습니다.