2014-12-01 71 views
3

下嵌套當使用在.csproj文件DependentUpon元件下一個.cs文件嵌套一個.resx文件,然後訪問使用MissingManifestResourceException拋出包裝資源.resx文件資源時包裝。MissingManifestResourceException訪問用於cs文件

賀電:

找不到適合指定區域性或中性文化的任何資源。確保在編譯時「Namespace.Resource.resources」已正確嵌入或鏈接到程序集「Assembly」中,或者確保所有需要的附屬程序集均可加載且完全簽名。

示例代碼:

MessageBox.Show(Resource.Key); 

爲什麼會出現這種錯誤發生的呢?

+0

降價的任何理由? :) – ctusch 2014-12-01 16:27:21

+0

[MissingManifestResourceException](https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=C%23%20MissingManifestResourceException)對確切的異常進行Google搜索產生大量的好結果來幫助您的案例 – MethodMan 2014-12-01 16:29:24

+2

@DJKRAZE請閱讀整個問題(和以下答案)。這不是由我能找到的任何Google結果回答的。 – ctusch 2014-12-01 16:31:26

回答

2

MSBuild目標PrepareResourceNames(其中PrepareResources,也稱爲ResGen,依賴於)調用稱爲CreateManifestResourceName的任務。
[見Microsoft.Common.targets]

此任務創建.resources文件的名稱。對於C#,創建名稱的實際方法是CreateManifestNameImpl,其格式爲Microsoft.Build.Tasks.CreateCSharpManifestResourceName。此方法檢查.resx文件是否具有.cs文件作爲父文件。在這種情況下,它會搜索.cs文件以找到它可找到的第一個完全限定類名稱,並將其作爲.resources文件名。
[請參閱Microsoft.Build.Tasks.v4.0.dll]

.resx包裝不希望此文件名更改,從而引發異常。

我想這種行爲是爲WinForms本地化實現的,它將其資源嵌套在相應的窗體或控件下。

我決定不嵌套.resx文件。一個可能的解決方案可能是實現一個CreateCustomManifestResourceName任務,MSBuild提供了一個鉤子。

+0

我試圖將'.resx'嵌套在'.cs'中,並且拋出異常。我真的想要嵌套工作,你有沒有想過? – JobaDiniz 2016-12-05 11:58:59

+1

@JobaDiniz不,這不值得麻煩。重寫那個鉤子可能是一條路,但我從來沒有真正嘗試過。 – ctusch 2016-12-05 22:52:54

相關問題