2011-08-01 3 views
0

서로 다른 GAC 위치를 사용하는 2 개의 CLR 버전, 즉 .NET Framework의 버전 2 및 버전 4에 관한 질문이 있습니다. v2 GAC (C : \ Windows \ Assembly)에서 어셈블리 "X"를 참조하는 클라이언트 응용 프로그램을 만들었습니다. 현재 .NET Framework (C : \ Windows \ Microsoft.NET \ assembly)의 v4에서 실행되도록 어셈블리 "X"를 업데이트하고 있지만 클라이언트 응용 프로그램을 다시 컴파일하지 않으려합니다. 참고로, 어셈블리 "X"는 v4 GAC를 설치하기 전에 v2 GAC에서 제거됩니다.어셈블리 버전을 다른 CLR/GAC로 리디렉션

CLR 버전 2에있는 어셈블리를 CLR 버전 4로 리디렉션하는 게시자 정책 파일을 만들 수 있습니까? 그렇다면 어떻게 달성 할 수 있습니까?

MSDN을 검색했으며 .NET Framework의 버전을 지정할 수있는 assemblyBinding 요소의 applyTo 필드가 있음을 알고 있지만 전체 바인딩을 포함하는 것으로 보입니다.

는 내가하고 싶은 것은 같은 것을 : 여기 CLR 2.0 응용 프로그램은 이제 GAC에서 CLR 버전 4.0 어셈블리를 볼 수 없습니다 http://msdn.microsoft.com/en-us/magazine/dd727509.aspx 읽고

<bindingRedirect oldVersion="1.0.0.0" .Net 2 newVersion="2.0.0.0" .Net 4/> 

. 그러나 사용하여 업데이트 된 CLR을 사용하는 응용 프로그램을 강제 할 수

<startup useLegacyV2RuntimeActivationPolicy="true"> 
<supportedRuntime version="v4.0" /> 

그래서이의 혼합물 플러스 게시자 정책 충분할가, 또는 다른 방법이 것?

답변

1

여기서 중요한 요소는 클라이언트 응용 프로그램이 실행되고있는 CLR의 버전입니다. v2 인 경우 v4 어셈블리를 사용 가능하게하거나 보이도록 만들 수있는 방법은 없습니다. v4 CLR에서 실행되는 경우 먼저 v4 GAC에서 어셈블리 참조를 자동으로 확인하려고 시도합니다.

좋은 소식은,이를 달성하기 위해 클라이언트 응용 프로그램을 다시 컴파일 할 필요가 없다는 것입니다. 앱의 설정 파일에 .Net 4를 추가하면됩니다.

<configuration> 
    <startup> 
    <supportedRuntime version="v4.0" /> 
    </startup> 
</configuration> 

이렇게하면 원하는 것을 얻을 수 있습니다.

+0

감사합니다. 우리는 GAC에서 어셈블리를 인터페이싱하여 제작 된 현장의 클라이언트를 보유하고 있으므로 어셈블리의 새 버전을 (추가하지 않고 대체하여) 릴리스 할 때 강제로 새 버전에 맞게 다시 컴파일하지 않으려합니다. 따라서 리디렉션에 게시자 정책 어셈블리를 사용하는 이유. 우리는 클라이언트 응용 프로그램의 재 컴파일을 피할 수 있습니다. 그러나 이제는 클라이언트에 app.config가 있는지 확인하고 설명 된대로 새 어셈블리를 릴리스 할 때 v4 런타임을 지원하도록 업데이트해야합니다. 게시자 정책이이 문제를 해결할 수 있다면 좋을 것입니다. – Jeb

+0

가장 최근의 CLR 하에서 모든 앱을 강제로 실행할 수있는 레지스트리 설정이 있습니다. 이 답변보기 : http://stackoverflow.com/questions/2094694/launch-powershell-under-net-4/2096906#2096906. 그게 가능할 지 모르겠지만 각 클라이언트마다 App.config를 가질 필요가 없습니다. 물론 GPO 등을 통해 레지스트리 설정을 자동화 할 수 있다면! – mthierba

관련 문제