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 точек репутации для комментария.