与 com 对象结合的程序集引用问题
Assembly reference issue in combination with com objects
我们有一个 WPF 项目,它使用第三方库和几个内部包。 wpf 程序本身运行良好,程序集得到正确解析,代码运行良好。
该程序提供了从不同来源加载数据的可能性,具体取决于您启动它的方式。如前所述,当单独调用时,一切都很好,但是如果我们从不同的应用程序调用程序,这是通过提供控制器并将其注册为 COM interop 来完成的,我们 运行 进入程序集引用问题.
[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。和controller在同一个solution的projects都能正确解析,但是第三方的东西就不行了
一旦我们通过控制器调用 wpf 程序,引用第三方库的项目就无法再解析它的引用并抛出异常。
解决此类问题的正确方法是什么?我们是否必须在 GAC 中注册第三方 dll?还是他们的某种 属性 我们必须调整?我们无法理解它。感谢有关参考及其解决方式的所有信息。
感谢@Hans Passant,我们找到了解决问题的方法。第一次尝试时,我们只是将所需的 dll 复制到正在执行的程序集的文件夹中,效果非常好。这不会是最终的解决方案,我们很可能会使用代码库,但也可以使用 god class,因为控制器将始终先创建。我认为我们会尽量保持控制器尽可能小,并让应用程序处理它获取资源的方式。
我们有一个 WPF 项目,它使用第三方库和几个内部包。 wpf 程序本身运行良好,程序集得到正确解析,代码运行良好。
该程序提供了从不同来源加载数据的可能性,具体取决于您启动它的方式。如前所述,当单独调用时,一切都很好,但是如果我们从不同的应用程序调用程序,这是通过提供控制器并将其注册为 COM interop 来完成的,我们 运行 进入程序集引用问题.
[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。和controller在同一个solution的projects都能正确解析,但是第三方的东西就不行了
一旦我们通过控制器调用 wpf 程序,引用第三方库的项目就无法再解析它的引用并抛出异常。
解决此类问题的正确方法是什么?我们是否必须在 GAC 中注册第三方 dll?还是他们的某种 属性 我们必须调整?我们无法理解它。感谢有关参考及其解决方式的所有信息。
感谢@Hans Passant,我们找到了解决问题的方法。第一次尝试时,我们只是将所需的 dll 复制到正在执行的程序集的文件夹中,效果非常好。这不会是最终的解决方案,我们很可能会使用代码库,但也可以使用 god class,因为控制器将始终先创建。我认为我们会尽量保持控制器尽可能小,并让应用程序处理它获取资源的方式。