尝试从两个具有相同名称但位于不同文件夹中的单独程序集加载资源时遇到了一些问题:
- C:\folder1\fcl.dll
- C:\folder2\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) };
这是在运行!
但是,当我尝试ResourceDictionary
使用相同的代码片段加载第二个时(只是更改Assembly.LoadFrom(@"c:\folder1\FCL.Dll")
,它不会从 c:\folder2\fcl.dll 加载资源,而是从先前加载的 c:\folder1\fcl.dll 加载资源Assembly.LoadFrom(@"c:\folder2\FCL.Dll")
:-(
原因:URI的shortAssemblyName字段相同,可能情况FCL:
var uri = string.Format("pack://application:,,,/{0};Component/Resources.xaml", assembly.GetName().Name)
有人知道如何解决这个问题吗?