우리는 제 3 자 라이브러리와 몇 개의 내부 패키지를 사용하는 WPF 프로젝트를 가지고 있습니다. wpf 프로그래머가 제대로 작동하므로 어셈블리가 올바르게 해석되고 코드가 훌륭하게 작동합니다.
이 프로그램은 시작한 방법에 따라 다른 소스의 데이터를로드 할 수있는 가능성을 제공합니다. 앞에서 언급 한 것처럼 자체적으로 호출하면 모든 것이 훌륭하게 작동하지만 컨트롤러를 제공하고 COM interop으로 등록하여 수행되는 다른 응용 프로그램에서 programm를 호출하면 어셈블리 참조 문제가 발생합니다. com 객체와 조합 된 어셈블리 참조 문제
[Guid("93BC7929-8A5F-43EA-AEAB-38B5034758E5")]
[ComVisible(true)]
public class ConnectionController : ControllerBase
{
public override void Run()
{
var viewModel = new MainWindowViewModel();
var view = new MainWindow {DataContext = viewModel};
view.Show();
}
}
의 WPF programm에 또한 독립형 애플리케이션으로서 제공되기 때문에
, 우리 WPF 라이브러리 예 였을 들어 assemblys 많이 참조하지 않는 다른 프로젝트에 컨트롤러를 이동.컨트롤러 자체는 더 이상 논리를 유지하지 않으며 일반적으로 com 객체가 제공하는 데이터를 전달하지만 실제로는 다른 프로젝트의 MainWindowViewModel을 인스턴스화하려고 시도하는 것입니다. 컨트롤러와 동일한 솔루션에있는 프로젝트는 올바르게 해석되지만 제 3 자의 작업은 그렇지 않습니다.
컨트롤러에서 wpf programm를 호출하자마자 타사 라이브러리를 참조하는 프로젝트는 더 이상 참조를 확인할 수 없어 예외가 발생합니다.
이런 종류의 문제를 해결하기위한 올바른 방법은 무엇입니까? GAC에 제 3 자 dll을 등록해야합니까? 아니면 우리가 조정해야 할 재산의 일부입니까? 우리는 그것의 주위에 우리의 머리를 얻을 수 없다. 참고 문헌에 대한 모든 정보와 그 정보가 어떻게 해결되었는지 평가 해주십시오.
"다른 응용 프로그램"이 문제입니다. CLR은 여전히 정상적인 방법으로 어셈블리를 찾습니다. 먼저 GAC 다음으로 EXE 파일의 디렉터리입니다. EXE가 관리되는 앱이 아니더라도. [ComVisible] 유형을 가진 DLL 만 등록 할 때/codebase를 사용하면 자동으로 찾을 수 있습니다. 그래서 GAC이 그것을 해결하고 DLL을 다른 앱의 설치 디렉토리에 복사하면 해결됩니다. 기술적으로 AppDomain.AssemblyResolve를 만들 수는 있지만 클라이언트 코드가 항상 먼저 만들어야하는 God 클래스가 있어야합니다. –
@ 한스 패스언트는이 정보가 우리의 문제를 해결하고 그 주제에 대해 더 많은 통찰력을 갖게 해 주신 것에 매우 감사드립니다. 답변으로 의견을 복사/붙여 넣을 수 있습니까? 질문을 대답으로 표시하고 싶습니다. – yRadwan
자신의 게시물에서 사용한 접근 방식을 공유하십시오. 내가 무엇을하기로 결정했는지 짐작할 수 없습니다. 게시물을 답으로 표시하십시오. –