15

我開發了Windows Phone 8.1的應用程序,還針對安卓(Xamarin)MissingManifestResourceException在Windows Phone 8.1的.resx資源

一如以往我說我的字符串資源(的.resx)在PCL和引用它們我的啓動項目使用它在我的意見,這一切工作正常WP 8.1 silverlight,但在WinRt,當我配置項目發佈並在設備上運行它,出於某種原因,我總是得到一個MissingManifestResourceException。我已經嘗試過針對這個問題的每個解決方案,沒有任何成功。

請注意,在仿真器上一切正常,當解決方案配置器設置爲調試時,它也適用於設備和仿真器。這裏唯一的組合是設備和發佈。

該應用程序源代碼位於Github

我能夠創建一個簡單的項目複製這個問題,基本上它是一個WP 8.1的應用程序和PCL項目與嵌入式資源,Download Link

任何人有任何想法?

編輯:在做了一些更多的測試後,我嘗試運行一箇舊的Windows 8.1應用程序,我已經用相同的本地化模型完成了相同的問題,所以它接縫成爲工具問題而不是配置問題, Windows 8.1應用程序在市場上,一切都很順利。

+0

我想你應該本地化/全球化就像在Windows應用商店中的應用程序,而不是像我們在WP8.0做......你應該使用資源。 resw文件將被轉換爲pri,這將被加載。 – saramgsilva 2014-10-01 13:09:06

+0

問題是,我的便攜式視圖模型使用資源文件,更改爲resw將意味着我的應用程序的其他模塊無法使用任何全球化資源,而無需花費大量精力來抽象資源。 – DVD 2014-10-01 13:13:07

+0

我使用DI來定義位置服務和本地化的資源...並不複雜 – saramgsilva 2014-10-01 13:34:30

回答

11

我們的團隊遇到了一個類似的問題,它被追蹤到運行時而不是PCL,WinRT組件或應用程序包。也就是說,資源存在於PCL程序集內的應用程序包resources.pri文件中,但在運行時無法找到。

有一個活動的Microsoft連接報告在這裏:

https://connect.microsoft.com/VisualStudio/feedback/details/991028/issue-using-resx-files-on-winrt-apps-windows-phone-and-windows

我們的解決方法是爲WinRT的組件注入到每個生成的資源類中的每個引用PCL我們自己得出的ResourceManager的其中將呼叫重定向到改爲WinRT ResourceLoader。我已經寫了描述變通博客文章:

http://blogs.msdn.com/b/philliphoff/archive/2014/11/19/missingmanifestresourceexception-when-using-portable-class-libraries-in-winrt.aspx

+0

感謝您的回覆。你的解決方案完美(win8和wp8.1);)。 MS連接報告實際上來自我也lool。有一件事仍然困擾着我,他們改變了這個錯誤彈出窗口。我必須對所有舊Win 8.1應用程序執行此解決方法......再次感謝! – DVD 2014-11-24 17:39:32

0

我有同樣的行爲。今天,我創建了一個新的PCL庫(帶有另一個名稱),並將resx文件複製到此項目中。我修改了所有引用,並且現在在我的WinRt(Windows應用商店)應用程序中一切正常。

便攜式類庫名稱中有字符串'resources'。也許這是問題!

+0

不是這樣,因爲在這裏我可以複製創建新項目和解決方案的問題。請重新檢查它,有時它會在第一時間運行,但隨後會出現相同的錯誤;)。我結束了在http://social.msdn.microsoft.com/Forums/windowsapps/en-US/ea01b44b-f0d5-4ed1-a044-93cddfe88941/missingmanifestresourceexception-on-windows-phone-81-with-resx上提交問題-resources?forum = wpdevelop – DVD 2014-10-06 14:35:01

+0

它仍然適用於我的Windows應用商店。不知道爲什麼這不起作用。 – 2014-10-08 05:42:27

+0

你能告訴我你的vs環境嗎? – DVD 2014-10-08 09:03:58

0

我能夠重現此問題啓動DVD示例,不幸的是在我的項目。我有一個WP Silverlight 8.1項目註冊Windows運行時組件後臺任務,並且他們都使用可移植類庫共享一些通用的本地化字符串作爲資源(.resx)等等。調用任何屬性以獲取生成的.Design.cs類(僅限Release和Device)上的字符串時,Background Task會引發異常。

爲了解決這個問題,我試着直接使用ResourceManager和/或將.resx文件直接添加到後臺任務中。

我結束了將需要的字符串移植到.resw文件,並通過後臺任務項目中的Windows.ApplicationModel.Resources.ResourceLoader使用new "WinRT preferred" way

在我看來,ResourceManager與Windows Runtime不再兼容。

這不是必要的答案,但勝於無,因爲我沒有50個評論點。

+0

嗨,感謝張貼,我試圖避免,因爲它會打破我以前的所有Windows 8項目,但新的,我會開始我一定會使用resw來避免更多的浪費時間。 – DVD 2014-10-13 14:28:05

9

今天我已經到了這個底部。在捆綁應用程序包時,剝離了不適用於應用程序使用的語言的依賴項中的資源。爲防止發生這種情況,請將以下程序集級屬性添加到您的應用程序中。

using System.Resources; 

[assembly: NeutralResourcesLanguage("en")] 
+0

先試試這個更簡單的解決方案。這對我有效。 – ezaspi 2015-10-28 12:21:18

+0

供參考:不要忘記將PCL的中性語言設置爲相同,否則此解決方案將無法工作。您可以通過修改PCL的AssemblyInfo.cs並添加以下行來完成此操作:[assembly:NeutralResourcesLanguage(「en」)]。或右鍵單擊項目 - >屬性 - >庫 - >程序集信息 - >中性語言。 http://imgur.com/XPEojAP – Roosevelt 2016-03-03 17:38:54

+0

對於像我這樣的人,從Xamarin.Forms應用程序創建UWP應用程序並使用PCL來獲取字符串資源,這就是要走的路。謝謝你,在這個失去了好幾個小時之後,我做了一天。 – Theos 2016-05-26 08:30:28