Не удается найти файл ресурсов properties resources resx
Исключение типа «System.Resources.MissingManifestResourceException» возникло в mscorlib.dll, но не было обработано в коде пользователя.
Не удалось найти какие-либо ресурсы, подходящие для указанной культуры или нейтральной культуры. Убедитесь, что «Resources.Blah.resources» был правильно встроен или связан с сборкой «App_GlobalResources.sn_flri6» во время компиляции, или что все необходимые спутниковые сборки загружаются и полностью подписаны.
Что вызывает это?
Чтобы решить эту проблему, переместите все другие определения классов так, чтобы они появлялись после определения класса формы.
Это решение для проекта Windows Forms, я не уверен, относится ли это также к веб-проектам.
Я просто ударил это же исключение в проекте WPF. Проблема возникла в сборке, которую мы недавно переместили в другое пространство имен (от ProblemAssembly.Support до ProblemAssembly.Controls ). Исключение происходило при попытке доступа к ресурсам из второго файла ресурсов, который существует в сборке.
Оказывается, файл дополнительного ресурса неправильно переместил ссылки из старого имени пространства имен в новое имя пространства имен.
В файле designer.cs для файла ресурсов есть статическое свойство для получения ResourceManager. В этом получателе строка все еще ссылалась на старое пространство имен. После исправления в новом пространстве имен проблема была решена:
Надеюсь, это поможет следующему человеку.
Я решил проблему следующим образом:
- Щелкните правой кнопкой мыши на вашем ResourceFile
- Измените свойство «Build Action» Compile на «Embedded Resource»
- Тогда построй и запускай
- Удалить файл второго проекта Properties/Resources.resx
- Добавьте Properties/Resources.resx файл первого проекта в качестве ССЫЛКИ на папку Properties во втором проекте. Не добавляйте его на корневой уровень проекта.
- Не / добавьте Properties/Resources.designer.cs первого проекта!
- В свойствах Resources.resx второго проекта добавьте ResXFileCodeGenerator в качестве CustomTool
- Щелкните правой кнопкой мыши на Resources.resx и выберите «Run Custom Tool». Это создаст новый файл designer.cs.
Примечание. Я бы не стал редактировать файл resource.designer.cs, так как он создается автоматически.
В моем случае ряд плохо продуманных глобальных замен текста непреднамеренно изменил эту строку в файле cs конструктора ресурсов.
Поскольку пространство имен в этом аргументе больше не соответствует пространству имен класса, приложение запуталось во время выполнения.
Убедитесь, что пространство имен конструктора соответствует строковому аргументу в этой строке.
Это происходит потому, что *.resх исключен из миграции.
- Щелкните правой кнопкой мыши на вашем ResourceFile
- Нажмите на пункт меню «Включить в проект»
Я обнаружил, что удаление файла designer.cs, исключение файла resx из проекта и последующее его повторное включение часто устраняет проблему такого рода после рефакторинга пространства имен (согласно ответу CFinck)
Никто, кажется, не упомянул это решение. Очевидно, на самом деле - но споткнул меня на мгновение .
(в дизайнере resx вверху есть выпадающий список для модификатора доступа)
Мне не хватило одного ответа Сиби Элангос, поэтому мне пришлось
- Щелкните правой кнопкой мыши на вашем ResourceFile
- Изменить свойство «Построить действие»
- Скомпилировать в «Встроенный ресурс»
- Построить и развернуть
Это создаст App_GlobalResources в вашей папке /bin , теперь copy эта папка также в корне веб-приложения
В моем случае проблема вызвана неправильным определением класса:
После перераспределения BackendObject до конца (лучше разделить файл) выполнение команды clean + rebuild решило проблему.
Спасибо @CFinck! Просто чтобы добавить совет другим: я изменил строку ResourceManager следующим образом:
Таким образом, я могу использовать одни и те же связанные файлы сборки в двух похожих проектах, которые совместно используют ресурсы.
Один из подходов состоит в том, чтобы поместить общие классы/ресурсы в отдельный проект библиотеки классов и передать их на оба веб-сайта.
Я решил эту проблему, перейдя в проект, в котором был сохранен мой файл ресурсов, прокрутив вниз до его ItemGroup и добавив логическое имя, которое соответствует пути, ожидаемому компилятором.
Мой EmbeddedResource выглядел так:
Теперь это выглядит так
Эта ошибка также возникает при использовании Dotfuscation, поскольку файл конструктора resx основан на отражении. Если вы используете Dotfuscator, он сломает ваши файлы resx. Вы должны всегда добавлять их в качестве исключения из процесса запутывания.
Звучит глупо, но в моем файле Logical Name для свойства "Resources" установлено значение "Resources.resx" . После того как я очистил это имущество, все работает неуклюжий.
Обычно, когда вы добавляете случайные файлы как EmbeddedResource , вы обычно хотите установить для Logical Name что-то разумное, по какой-то причине я сделал то же самое с файлом Resources.resx , и это все испортило .
Надеюсь, это кому-нибудь поможет.
Когда мы использовали
Это сгенерирует эту ошибку, если мы не заключим этот вызов в оператор try/catch.
Для меня проблема заключалась в копировании файлов .resx и связанных файлов .cs из одного проекта в другой. Оба проекта имели одинаковое пространство имен, так что это не было проблемой.
Наконец, решил, когда в Solution Explorer заметил, что в исходном проекте файлы .resx зависели от файлов .cs:
В то время как в скопированном проекте файлы .cs зависели от файлов .resx:
Оказалось, что во втором проекте каким-то образом файлы .resx были настроены для автоматической генерации файлов .cs. Сгенерированные автоматически файлы .cs перезаписывают файлы .cs, скопированные из исходного проекта.
Чтобы устранить проблему, отредактируйте свойства каждого файла .resx в скопированном проекте. Свойство Custom Tool будет установлено в что-то вроде ResXFileCodeGenerator . Очистите свойство Custom Tool файла .resx. Вам нужно будет повторно скопировать файл .cs из исходного проекта, так как он будет перезаписан автоматически сгенерированным файлом.
Что касается этого случая, проверьте, имеет ли сборка, содержащая ресурсы, пространство имен по умолчанию, установленное на тот же текст (Project-> Properties-> Пространство имен по умолчанию; в VS) Проверьте также, имеет ли файл resx свойство BuildAction, установленное на «Встроенный ресурс» Наслаждайтесь . ;)
Двойной щелчок свойства В разделе приложения проверьте имя сборки и пространство имен по умолчанию совпадают
Еще одна вещь, которую нужно проверить, - это если у вас есть встроенное имя LogicalName или ManifestResourceName. Убедитесь, что они определены правильно, если ваш файл проекта использует их, поскольку они могут привести к тому, что ресурсы будут жить под именем, которое вы не ожидаете.
Тот факт, что вы ссылаетесь на DLL проекта B, не означает, что менеджер ресурсов проекта A осведомлен о каталоге App_GlobalResources проекта B.
Вы используете проекты веб-сайтов или проекты веб-приложений? Во втором случае Visual Studio должна позволять вам link файлы исходного кода (не уверен насчет первого, я никогда не использовал их). Это малоизвестная, но полезная функция, которая описана здесь . Таким образом, вы можете связать файлы ресурсов Project B с Project A.
В моем случае эти строки кода, добавленные в Web.config , очень помогли:
Вместе с действием Build: Embedded Resource и Custom Tool: PublicResXFileCodeGenerator .
В моем случае я поместил новый класс поверх формы Windows, в том же файле.
Перемещение добавленного класса из этого файла устранило проблему.
Это также может происходить при размещении класса над основным классом winform (например, Form1). Это можно увидеть, когда вы посмотрите на дизайн, так как он не отображается.
Еще одна причина: если в вашем пространстве имен есть дефис ("-"), он будет правильно скомпилирован и запущен, но ресурс не будет доступен. Пространства имен (идентификаторы) не должны иметь дефисов, но это, похоже, не применяется нигде, кроме как при загрузке ресурсов. Это сожгло меня дважды за десятилетие.
После установки пространства имен по умолчанию через графический интерфейс, строка выше больше не вызвала исключение.
Я также столкнулся с той же самой проблемой, попробовал все решения, упомянутые в ответе, но ни один, казалось, не работал. Оказалось, что во время регистрации кода в TFS. TFS не проверял файл Resx, он проверял только в файле конструктора. Таким образом, все остальные разработчики столкнулись с этой проблемой во время работы на своих машинах. Проверка в файле resx вручную сделала свое дело
Я бегу VS2010. Когда я открываю свое веб-решение & попытка сборки, Сборка завершается ошибкой CSC(0,0): ошибка CS2001: исходный файл 'Properties\AssemblyInfo.cs' не найден. Я создал Windows приложения, но в разных решениях. Я не могу найти никаких ссылок на этот файл в интернете.
В решении explorer откройте элемент дерева Properties .
Щелкните правой кнопкой мыши и выберите remove from project для AssemblyInfo.cs, Resources.resx и Settings.settings.
Вы можете строить.
Просматривая опубликованные MSDN URL, ниже приведен список файлов, которые у вас есть. Итак, вы получаете эту ошибку, потому что у вас нет файла с именем Resources.resx .
Вы можете добавить один из visual studio, хотя, если это необходимо.
Я ранее использовал VB2008, и когда он был изменен на 2015, я получил ошибку "файл не найден: progName.resX
Наконец я заметил, что было 3 модуля, у которых был файл с именем "NET Managed resourse (progName1).resourse" и то же самое для progName3, но первоначальное имя файла progName2 было "Net Managed resourses (progName2(1)).resourses"
Я просто переименовал файл и удалил (1), и VB 2015 нашел его правильно.
Перейдите в систему управления версиями Explorer. Найдите свой проект, щелкните правой кнопкой мыши и выберите Добавить элементы в папку. Выберите Свойства, и там должно быть ваше missinProperties\Resources.resx
В решении explorer откройте свойства элемента дерева.
удалить Resources.resx и перестроить проект.
Для Visual Studio 2017 разверните дерево "Мой проект" в решении explorer, а затем выберите " и "под деревом" и щелкните правой кнопкой мыши "Исключить из проекта".
Затем очистите и восстановите.
Похожие вопросы:
У меня есть библиотека классов dll с файлом, встроенным в качестве ресурса, на который ссылается Resources.resx . internal class Resources < internal static byte[] LicenseFile < get < object obj =.
Я бегу VS2010. Когда я открываю свое веб-решение & попытка сборки, Сборка завершается ошибкой CSC(0,0): ошибка CS2001: исходный файл 'Properties\AssemblyInfo.cs' не найден. Я создал Windows.
У меня есть проект Windows в Visual Studio 2010, в котором я храню все изображения в файле ресурсов проекта, который Visual Studio создал для меня. Тем не менее, он становится загроможденным, и я.
Я использую Intellij 13 и пометил каталог как каталог ресурсов (думая, что это сделает все sub-files/folders доступными на classpath), однако при запуске проекта возникает исключение, говорящее о.
В моем проекте библиотеки классов у меня есть файл ресурсов(.resx). Исходя из этого,я строю dll(Satelite assembly), на который ссылаются в другом отдельном проекте(проект Visual studio 2003). Когда.
обновление
It (Ресурсы.resx) был на самом деле (под свойствами), поэтому я думаю, что "не может быть найден" означает: "мне не нравится тот, который вы дали мне."
когда я размял F6, чтобы дать ему еще одну попытку, я получил предупреждение: "пользовательский инструмент" ResXFileCodeGenerator "связан с файлом" свойстваресурсы.resx', но вывод пользовательского инструмента не был найден в проекте. Вы можете попробовать повторно запустить пользовательский инструмент, щелкнув правой кнопкой мыши файл в обозревателе решений и выбрав запустить пользовательский инструмент."
также: "пользовательский инструмент" SettingsSingleFileGenerator "связан с файлом" свойстванастройки.настройки, но вывод пользовательского инструмента не найден в проекте. Вы можете попробовать повторно запустить пользовательский инструмент, щелкнув правой кнопкой мыши файл в обозревателе решений и выбрав запустить пользовательский инструмент."
Я запустил "запустить пользовательский инструмент" для обоих ресурсов.resx и настройки.настройки, и все равно получите ту же ошибку и два предупреждения.
Если вы скомпилировали проект в прошлом и у вас есть dll/exe, вы можете использовать приложение DotPeek JetBrains для экспорта XML resx из сборки
откройте dll / exe в DotPeek
затем дважды щелкните каждый ресурс, чтобы увидеть XML в окне. Затем вы можете скопировать/вставить XML в текстовый редактор и сохранить как.файл resx.
Не беспокойтесь, щелкнув правой кнопкой мыши ресурс и попробовав опцию "Сохранить Ресурс в файл", как это не создает файл в том же формате, как вы видите на экране.
щелкните правой кнопкой мыши и удалить .проект форма resx файл щелкните правой кнопкой мыши по форме и обновите resource manager построить проект запустить проект
Я знаю, что этот вопрос немного старый, но у меня были проблемы с генерацией .ресурсы.dll-файлы и после недавнего изменения версии .NET Framework .Файлы resx еще включил старый .Net версии. Я смог решить эту проблему, открыв затронутые формы и перейдя в "Design" -> "Localizable" и изменив его на "False". Затем я построил проект, а затем изменил его обратно на "True" и the .Файл ResX был восстановлен.
У меня была эта проблема в форме, которую я создал для довольно обширного проекта. Я смог просто скопировать resx другой формы в том же проекте и изменить имя файла.
Я просмотрел более дюжины файлов resx в моем проекте и заметил, что большинство из них были идентичны; несколько, которые не были, отличались только одной или двумя дополнительными строками.
насколько я прочитал, нет способа регенерировать .файл resx, но вы можете пойти другим путем вы можете создать другое / такое же приложение win и все аспекты управления для него . Чем занять вновь созданный файл resx и добавить в старый проект. Попробуйте, может быть, это сработает
пользователи Visual Studio 2012-2015 Для веб-приложения просто выберите веб-элемент управления (ascx) или страницу (aspx), в которой отсутствует resx в обозревателе решений, перейдите в меню проект и выберите "Преобразовать в веб-приложение", нажмите OK в приглашении. Вы должны увидеть новые файлы под выбранным элементом в обозревателе решений.
вот как я решил это: я открыл отсутствующие вспомогательные файлы (AssemblyInfo.cs, Resources.resx файл, ресурсы.Дизайнер.cs, настройки.настройки и настройки.Дизайнер.cs) из другого проекта в блокноте удалил вещи, которые не принадлежали (например, ссылку на ThemeEditor или некоторые другие), изменил другие вещи по мере необходимости (имя приложения или пакета), и они были, наконец, приняты как принадлежащие моему приложению.
скопировать .resx файл любой другой формы в проекте в папку проекта и повторите попытку. У меня получилось.
Здесь рассматривается работа с XML-файлами (RESX-файлами), содержащими ресурсы. Сведения о работе с двоичными файлами ресурсов, внедренными в сборки, см. в статье ResourceManager.
Существуют также способы работы с RESX-файлами, отличные от программных. При добавлении в проект Visual Studio файла ресурсов среда Visual Studio предоставляет интерфейс для создания и обслуживания RESX-файла и во время компиляции автоматически преобразует RESX-файл в RESOURCES-файл. Для непосредственной работы с RESX-файлом можно также использовать текстовый редактор. Однако следует соблюдать осторожность и избегать изменения содержащихся в файле двоичных данных: это может привести к его повреждению.
Создание RESX-файла
Для создания RESX-файла программным способом можно использовать класс System.Resources.ResXResourceWriter , выполнив следующие действия.
Создайте экземпляр объекта ResXResourceWriter , вызвав метод ResXResourceWriter(String) и указав имя RESX-файла. Имя файла должно включать в себя расширение RESX. Если экземпляр объекта ResXResourceWriter создается в блоке using , явный вызов метода ResXResourceWriter.Close на шаге 3 не требуется.
Вызовите метод ResXResourceWriter.AddResource для каждого ресурса, который необходимо добавить в файл. Используйте перегрузки этого метода для добавления строки, объекта и двоичных данных (массива байтов). Если ресурсом является объект, он должен быть сериализуемым.
Вызовите метод ResXResourceWriter.Close для создания файла ресурсов и освобождения всех ресурсов. Если объект ResXResourceWriter был создан в блоке using , ресурсы записываются в RESX-файл, а ресурсы, используемые объектом ResXResourceWriter , освобождаются в конце блока using .
В полученном RESX-файле имеется соответствующий заголовок и тег data для каждого ресурса, добавленного методом ResXResourceWriter.AddResource .
Не следует использовать файлы ресурсов для хранения паролей, конфиденциальной информации или личных данных.
В следующем примере создается RESX-файл с именем CarResources.resx, в котором хранятся шесть строк, значок и два объекта, определяемых приложением (два объекта Automobile ). Класс Automobile , определенный и созданный в этом примере, отмечен атрибутом SerializableAttribute.
Для создания RESX-файлов можно также использовать Visual Studio. Во время компиляции Visual Studio использует генератор файлов ресурсов (Resgen.exe) для преобразования RESX-файла в двоичный файл ресурсов (RESOURCES-файл) и внедряет этот файл в сборку приложения или вспомогательную сборку.
RESX-файл нельзя внедрить в исполняемый файл или скомпилировать во вспомогательную сборку. Необходимо преобразовать RESX-файл в двоичный файл ресурсов (RESOURCES-файл) с помощью генератора файлов ресурсов (Resgen.exe). Затем полученный RESOURCES-файл можно внедрить в сборку приложения или вспомогательную сборку. Дополнительные сведения см. в разделе Создание файлов ресурсов.
Перечисление ресурсов
В некоторых случаях может потребоваться извлечь из RESX-файла все ресурсы, а не конкретный ресурс. Для этого можно использовать класс System.Resources.ResXResourceReader , предоставляющий перечислитель для всех ресурсов в RESX-файле. Класс System.Resources.ResXResourceReader реализует перечислитель IDictionaryEnumerator, который возвращает объект DictionaryEntry , представляющий конкретный ресурс для каждой итерации цикла. Его свойство DictionaryEntry.Key возвращает ключ ресурса, а свойство DictionaryEntry.Value — значение ресурса.
В следующем примере создается объект ResXResourceReader для файла CarResources.resx, созданного в предыдущем примере, а затем выполняются итерации по файлу ресурсов. В этом примере в объект Automobile добавляются два объекта System.Collections.Generic.List<T> , определенные в файле ресурсов, а в объект SortedList добавляются пять строк из шести. Значения в объекте SortedList преобразуются в массив параметров, который используется для отображения заголовков столбцов в консоли. Значения свойства Automobile также выводятся на консоль.
Получение определенного ресурса
В следующем примере извлекается строка заголовка и значок формы по именам ресурсов. В нем также извлекаются определяемые приложением объекты Automobile , использованные в предыдущем примере, и эти объекты отображаются в элементе управления DataGridView.
Преобразование RESX-файлов в двоичные RESOURCES-файлы
Преобразование RESX-файлов во внедряемые двоичные файлы ресурсов (RESOURCES-файлы) имеет значительные преимущества. Хотя RESX-файлы легко читаются и обслуживаются при развертывании приложения, они редко поставляются с готовыми приложениями. Если они распространяются с приложением, то существуют в виде отдельных файлов наряду с исполняемым файлом приложения и сопровождающими его библиотеками. В отличие от RESX-файлов RESOURCES-файлы внедряются в исполняемый файл приложения или сопровождающие его сборки. Кроме того, если локализованные приложения полагаются на RESX-файлы во время выполнения, это означает, что ответственность за обработку перехода к другим ресурсам несет разработчик. Напротив, если создан ряд вспомогательных сборок, содержащих внедренные RESOURCES-файлы, процесс перехода на резервные ресурсы обрабатывается средой CLR.
Для преобразования RESX-файла в RESOURCES-файл используется генератор файлов ресурсов (resgen.exe), который имеет следующий базовый синтаксис:
Результат — двоичный файл ресурсов, который имеет такое же корневое имя файла, что и RESX-файл, и расширение RESOURCES-файла. Затем во время компиляции этот файл может быть компилирован в исполняемый файл или библиотеку. Если применяется компилятор Visual Basic, для внедрения RESOURCES-файла в исполняемый файл приложения используйте следующий синтаксис:
Читайте также: