2012-05-29 4 views
3

오늘 나는 체인에서 추가 어셈블리를 참조하는 C# WPF에서 프로젝트를 구성하는 방법을 알고 싶습니다. 은 "의 체인"에 의하여 나는 이런 식으로 뭔가 의미 :WPF에서 체인 참조 된 어셈블리

  • 우리는
  • 플러그인 어셈블리 플러그인을 사용하는 자원은 예를 들어,있는 자원을 말한다 조립 플러그인을 의미 응용 프로그램이 있습니다. 이미지
  • 주 응용 프로그램은 어떤 식 으로든 리소스를 참조하지 않습니다.
    Chain-referenced assemblies

    문제는 자원이 자원을 (이미지에서 Ctrl) 플러그인을 일으키는 원인이되는 응용 프로그램의 bin 폴더에 복사되지 않는 것입니다 :

다음 이미지는 내가 말한 한 것을 보여 실패를 찾아야합니다.

해결

는 빌드 후 단계를 기본 응용 프로그램의 참조에 리소스를 포함하거나 사용하기 간단하고 수동으로 해당 단계에서 필요한 파일을 복사 그것에 대한 해결 방법이 있습니다.

결론

결론, 나는 당신이 그 문제를 처리 할 방법을 물어보고 싶습니다. 해결 방법 섹션에서 언급 한 솔루션 외에 다른 솔루션이 있습니까? 프로젝트의 구성에서 뭔가 빠졌습니까?

답변

1

플러그인 프로젝트 속성의 출력 디렉토리가 애플리케이션의 출력 디렉토리와 동일한 지 확인하십시오. 그렇지 않으면 파일을 직접 복사해야합니다.

두 번째 옵션은 포함 된 리소스를 사용합니다.

+0

두 옵션 모두 사용할 수 없습니다. 'Res'프로젝트는 보통 'CommonControls'라이브러리입니다.이 라이브러리는 'Ctrl'프로젝트에 포함시키는 것이 좋습니다. 파일을 복사하는 것은 성가신 일뿐입니다. (그럼에도 불구하고, 임베딩 아이디어에 대한 감사합니다.) – SOReader

0

EXE와는 다른 폴더에서 플러그인을 동적으로로드하는 경우 해당 종속성을 플러그인과 동일한 폴더에 복사하고 동적으로 해당 어셈블리를로드 할 수도 있습니다. 그런 다음 이미로드 된 어셈블리 대신 새 어셈블리를 찾으려고 노력으로 해결 될 수 있도록 AssemblyResolve을 처리해야합니다

AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; 
    private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) 
    { 
     var domain = (AppDomain)sender; 
     var assemblies = domain.GetAssemblies(); 
     return assemblies.FirstOrDefault(assembly => assembly.GetName().Name == args.Name.Split(',')[0]); 
    } 

위의 코드는 버전과 강력한 명명 문자를 구분 일치하지 않습니다; 보다 엄격한 것을 원한다면 여기에 자신의 정책을 구현할 수 있습니다.

+0

그 해답을 주셔서 감사하지만 문제는 MSVS의 프로젝트 컨텍스트 메뉴에서 코드에서 동적으로로드 된 종속성에 대한 것이 아니라 "참조 추가 ..."옵션입니다. – SOReader