我正在將一些基於.NET 3.5的項目轉換爲.NET Framework 4.0,並遇到彙編嵌入字符串資源的問題。如何將帶有嵌入字符串資源的.NET 3.5兼容程序集移植到.NET 4.0中?
代碼包含對資源字符串的引用,如Resources.ValidationFailedMsg
。 Resources
這裏是一個自動生成的類。它的完全限定名是MyAssembly.Properties.Resources
(程序集名稱是MyAssembly.dll,爲了簡單起見,其中的所有內容的根名稱空間也是MyAssembly)。項目的「屬性」文件夾包含Resources.resx,其中定義了字符串ValidationFailedMsg(例如「驗證失敗!」),並從中生成Resources.Designer.cs文件。
現在讓我們來運行這個東西。這裏是發生了什麼:
System.IO.FileNotFoundException:未能加載文件或程序集「MyAssembly.resources ....
對不起,有什麼文件???
首先,我理解二進制文件.resource的概念以及如何爲許多文化創建許多這樣的文件,但讓我們先讓一個默認文化工作。從該項目的.NET 2.0到3.5兼容版本,所有的字符串都被嵌入到程序集本身中,所以除了MyAssembly.dll外,框架甚至都沒有找到它們。 我怎樣才能讓它看起來大會,而不是看別的?
其次,我注意到一個.resource文件中的項目的bin \ Debug目錄,但它的命名MyAssembly.Properties.Resources.resources,不MyAssembly.resources和的MSBuild不把它複製到BIN \調試或其他地方MyAssembly被引用。這是對這裏可能會出錯的有用提示嗎?第三,我可以在Visual Studio 2010中打開一個新的空項目,在屬性下添加Resources.resx,在其中放置一個字符串,在代碼中將其引用爲TestProject.Properties.Resources.String1,編譯並運行像魅力。但在舊項目中,即使使用字符串讀取Resource.resx也無濟於事。
你能解釋爲什麼.NET 4.0將這些字符串編譯到一個地方,然後在不同的地方尋找它們,導致FileNotFoundException?將.NET 3.5與此類嵌入式字符串資源兼容的程序集遷移到.NET 4.0的正確方法是什麼?