2014-02-20 2 views
0

우리 팀에서는 여러 팀이 WPF를 기반으로 동일한 제품의 다른 모듈을 개발하고 있습니다. 일부 모듈은 동일한 어셈블리를 참조합니다. Log4net, 자체 프레임 워크 등 ... 영향을 최소화하기 위해 각 팀이 다른 팀이 동일하게 수행하지 않고 해당 모듈에서 참조하는 어셈블리 버전을 업데이트 할 수있게하고 싶습니다. 프리즘이 가능합니까?프리즘을 사용하면 두 모듈이 동일한 어셈블리의 다른 버전을 참조 할 수 있습니까?

답변

3

이것은 가능하지만 프리즘과는 아무런 관련이 없습니다. 조사 할 내용은 binding redirects입니다.

바인딩 리디렉션을 사용하면 어셈블리의 버전 X에 대한 참조가 실제로 버전 Y를 사용해야 함을 지정할 수 있습니다. 이렇게하면 서로 다른 팀이 서로의 종속성을 개별적으로 업데이트 할 수 있지만 응용 프로그램을 배포 할 때는 바인딩 리디렉션은 모두 어셈블리 버전을 가리 킵니다.

많은 변경 사항이 도입되지 않은 어셈블리의 최신 버전으로 참조를 리디렉션하는 것이 일반적입니다. 변경 사항을 깨면 런타임에 예외가 발생할 수 있습니다.

<dependentAssembly> 
    <assemblyIdentity name="OurInHouseLibrary" publicKeyToken="32ab4ba45e0a69a1" culture="en-us" /> 

    <bindingRedirect oldVersion="1.0.0.0-1.0.32.27762" newVersion="1.0.32.27762" /> 
</dependentAssembly> 

이 버전 1.0.32.27762을 통해 버전 1.0.0.0 조립 OurInHouseLibrary에 대한 참조가 이제 버전 1.0.32.27762에 조립 OurInHouseLibrary 참조하도록 지정 : 여기

는 바인딩 리디렉션의 일례이다.

내가 반대 제안하지만, 또 다른 옵션은 즉, 다른 어셈블리로 리디렉션 할 codeBase 요소를 사용하는 것입니다

<dependentAssembly> 
    <assemblyIdentity name="OurInHouseLibrary" publicKeyToken="32ab4ba45e0a69a1" culture="en-us" /> 
    <codeBase version="1.0.0.0" href="v1.0\OurInHouseLibrary.dll" /> 
    <codeBase version="1.1.0.0" href="v1.1\OurInHouseLibrary.dll" /> 
</dependentAssembly> 

Here가 동일한 어셈블리의 여러 버전을로드하는 이유를 설명 Microsoft에서 기사입니다 나쁜 것. 주 이슈 중 하나는 Type ID입니다. 다른 버전의 유형 대신 한 버전의 유형을 사용할 수 없으므로 (캐스트 할 수없는 경우 포함)

+0

바인딩 리디렉션과 간단한 시나리오에서 사용하는 방법에 대해 알고 있습니다. 그러나 다른 프리즘 모듈이 동일한 어셈블리의 다른 버전을 참조 할 때 작동하지 못했습니다 (응용 프로그램을 배포 한 후에도 다른 버전을 유지하려고합니다). – rlesias

+0

이것이 가능하다고 생각 되더라도, 참조 된 어셈블리의 정적 메서드가 어딘가에 있으면 어떻게 될까요? 두 개의 정적 메서드 (버전마다 하나씩)가 필요하거나 두 버전 모두 동일한 정적 메서드를 사용하기를 기대 하시겠습니까? 정적 필드에 대해 같은 질문을하면, 엉망이 될 수 있습니다. – Lukazoid

+0

나는 각 모듈이 설정 파일에 무엇이 설정되어 있는지에 따라 정확한 버전을 선택할 것으로 기대한다. 그것은 비록 작동하지 않는 것 같습니다. – rlesias

관련 문제