我們有一個WPF項目,它使用第三方庫和一些內部軟件包。 wpf程序可以正常工作,程序集可以正確解析並且代碼工作得很好。
該程序提供了從不同來源加載數據的可能性,具體取決於您如何啓動它。如前所述,當調用它自己的時候,它一切都很好,但是如果我們通過提供控制器並將其註冊爲COM interop來完成另一個應用程序的調用,我們會遇到程序集引用問題。裝配參考問題與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庫的示例somekind的。
控制器自己不再擁有邏輯,通常它傳遞com對象提供的一些數據,但總而言之,它唯一要做的就是試圖在不同的項目中實例化MainWindowViewModel。與控制器處於同一解決方案的項目已正確解決,但第三方的東西不是。
只要我們通過控制器調用wpf程序,引用第三方庫的項目就無法再解決它的引用並引發異常。
解決這類問題的正確方法是什麼?我們是否必須在GAC中註冊第三方dll?或者他們的財產是我們必須調整的?我們無法繞過它。有關參考文獻以及如何解決的每一個信息都會受到讚賞
「不同的應用程序」是問題所在。 CLR仍按正常方式查找程序集,首先是GAC,然後是EXE文件的目錄。即使該EXE不是託管應用程序。如果您在註冊時使用了/ codebase,則只有具有[ComVisible]類型的DLL才能自動找到。因此GAC解決了這個問題,並將DLL複製到其他應用的安裝目錄中解決了這個問題。從技術上講,你可能能夠使AppDomain.AssemblyResolve工作,但重要的是你有一個上帝類,客戶端代碼總是必須首先創建。 –
@Hans Passant非常感謝你,這些信息解決了我們的問題,並帶來了對該主題的更多見解。你能複製/粘貼你的評論作爲答案嗎?我想將問題標記爲已回答 – yRadwan
只需分享您在自己的帖子中使用的方法,我無法猜測您決定要做什麼。將您的帖子標記爲答案。 –