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

时间:2013-03-11 08:31:24

标签: wpf runtime uri resourcedictionary

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

  • C:\ folder1中\ fcl.dll
  • C:\文件夹2 \ fcl.dll

在每个程序集中嵌入了一个名为 Resources.xaml ResourceDictionary(作为页面)。

要加载第一个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) };

这个正在运行!

但是,当我尝试使用相同的代码片段加载第二个ResourceDictionary时(仅Assembly.LoadFrom(@"c:\folder1\FCL.Dll")更改Assembly.LoadFrom(@"c:\folder2\FCL.Dll")它不会从c:\ folder2加载资源\ fcl.dll,但那些存储在以前加载的c:\ folder1 \ fcl.dll中: - (

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

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

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

1 个答案:

答案 0 :(得分:0)

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