Что означает MissingManifestResourceException и как это исправить? - PullRequest
140 голосов
/ 25 августа 2009

Ситуация:

  • У меня есть библиотека классов, которая называется RT.Servers и содержит несколько ресурсов (типа byte[], но я не считаю это важным)
  • В той же библиотеке классов есть метод, который возвращает один из этих ресурсов
  • У меня есть простая программа (со ссылкой на эту библиотеку), которая вызывает только этот единственный метод

Я получаю MissingManifestResourceException со следующим сообщением:

Не удалось найти ресурсы подходит для указанной культуры или нейтральная культура. Удостовериться "Servers.Resources.resources" был правильно встроен или связан с сборка "RT.Servers" во время компиляции, или что все спутниковые сборки Требуются загружаемые и полностью подписан.

Я никогда не играл с культурами или с подписанием сборок, поэтому я не знаю, что здесь происходит. Кроме того, это работает в другом проекте, который использует ту же библиотеку. Есть идеи?

Ответы [ 19 ]

1 голос
/ 26 января 2018

Недавно наткнулся на эту проблему, в моем случае я сделал несколько вещей:

  1. Убедитесь, что пространства имен согласованы в файле Designer.cs файла resx

  2. Убедитесь, что пространство имен по умолчанию для сборки (щелкните правой кнопкой мыши проект и выберите Свойства) установлено так же, как пространство имен, в котором находится файл ресурсов.

Как только я сделал шаг 2, исключение ушло.

1 голос
/ 08 января 2016

Недавно столкнулся с той же проблемой, немного боролся, нашел эту тему, но ответы для меня не были правильными.

Моя проблема заключалась в том, что когда я удалил главное окно из своего проекта WPF (у него нет главного окна), я забыл удалить StartupUri из App.xaml. Я предполагаю, что это исключение может произойти, если у вас есть ошибка в StartupUri, поэтому, если кто-то с этим борется - проверьте ваш StartupUri в App.xaml.

1 голос
/ 08 апреля 2011

Я получал ошибку MissingManifestResourceException после того, как перенес свой проект из VS2005 в VS2010. У меня не было никаких других классов, определенных в файле, который содержит мой класс Form. И у меня также было правильно установлено имя файла Resx Resx. Не сработало.

Итак, я удалил файлы resx и восстановил их. Все хорошо сейчас.

0 голосов
/ 27 апреля 2018

У меня был недавно созданный проект F #. Решением было снять флажок «Использовать стандартные имена ресурсов» в свойствах проекта -> Приложение -> Ресурсы / Указать, как будут управляться ресурсы приложения. Если вы не видите флажок, обновите Visual Studio! У меня установлена ​​15.6.7. В 15.3.2 этого флажка нет.

0 голосов
/ 24 января 2018

В моем случае у меня есть веб-API с ресурсами, и я создаю пакет nuget из этого. Когда я использую этот nuget в других проектах, я понимаю, что когда я запрашиваю API с ресурсами, я получаю MissingManifestResourceException после небольшого повторного поиска, я узнаю, что nuget Packager не упаковывает ресурсы автоматически. Если вы хотите использовать файлы ресурсов, вы должны сделать это вручную. Поэтому вам нужно добавить следующие строки в ваш файл .nuspec: (Посетите https://github.com/NuGet/Home/issues/1482)

<package> 
    <metadata>
    </metadata>
    <files>
        <file src="bin\Debug\en\MyAssembly.resource.dll" target="lib\net40\en\MyAssembly.resource.dll" />
        <file src="bin\Debug\es\MyAssembly.resource.dll" target="lib\net40\es\MyAssembly.resource.dll" />
    </files>
</package>

Но, прежде чем добавлять файлы, вам необходимо убедиться, какую версию .net вы используете.

0 голосов
/ 29 апреля 2013

Поскольку я предварительно компилирую свое веб-приложение (используя функцию публикации VS2012). Я получил ошибку выше. Я перепробовал все предложения, но странное изменение «Build Action» на «Content» помогло!

0 голосов
/ 06 мая 2019

У меня возникла эта проблема, когда я добавил другой класс в файл непосредственно перед классом, производным от Form. Добавление его после исправленной проблемы.

0 голосов
/ 08 мая 2019

Просто чтобы упомянуть. Если вы используете константу или литерал, убедитесь, что они ссылаются на ресурс вида ProjectName.Resources и не содержат Resources.resx.

Это может сэкономить вам час или два.

0 голосов
/ 25 августа 2009

С страница поддержки Microsoft :

Эта проблема возникает, если вы используете локализованный ресурс, который существует в сателлитной сборке, созданной вами с использованием файла .resources с неправильным именем файла. Эта проблема обычно возникает, если вы вручную создаете вспомогательную сборку.

Чтобы обойти эту проблему, укажите имя файла .resources при запуске Resgen.exe. Пока вы указываете имя файла .resources, убедитесь, что имя файла начинается с имени пространства имен вашего приложения. Например, выполните следующую команду в командной строке Microsoft Visual Studio .NET, чтобы создать файл .resources с именем пространства имен вашего приложения в начале имени файла:

Resgen strings.CultureIdentifier.resx 
MyApp.strings.CultureIdentifier.resources
...