Visual studio - получение ошибки "Файл метаданных" XYZ "не найден" после редактирования
Я наткнулся на проблему, которая действительно раздражает.
Когда я отлаживаю свое программное обеспечение, все работает нормально, но если я удалю точку останова и отредактирую код, когда я попытаюсь продолжить работу, я получаю сообщение об ошибке:
Metadata file 'XYZ' could not be found
Оглядев какое-то время, я обнаружил некоторые похожие проблемы, но все они касались сбоя сборки, что не мое дело (это происходит только после редактировать-продолжение).
То, что я пробовал до сих пор:
- Мой код компилируется и работает.
- Я очистил решение и перезапустил VS.
- Я убедился, что файл отсутствующего файла создается для конфигурации, которую я запускаю (в диспетчере конфигурации).
- Я вручную создал отсутствующий файл-проект.
Дополнительная информация:
- Неважно, что я меняю, все равно получаю ту же ошибку (изменение не связано с отсутствующим файлом).
- Это происходит также, когда я приостанавливаю и продолжаю (не только точки останова)
- Я запускаю проект, используя настраиваемую конфигурацию (менеджер конфигурации...). Когда я запускаю его, используя конфигурацию по умолчанию
Debug
, ошибка не возникает.
Любые идеи?
Ответы
Ответ 1
В конце концов, что решило проблему:
- Очистить каждый проект индивидуально (щелкните правой кнопкой мыши > Очистить).
- Перестройте каждый проект индивидуально (щелкните правой кнопкой мыши > Перестроить).
- Перестройте автозагрузку проекта.
Я думаю, по какой-то причине, просто очистка раствора имела иной эффект, чем конкретная очистка каждого проекта в отдельности.
Редактировать:
Что касается комментария @maplemale, кажется, что иногда требуется удаление и повторное добавление каждой ссылки.
Обновление 2019:
В прошлом этот вопрос привлекал много внимания, но, похоже, что после выпуска VS 2017 он привлек гораздо меньше внимания.
Таким образом, другое предложение будет - Обновление до более новой версии VS (> = 2017), и среди других новых функций эта проблема также будет решена
Ответ 2
Насколько я могу судить, это происходит, когда зависимости проекта перепутаны по какой-либо причине (в то время как все межпроектные ссылки остаются неповрежденными). Во многих случаях это НЕ проблема с кодом. И для тех, у кого есть более чем несколько проектов, прохождение через них по одному не приемлемо.
Легко для reset зависимостей проекта -
- Выберите все проекты и щелкните правой кнопкой мыши по разгрузке
- Выберите все проекты и щелкните правой кнопкой мыши по перезагрузке.
- Реконструкция
Для тех, у кого проблема в коде или какая-то другая проблема, вызывающая эту проблему, вам, очевидно, придется сначала решить эту проблему.
Ответ 3
Одна из возможных причин может заключаться в том, что вы обновили некоторые из ваших проектов (в решении) до более высокой версии, например. от .NET 4.0 до 4.5 Это произошло в моем случае, когда я открыл решение в VS 2013 (изначально созданное с использованием VS 2010 и .NET 4.0). Когда я открылся в VS 2013, мой проект на С++ обновился до .NET 4.5, и я начал видеть проблему.
Ответ 4
Как правило, такая ошибка возникает с человеческими ошибками, например, если мы неправильно меняем пространство имен или меняем имена папок из проводника для текущего проекта и т.д., где компилятор не может иногда обнаруживать.
Я столкнулся с той же ошибкой, чтобы решить, что я пробовал несколько шагов. Следуйте всем шагам:
- Очистить все решение
- Щелкните правой кнопкой мыши по каждому проекту в вашем решении, перейдите в "Свойства" и создайте пространство имен по умолчанию, а также имя сборки по умолчанию, как и в вашем коде (например, пространство имен перед именем класса).
- Проверить имена папок для каждого проекта, пройдя через проводник (там, где ваше решение для проекта). Если вы не согласуетесь с вашими проектами, сделайте его похожим (как шаг 2).
- Удалите все ссылки из каждого проекта, относящиеся к другому из того же решения, и добавьте его снова.
- В папке "Project Solution" вы найдете файл Visual С# Project. Щелкните правой кнопкой мыши и откройте "Блокнот". В ваших начальных строках вы найдете строки для каждого проекта, как показано ниже:
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "**Client**", "**Client** \ **Client**.csproj", "{4503E259-0E3B-414A-9074-F251684322A5}"
EndProject
Повторно проверьте имена папок (я выделил в BOLD) и сделаю их похожими на то, что вы сделали в шаге 2.
-
Очистите все решение снова
-
Постройте решение (если не работает, попытайтесь создать человека после очистки снова)
Ответ 5
Убедитесь, что все ваши зависимые проекты используют ту же версию .Net Framework. У меня была такая же проблема, вызванная зависимым проектом, использующим 4.5.1, тогда как все остальные использовали 4.5. Изменение проекта с 4.5.1 до 4.5 и восстановление моего решения устранили эту проблему для меня.
Ответ 6
XYZ не найден, потому что он еще не построен....
Щелкните правой кнопкой мыши на решении и проверьте зависимости проекта. Порядок сборки проекта также должен изменяться в соответствии с установленными зависимостями.
Ответ 7
Единственное, что сработало для меня, - это удалить файл параметров решения (.suo
). Обратите внимание, что это скрытый файл.
Чтобы найти этот файл, закройте свою студию Virsual и найдите .suo из проводника файлов в вашем проекте.
PS: новый новый файл .suo будет создан снова, когда вы перестроете свой проект, и, надеюсь, этот недавно созданный не даст вам проблем.
Я надеюсь, что это поможет кому-то избавиться от этой анонимной ошибки:).
Ответ 8
У меня была эта проблема в течение нескольких дней! Я пробовал все выше, но проблема продолжала возвращаться. Когда это сообщение отображается, оно может иметь значение "один или несколько проектов в вашем решении не компилируются чисто", поэтому метаданные для файла никогда не записывались. Но в моем случае я не видел никаких других ошибок компилятора!!! Я продолжал работать над попыткой скомпилировать каждое решение вручную, и только после того, как VS2012 обнаружил некоторые ошибки компилятора, которых я раньше не видел, эта проблема исчезла.
Я обманул порядок сборки, никаких заказов на сборку, ссылаясь на отладочные DLL (которые были скомпилированы вручную)... НИЧЕГО, казалось, работало, пока я не нашел эти ошибки, которые не отображались при компиляции всего решения!!!!
Иногда, кажется, при компиляции, что компилятор будет существовать на некоторых ошибках... Я видел это в прошлом, когда после устранения проблем последующие компиляции отображали NEW ошибки. Я не знаю, почему это происходит, и для меня несколько редких проблем. Однако, когда у вас их есть, это настоящая боль, пытаясь выяснить, что происходит. Удачи!
Ответ 9
Ну, мой ответ - это не просто резюме всех решений, но он предлагает больше.
Раздел (1):
В общих решениях:
У меня было 4 ошибки такого типа ( "файл метаданных не найден" ) и 1 ошибка: "Исходный файл не может быть открыт (" Unspecified error ")".
Я попытался избавиться от файла метаданных, не найдена ошибка. Для этого я прочитал много сообщений, блогов и т.д. И нашел, что эти решения могут быть эффективными (суммируя их здесь):
Перезагрузите VS и повторите попытку.
Перейдите в раздел "Обозреватель решений". Щелкните правой кнопкой мыши Решение. Перейдите в раздел "Свойства". Перейдите в "Configuration Manager". Проверьте, отмечены ли флажки в поле "Построить" или нет. Если какой-либо или все они не отмечены, проверьте их и попробуйте снова создать.
Если вышеупомянутое решение не работает, следуйте последовательности, указанной на шаге 2 выше, и даже если все флажки отмечены, снимите флажок, проверьте еще раз и попытайтесь построить снова.
Порядок сборки и зависимостей проекта:
Перейдите в раздел "Обозреватель решений". Щелкните правой кнопкой мыши Решение. Перейдите в раздел "Зависимости проектов...". Вы увидите две вкладки: "Зависимости" и "Порядок сборки". Этот порядок сборки является тем, в котором строится решение. Проверьте зависимости проекта и порядок сборки, чтобы проверить, пытается ли какой-то проект (например, "project1" ), который зависит от другого (например, "project2" ), перед этим (project2). Это может быть причиной ошибки.
Проверьте путь к отсутствующему .dll:
Проверьте путь к отсутствующей .dll. Если путь содержит пробел или какой-либо другой недопустимый путь, удалите его и попробуйте создать еще раз.
Если это причина, то отрегулируйте порядок сборки.
Ответ 10
Используете ли вы инструмент создания кода базы данных, например SQLMETAL, в своем проекте?
Если это так, вы можете столкнуться с плюрализацией проблемы с незапланированным переходом.
В моем случае, я отметил, что некоторые старые имена плюрализированных (*) таблиц (по которым SQLMETAL добавляет по умолчанию букву s "в конце) ссылки на таблицы, сгенерированные SqlMetal.
Так как я недавно отключил Плюралирование имен, после реорганизации некоторых классов, связанных с базой данных, некоторые из них потеряли префикс " s". Поэтому все ссылки на затронутые классы таблиц стали недействительными. По этой причине у меня есть несколько ошибок компиляции, например:
'xxxx' не содержит определения для "TableNames" и никакого метода расширения "TableNames", принимающий первый аргумент типа "yyyy", может быть найден (вам не хватает директивы using или ссылки на сборку?)
Как вы знаете, я беру только ошибку, чтобы предотвратить сборку сборки. И это недостающее assemply связано с зависимыми сборками, в результате чего исходный файл метаданных "XYZ" не найден "
После исправления затронутых таблиц классов ссылки вручную на их текущие имена (unpluralized), я был finnaly, способный вернуть мой проект!
(*) Если опция Visual Studio > меню "Сервис" > Параметры > Инструменты базы данных > Дизайнер O/R → Плурализация имен включена, некоторый генератор кода SQLMETALl добавит букву " s" в конце некоторых сгенерированных классов таблиц, хотя таблица не имеет суффикса "s" в целевой базе данных. Для получения дополнительной информации см. http://msdn.microsoft.com/en-us/library/bb386987 (v = vs .110).aspx
Надеюсь, что это поможет!
Ответ 11
Мои 5 центов.
Эта проблема началась после того, как решение было чистым.
Мне удалось устранить проблему, установив конфигурацию Active Solution в: Build → Configuration Manager для выпуска. Затем создайте и установите его обратно для отладки снова. После этого сборка завершилась.
Ответ 12
Закройте VS, найдите и удалите папку "пакеты" снаружи визуальной студии. Перезагрузка VS и сборка → все зависимости переустановлены
Ответ 13
Для новой сборки возможно, что некоторые зависимости не установлены. Для меня это были Crystal Reports.
Ответ 14
это происходит из-за различий имен в имени папки и имени пространства имен. Если u создаст пространство имен в определенном имени, а затем вы переименуете его, пространство имен будет иметь старое имя. И компиляция займет старый путь, чтобы найти файл .dll
и .exe
. Чтобы избежать этого, откройте файл .csproj
каждого пространства имен текстовым файлом и найдите старый файл в файле.
удалите это, очистите и перестройте решение. Это сработало для меня. Я потратил целый день на эту проблему.
Ответ 15
У меня возникла эта ошибка. Я следил за всеми решениями здесь, но ничего не получилось. Я использовал Visual Studio 2013 Professional. Я не мог заставить отдельные перестройки проекта работать, и я, наконец, понял, что в моих ссылках была круговая зависимость. Visual Studio делает довольно хорошую работу, как правило, предупреждая вас, если вы добавляете ссылку на что-то, что ссылается на нее, но по какой-то причине этого не произошло в этом случае. Я добавил ссылку на проект, который ссылался на проект, над которым я работал, и принял его. Возможно, ошибка VS?
Ответ 16
Это происходит, когда одна DLL проекта выходит из строя и на что ссылается количество проектов. Поэтому сначала исправьте его, а затем создайте людей.
Ответ 17
У меня возникла эта проблема, и она началась после импорта нашего решения в TFS в качестве нового проекта. Я столкнулся с этой темой и нашел быстрое решение с некоторым вдохновением из ваших ответов.
Все, что мне нужно сделать, это перестроить проект, который якобы потерял файл метаданных и вуаля, проблема решена.
Ответ 18
Там также есть еще одна глупая причина, которую вы должны проверить с терпением... как это пришло мне в голову, потратив 4 часа на поиск ответов:
История для меня заключалась в том, что я случайно изменил небольшую строку кода среди тысяч файлов классов С#, а затем попытался перестроить решение. Как вы могли себе представить, у меня получилось 40 + метаданных без ошибок и с 1 ошибкой компиляции среди них, что я не проверял тщательно, чисто думая, что все ошибки были одинаковыми!
после 4 часов поиска, а затем случайно дважды проверяя мой список ошибок, я обнаружил, что глупая ошибка кода, исправлена его, скомпилирована, а затем ошибка исчезла.
Нехороший ответ на вашу проблему, но надеюсь, что мой случай не был таким же, как у вас.
Ответ 19
У меня была та же проблема. В моем случае я по ошибке поставил все проекты отдельно от проекта с помощью основного метода в качестве консольного приложения.
Чтобы решить проблему, я перешел к каждому проекту, отличному от того, у кого есть основная функция, и right click > properites > output type > class library
Ответ 20
это случилось со мной, потому что у меня странное столкновение в пространствах имен:
я имел
AssemblyA
с пространством имен
AssemblyA.ParentNamespace
ведьма определяет ClassA
и в той же сборке другое пространство имен с именем
AssemblyA.ParentNamespace.ChildNamespace
witch определяет другой ClassA (но с тем же именем)
У меня тогда в AssemblyA.ParentNamespace IInterfaceB был метод, который в начале возвращает IEnumerable, а классB witch реализует IInterfaceB
Я позже модифицировал метод в ClassB, чтобы вернуть IEnumerable, но я забыл обновить определение IInterfaceB, поэтому метод все еще возвращал IEnumerable
забавный факт заключался в том, что решение по-прежнему усложняется, если я все-таки перестроил, но тесты, на которые ссылается AssemblyA, не работали и возвращают ошибку "Метаданные не могут быть найдены".
обновление интерфейсаB для правильного возврата IEnumerable в качестве своего конструктора ClassB решило проблему, к сожалению, сообщение об ошибке было неопределенным, а также тот факт, что работа с компиляцией заставляла меня предположить, что, возможно, в компиляторе есть что-то исправить
Ответ 21
У меня было это и удалось исправить это, используя этот ответ SO:
Файл метаданных '.dll' не найден
Мне нужно было снять все флажки, нажать "Применить", снова установить все флажки и снова нажать "Применить", но это устранило проблему.
Ответ 22
Я просто столкнулся с этой проблемой, и через час после того, как я понял, я добавил файл aspx для своего продукта, который имел то же имя, что и один из моих классов Linq-To-Sql.
Класс и страница где "Очередь".
Изменил страницу на QueueMgr.aspx и все построено просто отлично.
Ответ 23
Коллега столкнулся с этой проблемой, и причина ускользала от нас. В конце концов мы поняли, что каталог проекта (и, следовательно, путь к пакетам NuGet) содержал %20
(спасибо, некоторый инструмент Git GUI, который не должен называться), и сообщения об ошибках показали, что компилятор искал очень похожий путь но тот, который должен был %20
, а скорее пробел. Очевидно, что-то в системе сборки где-то выполняет HTML-декодирование на пути к локальной файловой системе.
Переименовал каталог рабочей копии, и все начало работать.