今天我想知道如何在C#WPF中配置项目,它引用链中的其他程序集。通过“在链中”我的意思是这样的:
下图说明了我刚才所说的内容:
问题是资源没有被复制到应用程序的bin文件夹,导致插件(图像上的Ctrl)资源需要找到失败。
解决方法
有一些解决方法,它只是将Resources包含在主应用程序的引用中,或者使用构建后步骤并在该步骤中手动复制所需的文件。
结论
总结,我想问你如何处理这个问题。除了我在解决方法部分中提到的解决方案之外,还有其他解决方案吗?我在项目配置中遗漏了什么吗?
答案 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]);
}
上面的代码执行版本和强命名不敏感匹配;如果你想要更严格的东西,你可以在这里实施自己的政策。