今天在測試一個工程的時候,突然遇到了這樣一個問題: 錯誤信息:System.Resources.MissingManifestResourceException: 未能找到任何適合於指定的區域或非特定區域性的資源。請確保在編譯時已將“****.****.Resource.resources”正確嵌入或鏈接到程序集"****",或者確保所有需要的附屬程序集都可加載並已進行了完全簽名。
在網上搜索了N久都沒看到幾篇解決的文章,最后在不懈的努力下終於解決了,所以決定寫下解決方法方便以后遇到同樣問題的朋友: 其實這個錯誤的主要問題就是沒有找到需要的資源文件(該文件為Resources.resx), 引用該文件的地方就是 System.Resources.ResourceManager manager = new System.Resources.ResourceManager("×××.Resources", typeof(Resources).Assembly); 而導致錯誤的原因就是"×××.Resources"的配置錯誤
解決方法:首先查看工程中時候存在Resources.resx相關的文件, 找到它在工程中的位置(不如說一般都是在:工程名.Properties 命名空間下), 最后更改配置為new System.Resources.ResourceManager("工程名.Properties.Resources", typeof(Resources).Assembly);
續: 我這里在舉個詳細的例子,以便能夠更明白哈 首先,一個容器(不管是Form,或是Panel也好),如果與其配套一個資源文件(以后綴名為.resx),則這2個文件應是在同一個命名空間下,才能相互使用 舉個最特殊的例子 比如說一個工程名叫Test.Tname 其下有一個文件夾叫aaa(文件夾名字隨便,沒有關系) 文件夾aaa下有一個類文件叫Form1.cs,其命名空間為:Test.Tname(注意:命名空間才是重要的位置信息) 現在也有一個資源文件叫Form1.resx (默認此資源文件是沒有問題的,但是在特別的情況下,此文件就不會再正確的位置,導致出現如題的異常信息,比如說我反編譯一個工程,自動生成的資源文件的位置就有問題)。 在Form1.cs中有句代碼是需要資源文件的 ResourceManager manager = new ResourceManager(typeof(Test.Tname.Form1)); 這里就注意了,如果Form1.cs類文件與Form1.resx資源文件是分開的話, 那么Form1.resx資源文件應放在哪個地方,程序才能找到他呢? 首先我們看哈Form1.cs類文件的命名空間為Test.Tname。 而資源文件Form1.resx中並沒有命名空間的描述,所以只有靠位置來表示 再看下我們的工程名稱:Test.Tname很好,它跟Form1.cs類文件的命名空間相同 所以我們就把Form1.resx資源文件放在工程的根目錄下面 問題解決了,呵呵 其實我覺得最重要的問題就是類文件中可以有namespace來描述位置 而資源文件中並沒有這行代碼,只能靠真正的位置,這才是關鍵。