У меня есть два веб-проекта 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, я не уверен, относится ли это также к веб-проектам.
источник
To resolve this problem, move all of the other class definitions so that they appear after the form's class definition.
это решил мою проблему.GetGlobalResourceObject
Ответы:
Я просто ударил это же исключение в проекте WPF. Проблема возникла в сборке, которую мы недавно переместили в другое пространство имен (
ProblemAssembly.Support
вProblemAssembly.Controls
). Исключение происходило при попытке доступа к ресурсам из второго файла ресурсов, который существует в сборке.Оказывается, файл дополнительного ресурса неправильно переместил ссылки из старого имени пространства имен в новое имя пространства имен.
В файле designer.cs для файла ресурсов есть статическое свойство для получения ResourceManager. В этом получателе строка все еще ссылалась на старое пространство имен. После исправления в новом пространстве имен проблема была решена:
должно было:
Надеюсь, это поможет следующему человеку.
источник
Я решил проблему следующим образом:
Работает отлично.
источник
Когда я попытался поделиться файлом resource.resx из одного проекта C # с другим проектом C #, у меня возникла эта проблема. Предложение о переносе класса Form в начало его файла было неуместным. Вот как я это решил. По сути, вы используете ссылку из второго проекта на первый, затем включаете регенерацию
resource.designer.cs
файла.Properties/Resources.resx
файл второго проектаProperties/Resources.resx
файл первого проекта в качестве ССЫЛКИ в папку « Свойства » во втором проекте. Не добавляйте его на корневой уровень проекта.Properties/Resources.designer.cs
!Resources.resx
добавьтеResXFileCodeGenerator
как CustomToolResources.resx
и выберите «Запустить пользовательский инструмент». Это создаст новый файл designer.cs.Примечание. Я бы не стал редактировать файл resource.designer.cs, так как он создается автоматически.
источник
В моем случае ряд плохо продуманных глобальных замен текста непреднамеренно изменил эту строку в файле cs конструктора ресурсов.
Поскольку пространство имен в этом аргументе больше не соответствует пространству имен класса, приложение запуталось во время выполнения.
Убедитесь, что пространство имен конструктора соответствует строковому аргументу в этой строке.
источник
Это происходит потому, что
*.resх
исключен из миграции.источник
Я обнаружил, что удаление файла designer.cs, исключение файла resx из проекта и последующее его повторное включение часто устраняет проблему такого рода после рефакторинга пространства имен (согласно ответу CFinck)
источник
Кажется, никто не упомянул это решение. Очевидно, на самом деле - но споткнул меня на мгновение ...
Модификатор доступа по умолчанию для нового файла ресурсов
Internal
(илиFriend
в VB.Net). Убедитесь, что вы изменили его наPublic
(в дизайнере resx вверху есть выпадающий список для модификатора доступа)
источник
Мне не хватило одного ответа Сиби Элангос, поэтому мне пришлось
Это создаст App_GlobalResources в вашей
/bin
папке, теперь скопируйте эту папку также в корень веб-приложенияисточник
В моем случае проблема вызвана неправильным определением класса:
После перераспределения
BackendObject
до конца (лучше разделить файл), выполнение проекта clean + rebuild решило проблему.источник
Я решил эту проблему, перейдя в проект, где был сохранен мой файл ресурсов, прокрутив вниз до его ItemGroup и добавив логическое имя, которое соответствует пути, ожидаемому компилятором.
Мой EmbeddedResource выглядел так:
Теперь это выглядит так
источник
Что касается этого случая, проверьте, имеет ли сборка, содержащая ресурсы, пространство имен по умолчанию, установленное на тот же текст (Project-> Properties-> Пространство имен по умолчанию; в VS). Проверьте также, имеет ли свойство resx свойство BuildAction, установленное на "Embedded ресурс "Наслаждайся ...;)
источник
Assembly localisationAssembly = Assembly.Load("xxx"); ResourceManager resourceManager = new ResourceManager("xxx", localisationAssembly);
Одним из подходов было бы поместить общие классы / ресурсы в отдельный проект библиотеки классов и сослаться на них на обоих веб-сайтах.
источник
Спасибо @CFinck! Просто чтобы добавить совет другим: я изменил строку ResourceManager следующим образом:
Я нахожусь в vb.net, но я думаю, что в C # единственная разница была бы + вместо & для объединения строк.
Таким образом, я могу использовать одни и те же связанные файлы сборки в двух похожих проектах, которые совместно используют ресурсы.
источник
Эта ошибка также возникает при использовании Dotfuscation, поскольку файл конструктора resx основан на отражении. Если вы используете Dotfuscator, он сломает ваши файлы resx. Вы должны всегда добавлять их в качестве исключения из процесса запутывания.
источник
Когда мы использовали
Это сгенерирует эту ошибку, если мы не заключим этот вызов в оператор try / catch.
источник
У меня есть приложение WinForms с одним проектом в решении.
Таргетинг
.NET Framework 4.0
Использование в
SharpDevelop 4.3
качестве моей IDEЗвучит глупо, но мне удалось установить
Logical Name
свойство в"Resources"
моем"Resources.resx"
файле. После того как я очистил это имущество, все работает неуклюжий.Обычно, когда вы добавляете случайные файлы как
EmbeddedResource
, вы обычно хотите установить что-Logical Name
то разумное, по какой-то причине я сделал то же самое дляResources.resx
файла, и это все испортило ...Надеюсь, это кому-нибудь поможет.
источник
Для меня проблемой было копирование файлов .resx и связанных файлов .cs из одного проекта в другой. Оба проекта имели одинаковое пространство имен, так что это не было проблемой.
Наконец, решил, когда в Solution Explorer заметил, что в исходном проекте файлы .resx зависели от файлов .cs:
В то время как в скопированном проекте файлы .cs зависели от файлов .resx:
Оказалось, что во втором проекте каким-то образом были установлены файлы .resx для автоматической генерации файлов .cs. Сгенерированные автоматически файлы .cs перезаписывают файлы .cs, скопированные из исходного проекта.
Чтобы устранить проблему, отредактируйте свойства каждого файла .resx в скопированном проекте. Пользовательский инструмент свойство будет установлено нечто вроде ResXFileCodeGenerator . Очистите свойство Custom Tool файла .resx. Вам нужно будет повторно скопировать файл .cs из исходного проекта, поскольку он будет перезаписан автоматически созданным файлом.
источник
В моем случае я поместил новый класс поверх формы Windows, в том же файле.
Перемещение добавленного класса из этого файла решило проблему.
Смотрите здесь: http://i.stack.imgur.com/wVu6c.png
источник
Это может быть вызвано несовпадающими пространствами имен. Второй ответ сверху (Sibi Elango) говорит, что нужно щелкнуть правой кнопкой мыши по файлу resx и изменить опцию Build на EmbeddedResource, но я уже сделал это и все еще имел ошибку. В верхнем ответе (CFinck's) отмечается способ исправить это путем ручного редактирования файлов, однако у меня была эта проблема в MonoDevelop, и мне пришлось установить пространство имен по умолчанию на такое же, как и у файла cs, который вызывал ресурс (файл, который содержащий код, такой как код ниже) ...
После установки пространства имен по умолчанию через графический интерфейс строка выше больше не вызвала исключение.
источник
Просто еще один случай. Я скопировал решение с двумя проектами и переименовал их частично в проводнике Windows (имена папок, имена файлов .sln и .csproj) и частично с помощью массивного действия Find & Replace в Visual Studio (пространства имен и т. Д.). Тем не менее, исключение, установленное ФП, все же имело место Я узнал, что имена Assembly и Namespace были еще старыми.
Хотя проект и все остальное уже были названы OfficeStyle
Assembly name
иDefault namespace
еще назвали Linckus .После этого исправления все снова заработало нормально, скомпилируйте и запустите время :)
источник
Для пользователей, сталкивающихся с этой проблемой в .NET Core 3.0, это может быть связано с серьезным изменением , внесенным в .NET Core 3.0, для разрешения которого просто установите
EmbeddedResourceUseDependentUponConvention
значение false в вашем проекте csproj:источник
В моем случае эти строки кода добавили
Web.config
:Вместе с Построение действия:
Embedded Resource
и пользовательский инструмент:PublicResXFileCodeGenerator
.источник
Свойства двойного щелчка в разделе приложения проверяют, совпадают ли имя сборки и пространство имен по умолчанию
источник
Я также столкнулся с той же проблемой, попробовал все решения, упомянутые в ответе, но ни одно из них не помогло. Оказалось, что во время регистрации кода в TFS. TFS не проверял файл Resx, он проверял только в файле конструктора. Таким образом, все остальные разработчики столкнулись с этой проблемой во время работы на своих машинах. Проверка в файле resx вручную сделала свое дело
источник
Это также может произойти, если поместить класс выше основного класса winform (например, Form1). Это можно увидеть, когда вы посмотрите на дизайн, так как он не отображается.
источник
Еще одна причина: если ваше пространство имен имеет дефис ("-"), оно будет правильно скомпилировано и запущено, но ресурс не будет доступен. Пространства имен (идентификаторы) не должны иметь дефисов, но это, кажется, не применяется нигде, кроме как при загрузке ресурсов. Это сожгло меня дважды за десятилетие.
источник
Еще одна вещь, которую нужно проверить - это если у вас есть встроенное имя LogicalName или ManifestResourceName. Убедитесь, что они определены правильно, если ваш файл проекта использует их, поскольку они могут привести к тому, что ресурсы будут жить под именем, которое вы не ожидаете.
источник
Я столкнулся с этой проблемой при запуске команды миграции.
Update-Database
в консоли диспетчера пакетов.Принятый ответ не решил мою проблему.
Мне пришлось изменить Build Action с
Compile
на,Embedded Resource
и это сработало для меня.Вы можете сделать то же самое, используя следующие шаги:
источник
Щелкните правой кнопкой мыши по ресурсам и выберите
Run Custom Tool
Это исправит дизайнер
источник
Тот факт, что вы ссылаетесь на библиотеку DLL проекта B, не означает, что менеджер ресурсов проекта A знает о каталоге App_GlobalResources проекта B.
Вы используете проекты веб-сайтов или веб-приложений? Во втором случае Visual Studio должна позволять вам связывать файлы исходного кода (не уверен насчет первого, я никогда не использовал их). Это малоизвестная, но полезная функция, которая описана здесь . Таким образом, вы можете связать файлы ресурсов Project B с Project A.
источник