Не удалось найти какие-либо ресурсы, подходящие для указанной культуры или нейтральной культуры - PullRequest
172 голосов
/ 13 января 2010

У меня есть два веб-проекта ASP.NET (ProjectA и ProjectB). Когда класс в ProjectA создает экземпляр класса ProjectB, который использует файл ресурсов Blah.resx, я получаю эту ошибку:

Исключение типа 'System.Resources.MissingManifestResourceException' произошло в mscorlib.dll, но не было обработано в коде пользователя.

Не удалось найти ресурсы, подходящие для указанной культуры или нейтральной культуры. Убедитесь, что «Resources.Blah.resources» был правильно встроен или связан со сборкой «App_GlobalResources.sn_flri6» во время компиляции, или что все требуемые спутниковые сборки загружаются и полностью подписаны.

Что вызвало это?

На сайте Microsoft есть статья об этом http://support.microsoft.com/kb/318603, в которой предлагается:

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

Это решение для проекта Windows Forms, я не уверен, относится ли это также к веб-проектам.

Ответы [ 26 ]

235 голосов
/ 11 мая 2011

Я только что столкнулся с тем же исключением в проекте WPF. Проблема возникла в сборке, которую мы недавно переместили в другое пространство имен (от ProblemAssembly.Support до ProblemAssembly.Controls). Возникла исключительная ситуация при попытке доступа к ресурсам из второго файла ресурсов, существующего в сборке.

Оказывается, файл дополнительного ресурса неправильно перемещал ссылки из старого имени пространства имен в новое имя пространства имен.

В файле designer.cs для файла ресурсов есть статическое свойство для получения ResourceManager. В этом получателе строка все еще ссылалась на старое пространство имен. После исправления в новом пространстве имен проблема была решена:

global::System.Resources.ResourceManager temp = 
     new global::System.Resources.ResourceManager(
          "ProblemAssembly.Support.Properties.Stuff", typeof(Stuff).Assembly);

должно было быть:

global::System.Resources.ResourceManager temp = 
     new global::System.Resources.ResourceManager(
          "ProblemAssembly.Controls.Properties.Stuff", typeof(Stuff).Assembly);

Надеюсь, это поможет следующему человеку.

109 голосов
/ 08 августа 2012

Я решил проблему следующим образом:

  1. Щелкните правой кнопкой мыши по вашему ResourceFile
  2. Изменить свойство "Build Action" Compile на "Embedded Resource"
  3. Затем соберите и запустите

Работает отлично.

21 голосов
/ 13 июля 2013

Когда я попытался поделиться файлом resource.resx из одного проекта C # с другим проектом C #, у меня возникла эта проблема. Предложение о переносе класса Form в начало его файла было неуместным. Вот как я это решил. По сути, вы используете ссылку из второго проекта на первый, а затем включаете восстановление файла resource.designer.cs.

  1. Удалить файл Properties/Resources.resx второго проекта
  2. Добавьте файл Properties/Resources.resx первого проекта в качестве ССЫЛКИ на папку Свойства во втором проекте. Не добавляйте его на корневой уровень проекта.
  3. Не добавлять первый проект Properties/Resources.designer.cs!
  4. В свойствах Resources.resx второго проекта добавьте ResXFileCodeGenerator как CustomTool
  5. Щелкните правой кнопкой мыши Resources.resx и выберите «Запустить пользовательский инструмент». Это создаст новый файл designer.cs.

Примечание. Я бы не стал редактировать файл resource.designer.cs, так как он создается автоматически.

12 голосов
/ 07 апреля 2016

В моем случае ряд неправильно продуманных глобальных замен текста непреднамеренно изменил эту строку в файле cs конструктора ресурсов.

enter image description here

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

Убедитесь, что пространство имен конструктора соответствует строковому аргументу в этой строке.

10 голосов
/ 09 декабря 2016

Это происходит потому, что *.resх исключен из миграции.

  • Щелкните правой кнопкой мыши по вашему ResourceFile
  • Нажмите на пункт меню «Включить в проект»
7 голосов
/ 01 октября 2013

Я обнаружил, что удаление файла designer.cs, исключая файл resx из проекта, а затем его повторное включение часто устраняет проблему такого рода после рефакторинга пространства имен (согласно ответу CFinck)

5 голосов
/ 17 августа 2018

Никто, кажется, не упомянул это решение.Конечно, на самом деле - но я на мгновение споткнулся ...

Модификатор доступа по умолчанию для нового файла ресурсов - Internal (или Friend в VB.Net.) Убедитесь, что вы изменили это на Public

(в конструкторе resx вверху есть раскрывающийся список для модификатора доступа)

3 голосов
/ 05 августа 2016

Одного ответа Сиби Эланго мне было недостаточно, поэтому мне пришлось

  • Щелкните правой кнопкой мыши свой ResourceFile
  • Измените свойство "Build Action"
  • Скомпилируйте в «Embedded Resource»
  • Создайте и разверните

Это создаст App_GlobalResources в вашей папке /bin, теперь скопируйте эту папку также в корневойвеб-приложения

3 голосов
/ 08 февраля 2018

В моем случае проблема, вызванная неправильным определением класса:

namespace MyBuggyWorld
{
    public class BackendObject //This hack broke the VS 2017 winform designer and resources linker!
    {
        public TcpClient ActiveClient { get; set; }
        public BackgroundWorker ActiveWorker { get; set; }
    }
    public partial class FormMain : Form
    {
    }
}

После перераспределения BackendObject до конца (лучше разделить файл) выполнение команды clean + rebuild решило проблему.

2 голосов
/ 08 февраля 2010

Один из подходов - поместить общие классы / ресурсы в отдельный проект библиотеки классов и сослаться на них на обоих веб-сайтах.

...