2009-11-09 3 views
1

제 3 자 어셈블리에 대한 참조가있는 C# .net 프로젝트를 만들었습니다. 그러나 고객의 컴퓨터에서 어셈블리 버전이 변경된 버전으로 변경되면 어셈블리를로드하지 못하는 경우가 있습니다.app.config 파일의 bindingRedirect 요소에 쓰기

그래서 app.config 파일에서 "bindingRedirect"요소 "newversion"태그를 사용하여 새 버전의 어셈블리로 리디렉션하려고합니다.

앱에서 "bindingRedirect"요소에 어떻게 쓸 수 있습니까? 구성 파일을 런타임에.


죄송합니다. 내 질문에 분명하지 않습니다. 내 문제는 런타임에만 어셈블리의 새 버전을 # 알 것입니다. 따라서 새 버전을 프로그래밍 방식으로 변경하려고합니다. 어떻게해야합니까?

답장을 보내 주셔서 감사합니다. 여기

답변

0
<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
      <dependentAssembly> 
       <assemblyIdentity name="clsLibVsn" 
            publicKeyToken="b035c4774706cc72" 
            culture="neutral"/> 
       <bindingRedirect oldVersion= "1.1.1830.10493" 
           newVersion= "1.0.1830.10461"/> 
      </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 
</configuration> 
+0

그는 구성 파일이 아닌 런타임에 구성하려고합니다. –

0

문제는 어셈블리, 인해 자연, 바인딩 정보를 응용 프로그램 도메인에로드 된 것입니다.

이와 같이 런타임에 어셈블리 바인딩 동작을 변경하려면 구성을 다시로드하기 위해 AppDomain을 다시 시작해야합니다. 일단 DLL이 AppDomain으로로드되면 언로드 할 수 없으므로 다른 버전 (리다이렉션)을 가장하는 새로운 DLL 집합을로드하기 위해 DLL을 다시 시작해야합니다.

구성 파일을 모니터링하고 편집 할 수있는 시작 AppDomain (부트 스트 래퍼)과 수정 된 app.config가 적용되는 '작업자'AppDomain이라는 두 개의 AppDomains로 응용 프로그램을 분리해야합니다 , 그리고 귀하의 응용 프로그램에 대한 모든 작업을 수행합니다.

응용 프로그램의 일부를 다시 초기화하지 않고 응용 프로그램을 마술처럼 바꿀 수 있기를 원한다면 불행히도이 작업을 수행 할 수 없습니다.

그러나 최근에 응용 프로그램에서 설명한 위의 방법론을 구현했으며 완벽하게 작동합니다. 주의해야 할 점은 이러한 '격리 된 바인딩 리디렉션'이 적용되는 응용 프로그램의 일부는 구성이 변경 될 때마다 다시 초기화되어야한다는 것입니다.