2011-09-02 2 views
4

Microsoft Word 용 추가 기능 개발 중입니다. 내 추가 기능에서 "Microsoft.Office.Interop.Word.dll"파일에 대한 참조를 사용하고 있으므로 워드 개체를 사용할 수 있습니다.내 프로젝트에 동적으로 참조 추가

개발 시스템이 설치 워드 2007이 경우

은 참고 문헌에 포함 할 파일은 파일이 14

어떻게 내가 내 추가 기능을 구축 할 수 있습니다 버전이어야한다 설치되어있는 경우 워드 2010 버전 12 입니다 컴퓨터에 어떤 버전의 Word가 설치되어 있는지에 관계없이 작동하게 만듭니다. 즉, 내 응용 프로그램에 자동으로 적절한 버전의 Office가 설치되어 있는지 확인하고 적절한 interop 파일을 자동으로 사용하도록 알려줍니다.

답변

2

실제 코드가 주어진 어셈블리의 항목을 참조하는 경우 다른 버전에 연결하려고 시도하면 실제로 오류가 발생할 수 있습니다 (예 : 특정 메서드 서명이 변경된 경우). 대부분의 경우 가장 좋은 전략은 다른 DLL 버전을 대상으로 다른 빌드를 생성하고 사용자 컴퓨터에 올바른 빌드를 설치하는 것입니다.

일련의 인터페이스에서이 라이브러리에 대한 호출을 래핑 한 다음 인터페이스 구현을 제공하지만 서로 다른 DLL을 대상으로하는 두 개의 "플러그인"어셈블리가있을 때처럼 쉽게 사용할 수있는 전략이 있습니다. 그들은 그것을 구현합니다. 이 소프트웨어는 널리 사용되는 Dependency Injection 프레임 워크와 마찬가지로 구성에 따라 구현 바인딩을 동적으로로드 할 수 있습니다. 그런 식으로 메서드 서명이 한 버전에서 다른 버전으로 변경되면 단일 클래스 만 변경할 수 있으며 나머지 코드는 그대로 작동합니다.

+0

소프트웨어가 어떻게 구성 바인딩을 통해 동적으로 구현 바인딩을로드 할 수 있는지 보여 줄 수 있습니까? 예를 들어 두 개의 래퍼 인 IOffice.Wrapper.12.dll (Office 12를 참조)과 IOffice, Wrapper.14.dll (Office 14를 참조 할 것임)을 만들면 래퍼 또는 하나만 설치할 수 있습니까? – Zee99

+0

@ Zee99 : 사용자 컴퓨터에 두 dll 파일을 둘 수 있으며 프로그램이 초기화되면 필요한 파일 만로드 할 수 있습니다. 각 어셈블리의 한 클래스는 모든 팩토리 클래스를 초기화하여 "부트 스트랩"인터페이스를 구현할 수 있습니다. 런타임에 DLL을로드하고 어셈블리를 스캔하여 지정된 인터페이스를 구현하는 클래스를 찾습니다. 그런 다음 특정 클래스를 인스턴스화하고 실행합니다. 따라서 여러분의 코드가'CopyPasteUtilFactory.Get()'을 말할 때'IOffice.Wrapper.XX.dll'에 구현 된'CopyPasteUtil'을 얻을 것입니다. – StriplingWarrior

+0

@ Zee99 : 또는 더 좋게도, Ninject와 같은 DI 프레임 워크가 어려운 부분을 처리합니다. IOffice.Wrapper.XX.dll에 하나 이상의 Module 클래스를 포함하면 바인딩을 만들 수 있습니다. 프로그램이 시작될 때 Ninject에게 올바른 어셈블리를로드하도록 지시하십시오. 그런 다음 여러분의 클래스 중 하나가'ICopyPasteUtil'에 의존 할 때마다 올바른 구현체가 그 클래스에 주입 될 것이다. – StriplingWarrior

관련 문제