2012-09-12 87 views
2

將解決方案從VS2008遷移到VS2010時遇到問題。問題是,在某些情況下在運行時找不到管理的資源,因爲它們未嵌入正確的名稱:如何在Visual Studio 2010中設置資源邏輯名稱?

「找不到適用於指定文化或中性文化的任何資源。確保」生產.ViewDocument.resources「在編譯時被正確嵌入或鏈接到程序集」RSProcess「中,或者所有需要的附屬程序集均可加載並完全簽名。」

System.Resources.MissingManifestResourceException通常在創建的資源上調用ApplyResources時通過類型ID拋出InitializeComponent。在我的情況下,命名空間是Production,類名是ViewDocument。但是,生成的資源(來自ViewDocument.resx)是從resx文件所在的文件夾結構命名的,在本例中爲Production.folder1.folder2.ViewDocument.resources。

在VS2008中,您可以覆蓋.resx文件「託管資源/常規/資源邏輯名稱」設置中的(默認)邏輯名稱。在VS2010中,我無法得到這個工作 - 它完全忽略了這個設置!有沒有解決這個問題的方法?

最後一個辦法是刪除當前的文件夾結構並將所有文件移動到根項目文件夾,但是這對我來說似乎是相當多的工作。

有什麼建議嗎?

回答

2

我找到了我自己的問題的答案!

在VS2010中發生了一些讓我困惑的事情。首先,在VS2008中,.resource文件的名稱受項目設置「資源邏輯名稱」的影響,在VS2010中,文件始終根據項目的根名稱空間和文件夾結構(擴展名稱空間)命名。其次,在遷移時,這些設置被刪除,可能是因爲我們使用了一個已被%(Filename)替換的宏$(InputFile)。

爲了解決這個問題,我在項目級定義了「資源邏輯名」(或者你可以使用項目屬性頁)到$(RootNamespace)。%(Filename).resources。請注意,.resource文件仍然會獲得擴展名(由其駐留的文件夾定義)。但是,如果從MSBuild中檢查日誌文件,則除了資源文件名之外,您可以看到邏輯名稱出現在鏈接器的/ ASSEMBLYRESOURCE開關中!在重建之後,ComponentResourceManager現在將使用視圖的類型(在這種情況下爲Rootnamespace.filename)在「InitializeComponent」中查找資源。另外請注意,這假定您的視圖類被放置在與該類同名的文件中!

相關問題