我在尝试从两个单独的程序集中加载资源时遇到了一些问题,这些程序集具有相同的名称,但位于不同的文件夹中:
在每个程序集中嵌入了一个名为 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)
有人知道如何解决这个问题吗?
答案 0 :(得分:0)
您不能使用相同名称加载两个程序集,因此我认为第二个Assembly.LoadFrom只是被忽略。您可能需要重命名其中一个程序集。