2014-04-04 3 views
2

.NET 자동 COM 랩핑을 사용하여 COM 응용 프로그램 인 벤더 제품에 대한 참조에 의존하는 코드가 있습니다 (Visual Studio의 참조 추가 대화 상자를 사용하여 참조를 추가하고 명부). 내 코드는 .NET Framework 4.0을 대상으로합니다.두 개의 다른 어셈블리 참조에 대해 동일한 코드를 컴파일 하시겠습니까?

최신 버전의 공급 업체 제품은 COM GUI 응용 프로그램을 더 이상 사용하지 않지만 원래 COM 응용 프로그램과 동일한 API를 구현하는 COM interop DLL과 함께 제공됩니다. 그러나 새 COM interop DLL은 .NET Framework 4.5를 사용하여 컴파일되었습니다.

API가 동일하기 때문에 이전 버전과 새로운 버전의 공급 업체 제품과의 호환성을 위해 두 개의 별도 코드 기반을 유지 관리하고 싶지 않습니다.

원본 VendorApplication COM 구성 요소 (가능하면 .NET 4.0에 해당)와 새로운 VendorApplication.Interop.dll (사용 가능한 경우) 모두에서 작동하는 하나의 코드 기반을 가질 수 있도록 어떻게 Visual Studio 프로젝트를 설정할 수 있습니까? .NET 4.5)?

+0

그래서 .NET 4.0을 대상으로하지만, .NET 4.5를 사용하는 시스템에 응용 프로그램이 설치되어있는 경우 새 공급 업체 라이브러리를 사용하고 싶습니까? – Noseratio

+0

저는 공급 업체 제품과 상호 작용하는 도구를 작성하고 있습니다. 필자는 도구가 이전 버전의 제품 (자동 COM 래퍼 참조)과 최신 버전 (공급 업체 제공 COM interop DLL) 모두에서 작업 할 수 있기를 원하며, 두 코드 기반을 유지할 필요가 없습니다. 동시에 두 버전을 모두 지원하기 위해 .NET 4.5를 사용하여 업그레이드해야한다면, 그래도 괜찮습니다.하지만 4.0에서 이전 COM 래퍼를, 4.5에서 새로운 Interop.DLL을 동시에 타겟팅 할 수 있다면 더 좋습니다 . – Hydrargyrum

답변

1

나는 하나 개의 코드를 원래 VendorApplication COM 구성 요소 (바람직에 .NET 4.0 그것이 가능하다면)와 새로운 VendorApplication에서 모두 작동 기반을 가질 수 있도록 내 비주얼 스튜디오 프로젝트를 설정하는 방법에 대해 설명합니다. Interop.dll (.NET 4.5)?

이렇게하는 한 가지 방법은 동일한 "썽크"라이브러리의 두 버전을 만들어 동일한 API를 노출하는 것입니다. 각 버전마다 고유 한 strong name이 있어야합니다.

  • 첫 번째 버전 (예를 들어, v4.0.0.1로 버전 MyInterfaceAssembly.dll)는 .NET 4.0을 대상으로하고 기존 공급 업체 라이브러리를 사용합니다.

  • 두 번째 버전 (MyInterfaceAssembly.dll v4.5.0.1)은 .NET 4.5를 대상으로하고 새 공급 업체 라이브러리를 사용해야합니다.

  • 응용 프로그램은 참조로 빌드되어 첫 번째 버전 (v4.0.x)과 연결됩니다.

  • 설치 프로그램은 최종 사용자 시스템에 따라 v4.0.x 또는 v4.5.x 중 하나를 설치합니다.

  • 가장 중요한 부분은 당신이 <bindingRedirect> 사용하는 것 app.config 파일입니다 :

<configuration> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="MyCompany.MyInterfaceAssembly" publicKeyToken="xxxxxxxxxxxxxxxx" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-4.0.0.1" newVersion="4.5.0.1" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

.NET 4.5에 앱이 MyInterfaceAssembly.dll v4.5.x를 사용하여 실행됩니다 제공 4.0 .x는 이 아니며이 설치되어 있습니다.

관련 문제