WPF中的链引用程序集

时间:2012-05-29 11:05:27

标签: c# wpf c#-4.0 assemblies external-assemblies

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

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

下图说明了我刚才所说的内容:
Chain-referenced assemblies

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

解决方法

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

结论

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

2 个答案:

答案 0 :(得分:1)

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

第二个选项是使用嵌入式资源。

答案 1 :(得分: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]);
    }

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