在运行时从具有相同名称的程序集加载ResourceDictionary资源

Fre*_*RON 5 wpf uri runtime resourcedictionary

尝试从具有相同名称位于不同文件夹的两个单独程序集中加载资源时遇到了一些问题:

  • C:\文件夹1\fcl.dll
  • C:\文件夹2\fcl.dll

ResourceDictionary命名Resources.xaml在每个这些组件的嵌入式(作为页).

要加载第一个ResourceDictionary,我使用以下代码段:

// Load the assembly in memory
var assembly = Assembly.LoadFrom(@"c:\folder1\FCL.Dll");

// Get Dictionnary 
var uri = string.Format("pack://application:,,,/{0};Component/Resources.xaml", assembly.GetName().Name);
var resourceDictionary = new ResourceDictionary { Source = new Uri(uri) };
Run Code Online (Sandbox Code Playgroud)

这个正在运行!

但是,当我尝试加载第二个ResourceDictionary与代码(只是改变了相同的片段Assembly.LoadFrom(@"c:\folder1\FCL.Dll")通过Assembly.LoadFrom(@"c:\folder2\FCL.Dll"),它不会从C加载资源:\文件夹2\fcl.dll,但那些存储在先前加载C:\文件夹1\fcl.dll: - (

原因:URI 的shortAssemblyName字段是相同的,在可能的情况下FCL:

 var uri = string.Format("pack://application:,,,/{0};Component/Resources.xaml", assembly.GetName().Name)
Run Code Online (Sandbox Code Playgroud)

有人知道如何解决这个问题吗?

joh*_*els 0

您不能使用相同的名称加载两个程序集,因此我认为第二个 Assembly.LoadFrom 只是被忽略。您可能必须重命名其中一个程序集。