2009-12-04 73 views
14

我想要編譯App_GlobalResources文件/ Strings.resx到我的組件(最終使用衛星組合件Strings.es.resx,Strings.fr.resx等。),但會出現以下錯誤一旦應用發佈:如何使用編譯全球資源在ASP.NET MVC

「無法加載文件或程序集‘App_GlobalResources文件’或它的一個依賴系統無法找到指定的文件」

重現步驟:

  1. 創建一個新的ASP.NET MVC項目。
  2. 添加一個App_GlobalResources文件夾和一個Strings.resx文件。
  3. 設置文件的生成操作「嵌入的資源」
  4. 添加一個字符串Strings.resxHomeController.Index()使用它,例如ViewData["Message"] = Strings.MyTest
  5. F5調試,工作正常。
  6. 發佈到IIS和(因爲Strings.resx被排除在發佈之外),您將在發佈的站點中獲得上述錯誤。

ASP.NET MVC項目可以使用編譯到dll中的字符串資源,如果是的話,我做錯了什麼?


更新:這是我在看到反射: String Resources

那麼爲什麼ResourceManager沒有找到他們呢?它不應該默認爲fallback to the main assembly

回答

23

這裏是一個很好的起點http://odetocode.com/Blogs/scott/archive/2009/07/16/resource-files-and-asp-net-mvc-projects.aspx

我的設置就像你提到的,當我部署到IIS6得到了完全相同的錯誤的項目。根據Scott的建議,將Custom Tool更改爲PublicResXFileCodeGeneratorCustom Tool NamespaceResources

我也跟着斯科特的領導關於消除App_GlobalResources,但我讓它工作得很好。這可能是個人喜好的問題。

+0

優秀的答案!很棒。謝謝。 –

+0

_偉大的鏈接!謝謝! –

+0

@ w0rd-driben,我已經構建了一個包含globalresource的assembly1,並且在發佈時公開,但是在另一個項目中使用此程序集並使用代碼時:「<%$ Resources:General,SomeKey%>」不工作...任何想法?謝謝 – Mhmd