我们有一个WPF项目,该项目使用第三方库和几个内部包。 wpf程序可以自行运行,程序集得到正确解析,代码运行良好 该程序提供了从不同来源加载数据的可能性,具体取决于您的启动方式。如前所述,当它自己调用时,一切都很好,但是如果我们从不同的应用程序调用该程序,这是通过提供一个控制器并将其注册为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程序也是作为一个独立的应用程序提供的,所以我们将控制器移动到另一个项目,它没有引用很多程序集,例如某些wpf库。
控制器本身不再拥有逻辑,通常它会传递com对象提供的某些数据,但总而言之,它唯一能做的就是尝试在不同的项目中实例化MainWindowViewModel。与控制器在同一解决方案中的项目得到了正确解决,但第三方的东西却没有。
一旦我们通过控制器调用wpf程序,引用第三方库的项目就不能再解析它的引用并抛出异常。
解决此类问题的正确方法是什么?我们是否必须在GAC注册第三方dll?或者他们是否需要调整他们的一些财产?我们无法理解它。我们非常感谢有关参考文献及其解决方法的所有信息。
答案 0 :(得分:0)
感谢@Hans Passant,我们找到了解决问题的方法。第一次尝试时,我们只需将所需的dll复制到执行程序集的文件夹中,它就像魅力一样。这不是最终解决方案,很可能我们将使用代码库,但也可以使用神类,因为控制器将始终首先创建。我认为我们会尽量让控制器尽可能小,并让应用程序处理它如何获得它的资源。