3

今天我想知道你如何在 C# WPF 中配置你的项目,它引用了链中的其他程序集。通过“链中”,我的意思是这样的:

  • 我们有引用程序集插件的应用程序
  • 插件程序集是指插件使用的资源所在的资源,例如。图片
  • 主应用程序不以任何方式引用资源。

下图说明了我刚才所说的:
链参考装配体

问题是资源没有复制到应用程序的bin文件夹,导致插件(图像上的Ctrl)资源查找失败。

解决方法

有一些解决方法,只需将资源包含到主应用程序的引用或使用构建后步骤并在该步骤中手动复制所需的文件。

结论

最后,我想问一下你是如何处理这个问题的。除了我在解决方法部分提到的解决方案之外,还有其他解决方案吗?我在项目的配置中遗漏了什么吗?

4

2 回答 2

1

确保插件项目属性中的输出目录与应用程序的输出目录相同。否则,您必须自己复制文件。

第二种选择是使用嵌入式资源。

于 2012-08-17T13:42:31.920 回答
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]);
    }

上面的代码做了版本和强命名不敏感匹配;如果你想要更严格的东西,你可以在这里实施你自己的政策。

于 2012-08-17T13:54:44.440 回答