2013-03-11 76 views
5

我遇到試圖從具有同名位於不同的文件夾兩個獨立的組件加載資源時的一些問題,同一個名字:加載的ResourceDictionary資源從組件與

  • C: \ folder1中\ fcl.dll
  • C:\文件夾2 \ 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:\folder2\FCL.Dll")Assembly.LoadFrom(@"c:\folder1\FCL.Dll")它不會從C加載資源:\文件夾2 \ fcl.dll,但那些存儲在先前裝載的C :\文件夾1 \ fcl.dll :-(

原因:URI的shortAssemblyName領域也是一樣,在五月的情況下FCL:

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

是否有人知道如何解決這個問題?

回答

0

你不能有兩個程序集加載相同的名稱,所以我認爲第二個Assembly.LoadFrom只是被忽略。您可能將不得不重命名其中一個程序集。

+0

更正:如果您使用強名稱並且版本不同,則可以使用相同名稱加載多個程序集。然後您需要將版本指定爲URI的一部分。 – johndsamuels 2013-04-12 15:49:37