2013-03-11 10 views
5

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 ?

Odpowiedz

0

Nie można załadować dwóch złożeń o tej samej nazwie, więc myślę, że drugi Assembly.LoadFrom jest po prostu ignorowany. Prawdopodobnie będziesz musiał zmienić nazwę jednego z zestawów.

+0

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

Powiązane problemy