Ситуация:
- У меня есть библиотека классов, которая
RT.Servers
содержит несколько ресурсов (типаbyte[]
, но я не думаю, что это важно) - Та же библиотека классов содержит метод, который возвращает один из этих ресурсов
- У меня есть простая программа (со ссылкой на эту библиотеку), которая вызывает только этот единственный метод
Я получаю MissingManifestResourceException
со следующим сообщением:
Не удалось найти ресурсы, подходящие для указанной культуры или нейтральной культуры. Убедитесь, что «Servers.Resources.resources» был правильно встроен или связан со сборкой «RT.Servers» во время компиляции, или что все требуемые сателлитные сборки являются загружаемыми и полностью подписаны.
Я никогда не играл с культурами или с подписанием собрания, поэтому я не знаю, что здесь происходит. Кроме того, это работает в другом проекте, который использует ту же библиотеку. Любые идеи?
Ответы:
Все, что мне нужно было сделать, чтобы решить эту проблему, - это щелкнуть правой кнопкой мыши
Resources.resx
файл в обозревателе решений и выбрать « Запустить пользовательский инструмент» . Это повторно генерирует автоматически сгенерированныйResources.Designer.cs
файл.Если файл .resx был добавлен в проект вручную, то для свойства Custom Tool этого файла должно быть установлено значение «ResXFileCodeGenerator».
Проблема связана с несовпадением пространств имен, которое возникает при изменении «пространства имен по умолчанию» сборки в настройках проекта. (Я изменил его с (ранее)
"Servers"
на (сейчас)"RT.Servers"
.)В автоматически сгенерированном коде
Resources.Designer.cs
есть следующий код:Буквенная строка
"Servers.Resources"
должна быть изменена на"RT.Servers.Resources"
. Я сделал это вручную, но запустив пользовательский инструмент, все равно было бы хорошо.источник
Я только что столкнулся с этой проблемой сегодня, и я нашел эту страницу справки и поддержки Microsoft, которая действительно обошла проблему.
У меня была пара делегатов в верхней части моего файла, в глобальном пространстве имен, и внезапно я получил
MissingManifestResourceException
при запуске программы следующую строку:Затем я переместил делегатов в пространство имен, получил ту же ошибку. Наконец, я поместил делегатов в единственный класс в этом файле, и ошибка исчезла, но я не хотел, чтобы делегаты в этом классе или пространстве имен.
Потом я наткнулся на ссылку выше, где
Я поместил делегатов (которые я бы не рассматривал как «определения классов») внизу этого файла, вне локального пространства имен, и программа больше не получала
MissingManifestResourceException
. Какая раздражающая ошибка. Но это кажется более надежным решением, чем изменение автоматически сгенерированного кода :)источник
Я столкнулся с подобной проблемой, и, хотя я знаю, что это не причина, по которой OP, я опубликую ее здесь, так что если кто-то еще столкнется с этой проблемой в будущем, ответ будет доступен.
Если вы добавите класс перед классом конструктора, вы получите
MissingManifestResourceException
исключение во время выполнения (без ошибок или предупреждений во время компиляции), потому чтоДля (немного) дополнительной информации см. Этот пост .
источник
У меня была такая же проблема, но с помощью Run пользовательского инструмента команду , как предложено Timwi не помочь в моем случае.
Однако это привело меня в правильном направлении, потому что я оказался в свойствах этого .resx файла. Здесь я заметил разницу с другим файлом .resx, который не вызвал проблем.
В моем случае мне пришлось изменить свойство «Build Action» с «Resource» на «Embedded Resource».
Моя лучшая догадка по той причине, что у меня был .resx в библиотеке, которая использовалась из другого приложения. У моего приложения не было своего собственного файла .resx , поэтому он должен был использовать файл из библиотеки - который доступен только тогда, когда он встроен в библиотеку, а не «автономен».
источник
Когда я запустил аналогичную проблему, в Vs 2012 оказалось, что свойство «Пространство имен пользовательских инструментов» файла resx было неправильным (в моем случае, на самом деле, оно не было установлено, поэтому сгенерированный код выдает это исключение во время выполнения) , Мой последний набор свойств для файла resx был примерно таким:
источник
Также смотрите: MissingManifestResourceException при запуске тестов после сборки с MSBuild (.mresource имеет путь в манифесте)
Я повторяю ответ здесь только для полноты:
Кажется, добавление LogicalName в файл проекта исправляет это:
То есть встроенная запись ресурса в файле проекта выглядит следующим образом:
Это подробно описано в: http://blogs.msdn.com/b/msbuild/archive/2007/10/19/manifest-resource-names-changed-for-resources-files.aspx
Обратите внимание, что мы используем файл .resx, но ошибка все еще появляется.
Обновление: проблема с ресурсами (включая XAML), по-видимому, связана с путями вывода и использованием прямой или обратной косой черты, как подробно описано в разделе: Почему изменение выходных каталогов проекта вызывает: исключение IOException "Невозможно найти ресурс" app.xaml " «.
источник
Я столкнулся с другой причиной этой проблемы, которая не была связана с файлами resx. У меня была библиотека классов, где AssemblyInfo.cs содержал следующее:
Сборка не содержала кодов WPF, тем или словарей ресурсов. Я избавился от исключения, удалив атрибут ThemeInfo.
Я не получил фактическое исключение, только
При просмотре информации об исключении система запрашивала MyAssembly.g.resources
Надеюсь, что это может помочь кому-то еще.
источник
Не уверен, что это поможет людям, но этот работал для меня:
Итак, проблема, с которой я столкнулся, заключалась в том, что я получал следующее сообщение:
Я пытался получить ресурсы, встроенные в мой проект, из другой библиотеки классов.
Чтобы устранить проблему, я установил модификатор доступа на вкладке «Проект-> Свойства-> Ресурсы» из «Внутренний» (доступный только в одной библиотеке классов) в «Открытый» (доступный из другой библиотеки классов).
Тогда беги и вуаля, больше нет ошибки для меня ...
источник
Решение, данное BlaM, сработало и для меня.
Я пользователь VS 2013 Пройдя много исправлений, но не повезло, я попробовал это:
Это оно! :)
источник
У меня была такая же проблема, но в моем случае я помещаю класс в usercontrol, который связан с usercontrol следующим образом
Решение состояло в том, чтобы переместить в
MyUserControlObject
конец класса Usercontrol, как этонадеюсь, это поможет
источник
Я получал ошибку MissingManifestResourceException после того, как перенес свой проект с VS2005 на VS2010. У меня не было никаких других классов, определенных в файле, который содержит мой класс Form. И у меня также было правильно установлено имя файла Resx Resx. Не сработало
Поэтому я удалил файлы resx и восстановил их. Все хорошо сейчас.
источник
Недавно столкнулся с той же проблемой, немного боролся, нашел эту тему, но ответы не были правильными для меня.
Моя проблема заключалась в том, что когда я удалил главное окно из своего проекта WPF (у него нет главного окна), я забыл удалить
StartupUri
изApp.xaml
. Я предполагаю , что это исключение может произойти , если есть ошибка вStartupUri
, так что в случае , если кто -то борется с этим - проверитьStartupUri
по прибытииApp.xaml
.источник
Недавно наткнулся на эту проблему, в моем случае я сделал несколько вещей:
Убедитесь, что пространства имен согласованы в файле Designer.cs файла resx
Убедитесь, что пространство имен по умолчанию для сборки (щелкните правой кнопкой мыши по проекту и выберите «Свойства»), совпадает с пространством имен, в котором находится файл ресурсов.
Как только я сделал шаг 2, исключение ушло.
источник
У меня была эта проблема, когда я добавил еще один класс в файл перед классом, производным от Form. Добавление его после исправленной проблемы.
источник
Также та же ошибка может возникать, когда вы помещаете новый класс в исходный код класса формы, созданной дизайнером.
Этот новый класс может быть удален и помещен в другой файл CS.
(По крайней мере, в моем случае это была проблема ...)
источник
Потому что я предварительно компилирую свое веб-приложение (используя функцию публикации VS2012). Я получил ошибку выше. Я перепробовал все предложения, но странное изменение «Build Action» на «Content» помогло!
источник
В моем случае у меня есть веб-API с ресурсами, и я создаю пакет Nuget из этого. Когда я использую этот nuget в других проектах, я понимаю, что, когда я запрашиваю API с ресурсами, я получаю
MissingManifestResourceException
после некоторого повторного исследования, я узнаю, что Nuget Packager не упаковывает ресурсы автоматически. Если вы хотите использовать файлы ресурсов, вы должны сделать это вручную. Поэтому вам нужно добавить следующие строки в ваш файл .nuspec: (Посетите https://github.com/NuGet/Home/issues/1482 ).Но, прежде чем добавлять файлы, вы должны быть уверены, какую версию .net вы используете.
источник
У меня был недавно созданный проект F #. Решением было снять флажок «Использовать стандартные имена ресурсов» в свойствах проекта -> Приложение -> Ресурсы / Указать, как будут управляться ресурсы приложения. Если вы не видите флажок, обновите Visual Studio! У меня установлена 15.6.7. В 15.3.2 этого флажка нет.
источник
Просто чтобы упомянуть. Если вы используете константу или литерал, убедитесь, что они ссылаются на ресурс формы
ProjectName.Resources
и не содержатResources.resx
.Это может сэкономить вам час или два.
источник
Я столкнулся с этой проблемой в управляемом проекте C ++ на основе WinForms после переименования глобального пространства имен (не вручную, а с помощью инструмента Rename VS2017).
Решение простое, но нигде не упоминается.
Вы должны изменить
RootNamespace
запись в vcxproj-файле, чтобы она соответствовала пространству имен C ++.источник
В моем случае это была опечатка в Xaml окна, открытого из формы Winforms:
Неправильно:
<Image Source="/Resources/WorkGreen.gif"/>
Правильно:
<Image Source="../Resources/WorkGreen.gif"/>
это может кому-то помочьисточник
Со страницы поддержки Microsoft :
Чтобы обойти эту проблему, укажите имя файла .resources при запуске Resgen.exe. Указывая имя файла .resources, убедитесь, что имя файла начинается с имени пространства имен вашего приложения. Например, выполните следующую команду в командной строке Microsoft Visual Studio .NET, чтобы создать файл .resources с именем пространства имен вашего приложения в начале имени файла:
источник