2013-03-11 8 views
5

ho incontrato qualche problema quando si cerca di caricare le risorse da due assemblee separate aventi lo stesso nome ma trova in una cartella diversa:Caricamento risorsa ResourceDictionary a runtime dalle assemblee con lo stesso nome

  • C: \ cartella1 \ fcl.dll
  • C: \ cartella2 \ fcl.dll

Un ResourceDictionary nome Resources.xaml è incorporato (come pagina) in ciascuno di questi gruppi.

per caricare la prima ResourceDictionary, io uso il seguente frammento:

// 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) }; 

Questo è in esecuzione!

Ma quando provo a caricare la seconda ResourceDictionary con lo stesso frammento di codice (solo cambiando Assembly.LoadFrom(@"c:\folder1\FCL.Dll") da Assembly.LoadFrom(@"c:\folder2\FCL.Dll"), non carica le risorse da c: \ folder2 \ fcl.dll, ma quelli memorizzati nel c precedentemente caricato : \ cartella1 \ fcl.dll :-(

la causa: il shortAssemblyName campo della URI è lo stesso, nel caso in maggio FCL:

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

qualcuno sa come risolvere questo problema ?

risposta

0

Non è possibile caricare due assiemi con lo stesso nome, quindi penso che il secondo Assembly.LoadFrom venga semplicemente ignorato. Probabilmente dovrai rinominare uno degli assiemi.

+0

Correzione: è possibile avere più assiemi caricati con lo stesso nome se si utilizzano nomi forti e se le versioni differiscono. Dovresti quindi specificare la versione come parte dell'URI. – johndsamuels

Problemi correlati