Не удалось найти какие-либо ресурсы, подходящие для указанной культуры или нейтральной культуры - 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 ]

2 голосов
/ 18 декабря 2014

В этом случае проверьте, имеет ли сборка, содержащая ресурсы, пространство имен по умолчанию, установленное на тот же текст (Project-> Properties-> Space namespace; в VS) Также проверьте, имеет ли файл resx свойство BuildAction, установленное на «Встроенный ресурс». Наслаждайтесь ...;)

2 голосов
/ 28 апреля 2018

Я решил эту проблему, перейдя в проект, где был сохранен мой файл ресурсов, прокрутив вниз до его ItemGroup и добавив логическое имя, которое соответствует пути, ожидаемому компилятором.

Мой EmbeddedResource выглядел так:

   <ItemGroup>
    <EmbeddedResource Update="Properties\TextResources.resx">
      <Generator>PublicResXFileCodeGenerator</Generator>
      <LastGenOutput>TextResources.Designer.cs</LastGenOutput>
    </EmbeddedResource>
  </ItemGroup>

Теперь это выглядит так

  <ItemGroup>
    <EmbeddedResource Update="Properties\TextResources.resx">
      <Generator>PublicResXFileCodeGenerator</Generator>
      <LastGenOutput>TextResources.Designer.cs</LastGenOutput>
      <LogicalName>MyProject.Properties.Resources.resources</LogicalName>
    </EmbeddedResource>
  </ItemGroup>
2 голосов
/ 11 ноября 2011

Спасибо @CFinck! Просто чтобы добавить совет другим: я изменил строку ResourceManager следующим образом:

New Global.System.Resources.ResourceManager(Reflection.Assembly.GetCallingAssembly.GetName.Name & ".CommonNameOf.Resources", Reflection.Assembly.GetCallingAssembly())

Я нахожусь на vb.net, но я думаю, что в C # единственной разницей было бы + вместо & для объединения строк.

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

1 голос
/ 11 июня 2014

У меня есть приложение WinForms с одним проектом в решении.
Таргетинг .NET Framework 4.0
Использование SharpDevelop 4.3 в качестве моей IDE

Звучит глупо, но в моем файле "Resources.resx" для свойства Logical Name установлено значение "Resources". Как только я очистил это имущество, все работает в порядке.

Обычно, когда вы добавляете случайные файлы как EmbeddedResource, вы обычно хотите установить Logical Name на что-то разумное, по какой-то причине я сделал то же самое с файлом Resources.resx, и это все испортило ... .

Надеюсь, это кому-нибудь поможет.

1 голос
/ 30 мая 2013

Когда мы использовали

HttpContext.GetGlobalResourceObject()

Это сгенерирует эту ошибку, если мы не заключим этот вызов в оператор try / catch.

1 голос
/ 21 сентября 2012

Эта ошибка также возникает в Dotfuscation, поскольку файл конструктора resx зависит от отражения. Если вы используете Dotfuscator, он сломает ваши файлы resx. Вы должны всегда добавлять их как исключение из процесса запутывания.

1 голос
/ 01 апреля 2015

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

Наконец решил, когда заметил в обозревателе решений, что в исходном проекте файлы .resx зависели от файлов .cs:

MyResource.cs
|_ MyResource.resx

В то время как в скопированном проекте файлы .cs зависели от файлов .resx:

MyResource.resx
|_ MyResource.cs

Оказалось, что во втором проекте каким-то образом были установлены файлы .resx для автоматической генерации файлов .cs. Сгенерированные автоматически файлы .cs перезаписывают файлы .cs, скопированные из исходного проекта.

Чтобы исправить проблему, отредактируйте свойства каждого файла .resx в скопированном проекте. Свойству Custom Tool будет присвоено значение, подобное ResXFileCodeGenerator . Очистите свойство Custom Tool файла .resx. Вам нужно будет повторно скопировать файл .cs из исходного проекта, поскольку он будет перезаписан автоматически созданным файлом.

0 голосов
/ 04 мая 2018

Это также может происходить при размещении класса над основным классом winform (например, Form1). Вы можете увидеть это, когда посмотрите на дизайн, так как он не отображается.

0 голосов
/ 10 сентября 2015

Двойной клик Свойства в разделе Приложения отметьте Имя сборки и Пространство имен по умолчанию совпадают

0 голосов
/ 15 сентября 2014

В моем случае эти строки кода, добавленные к Web.config, очень помогли:

<system.web>
     ...
    <globalization uiCulture="cs" culture="cs-CZ" />
     ...
<system.web>

Вместе с действием «Сборка»: Embedded Resource и пользовательским инструментом: PublicResXFileCodeGenerator.

...