MissingManifestResourceException на Windows Phone 8.1 с ресурсами .resx
Я разрабатываю приложение Windows Phone 8.1, которое также предназначено для Android (Xamarin)
Как всегда, я добавлял свои строковые ресурсы (.resx) в PCL и ссылался на них в моем проекте запуска, чтобы использовать его в своих представлениях, все это отлично работает на WP 8.1 silverlight, но на WinRt, когда я настраиваю проект на выпуск и запустить его на устройстве, по какой-то причине я всегда получаю исключение MissingManifestResourceException. Я пробовал каждое решение для этой проблемы без каких-либо успехов.
Обратите внимание, что на эмуляторе все работает нормально, когда для конфигуратора решений установлено значение "Отладка", он также работает как на устройстве, так и на эмуляторе. Единственная комбинация здесь - устройство и Release.
Исходный код приложения находится на Github.
Мне удалось создать простой проект для репликации этой проблемы, в основном это приложение WP 8.1 и проект PCL со встроенными ресурсами, Ссылка на скачивание
У кого-нибудь есть идеи?
EDIT: после некоторого тестирования я попытался запустить старое приложение Windows 8.1, которое я сделал с той же моделью локализации, и возникла такая же проблема, что и швы, и это проблема с инструментом, а не проблема с конфигурацией, поскольку Windows 8.1 приложение находится на рынке, и все прошло хорошо.
Ответы
Ответ 1
Наша команда столкнулась с аналогичной проблемой, которая была отслежена до среды выполнения, а не с компонентом PCL, WinRT или пакетом приложений. То есть ресурсы существуют в сборке PCL, в файле resource.pri пакета приложения, но просто не могут быть найдены во время выполнения.
Здесь есть активный отчет Microsoft Connect:
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
Ответ 2
Я дошел до сегодняшнего дня. При наборе пакета приложений ресурсы в зависимостях, которые не используются для языка, используемого приложением, удаляются. Чтобы этого не произошло, добавьте в приложение следующий атрибут уровня сборки.
using System.Resources;
[assembly: NeutralResourcesLanguage("en")]
Ответ 3
У меня было такое же поведение. Сегодня я создал новую библиотеку PCL (с другим именем) и скопировал файл resx в этот проект. Я изменил все ссылки, и все просто отлично работает в моем приложении WinRt (Windows Store) прямо сейчас!
В имени переносимой библиотеки классов была строка "resources". Возможно, это была проблема!
Ответ 4
Я могу воспроизвести эту проблему с запуском DVD-диска и, к сожалению, в моем проекте. У меня есть проект WP Silverlight 8.1, который регистрирует фоновое задание компонента Windows Runtime, и оба из них используют портативную библиотеку классов, совместно использующую некоторые распространенные локализованные строки в качестве ресурсов (.resx). Исключение выбрано из фоновой задачи при вызове любого свойства, чтобы получить строки в сгенерированном классе .Design.cs(только Release + Device).
Чтобы исправить это, я безуспешно пытался напрямую использовать ResourceManager и/или добавлять файлы .resx непосредственно в фоновую задачу.
Я закончил перенос необходимых строк в .resw файлы и использовал новый "предпочтительный" способ WinRT через Windows.ApplicationModel.Resources.ResourceLoader в проекте "Фоновая задача".
Мне кажется, что ResourceManager больше не совместим с Windows Runtime в выпуске.
Это не обязательно ответ, но лучше, чем ничего, поскольку у меня нет 50 точек репутации для комментария.