I napotkał pewne problemy przy próbie załadowania zasobów z dwóch oddzielnych zespołów mających taką samą nazwę ale znajdujący się w innym folderze:Ładowanie ResourceDictionary zasobów w czasie wykonywania z zespołów o tej samej nazwie
- C: \ folder1 \ fcl.dll
- C: \ folder2 \ fcl.dll
ResourceDictionary
nazwie Resources.xaml jest osadzony (jako strona) w każdym z tych zespołów.
Aby załadować pierwszy ResourceDictionary
, używam następujący fragment:
// 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) };
to działa!
Ale gdy próbuję załadować drugą ResourceDictionary
z tego samego fragmentu kodu (tylko zmiana Assembly.LoadFrom(@"c:\folder1\FCL.Dll")
przez Assembly.LoadFrom(@"c:\folder2\FCL.Dll")
, nie załadować zasobów z katalogu c: \ folder2 \ fcl.dll, ale te, przechowywane w poprzednio załadowanego c : \ folder1 \ fcl.dll :-(
The przyczyna: shortAssemblyName pole URI jest taka sama w przypadku FCL:
var uri = string.Format("pack://application:,,,/{0};Component/Resources.xaml", assembly.GetName().Name)
Czy ktoś wie jak rozwiązać ten problem ?
Korekta: możesz mieć wiele złożeń ładowanych o tej samej nazwie, jeśli używasz silnych nazw i jeśli wersje się różnią. Będziesz wtedy musiał określić wersję jako część URI. – johndsamuels