2012-10-09 23 views
0

所以,我有一個dll,其中包含一些resx文件作爲用於本地化的EmbeddedResources。 該dll主要用於創建ASP.NET網站,它的工作正常。使用來自另一個DLL的衛星程序集

但是,當我在我的測試項目中使用dll(基本上這只是另一個dll)時,我無法訪問衛星程序集內容,例如我無法訪問我的消息的英文翻譯。它僅返回回退消息。使用

代碼:

ResourceManager _resourceManager = new ResourceManager(baseName, Assembly.GetExecutingAssembly()); 
_resourceManager.GetString(key, cultureInfo); 

基本名稱是資源的完全合格的名稱,例如:myNamespace.MyResourceName。

我在想這是不同的dll的加載,當項目是一個dll或網站,但我不知道如何正確加載它。

任何人有想法或建議嗎?

謝謝。

編輯: 我DLL中的一些RESX:

  • Messages.resx
  • Messages.en.resx
  • Messages.de.resx
  • 等...

在構建結束時,它會生成一些dll:

  • A.DLL
  • EN/A.resources.dll
  • 德/ A.resources.dll
  • 等...

如果DLL A被網站引用,該網站可以訪問本地化資源,例如en或de中的消息。 但是,如果它是另一個DLL像我的單元測試DLL引用的DLL A,它總是回退的消息。

+0

什麼是'baseName'設置爲? – OffHeGoes

+0

這是資源的全限定名稱,如MyNamespace.MyResourceName。 –

回答

0

我想你正在爲正在執行的程序集加載資源,而不是衛星程序集。嘗試:

var assembly = Assembly.Load("my.other.namespace"); 
var manager = new ResourceManager(assembly.GetType().Name + ".Localisation", assembly); 

var str = manager(key, cultureInfo); 

my.other.namespace替換爲附屬程序集的完整名稱空間。

+0

正在執行的程序集包含所有的resx文件,並且是附屬程序集的根目錄。 在構建結束時,我有: -MainAssembly.dll -en/MainAssembly.resources.dll -etc ... –

+0

你能否讓你的問題更清楚?我將其作爲DLL **讀取** A **引用附屬DLL ** B **並且** **中的代碼需要訪問** B **的資源。 – OffHeGoes

+0

就是這樣,除了B自動生成具有本地化內容的衛星程序集。我無法訪問本地化的內容。 –

相關問題