Visual studio - получение ошибки Файл метаданных 'XYZ' не может быть найден после продолжения редактирования

Я столкнулся с проблемой, которая действительно меня раздражает.
Когда я отлаживаю свое программное обеспечение, все работает нормально, но если я нажимаю точку останова и редактирую код, когда я пытаюсь продолжить работу, я получаю сообщение об ошибке:
Metadata file 'XYZ' could not be found

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

Что я пробовал до сих пор:

  • Мой код компилируется и работает.
  • Я очистил раствор и перезапустил VS.
  • Я убедился, что проект недостающего файла создается для конфигурации, которую я использую (в диспетчере конфигурации).
  • Я вручную построил проект недостающего файла.

Дополнительная информация:

  • Неважно, что я меняю, все равно возникает та же ошибка (изменение не связано с отсутствующим файлом).
  • Это также происходит, когда я останавливаюсь и продолжаю (не только точки останова)
  • Я запускаю проект, используя настраиваемую конфигурацию (диспетчер конфигурации ...). Когда я запускаю его, используя конфигурацию по умолчанию Debug, ошибки не возникает.

Любые идеи?


person Avi Turner    schedule 10.12.2013    source источник
comment
Возможное быстрое решение для многих путем сброса зависимостей проекта - см. Мой ответ ниже: stackoverflow.com/a/34596007/2284031   -  person Ben Wilde    schedule 04.01.2016
comment
stackoverflow.com/a/17723774/1724702   -  person Sachin Joseph    schedule 11.04.2017
comment
В моем случае одна ошибка компилятора скрывалась в стоге сена из нескольких десятков Metadata file could not be found ошибок.   -  person Codes with Hammer    schedule 24.10.2017
comment
Отвечает ли это на ваш вопрос? ​​Не удалось найти файл метаданных '.dll'   -  person Julio Nobre    schedule 27.07.2021


Ответы (27)


В конечном итоге проблема была решена:

  1. Очистите каждый проект по отдельности (Щелкните правой кнопкой мыши> Очистить).
  2. Перестройте каждый проект по отдельности (Щелкните правой кнопкой мыши> Перестроить).
  3. Перестройте запускаемый проект.

Думаю, по какой-то причине простая очистка раствора имела другой эффект, чем отдельная очистка каждого проекта в отдельности.

Изменить:
Согласно комментарию @maplemale, иногда также требуется удаление и повторное добавление каждой ссылки.

Обновление 2019:
Раньше у этого вопроса было много трафика, но, похоже, с момента выпуска VS 2017 ему уделялось гораздо меньше внимания.
Таким образом, было бы еще одно предложение - Обновить к более новой версии VS (> = 2017) и среди других новых функций эта проблема также будет решена

person Avi Turner    schedule 19.12.2013
comment
Мне пришлось это сделать, но с дополнительным шагом. Итак, в моем стартовом проекте были ссылки на другие проекты библиотеки классов / dll в решении. Мне пришлось очистить каждую по отдельности и перестроить, но затем пришлось удалить и заново добавить каждую ссылку. Похоже, это проблема VS 2013. Мне никогда не приходилось делать ничего подобного ни в 2012, ни в 2010 году. - person maplemale; 01.09.2014
comment
@Avi, tnx! Мне пришлось трижды запустить очистку и перестройку для всех проектов ... но в конце концов это сработало. - person Joezer; 25.12.2014
comment
Мне пришлось только очистить проект, содержащий файл, на который ссылается сообщение об ошибке, самостоятельно после того, как решение было очищено для решения этой проблемы. - person adamdc78; 19.02.2015
comment
да ... у меня почти 70 проектов - не занимаюсь этим - person Ben Wilde; 01.01.2016
comment
@Ben, вы можете выбрать их все, все 70 проектов, а затем исключить те, которые потерпели неудачу. Очистите и создайте выделение, а затем Clen & Build оставшиеся проекты. - person user3752281; 01.02.2016
comment
@BenWilde У меня 124 проекта, я выиграл - person Chris W; 17.02.2016
comment
Обычно это происходит, когда у меня открыто несколько экземпляров Visual Studio. Проекты очистки и восстановления помогают, но в большинстве случаев перезапуск VS делает работу за меня. - person mitaka; 14.03.2016
comment
Что за сумасшествие? Я бы никогда не ожидал, что такой трюк действительно сработает ... но он сработал! Иногда я действительно не понимаю черной магии VS = / - person Natalie Perret; 25.01.2017
comment
Вы также должны проверить файлы, которые не включены в ваше решение или включены, но не найдены. У меня была эта проблема, когда я объединял две ветки, и я думаю, что случайно разрешил конфликт .csproj с неправильным вариантом. Когда я включил все отсутствующие файлы и удалил несуществующие из решения (щелкните правой кнопкой мыши файл, загружаемый / выгружаемый в проект), ошибки исчезли. - person MerlinK; 22.05.2017

Насколько я могу судить, это происходит, когда зависимости проекта нарушаются по какой-либо причине (при этом все межпроектные ссылки остаются нетронутыми). Во многих случаях это НЕ проблема кода. А для тех, у кого несколько проектов, выполнение их по одному НЕ приемлемо.

Сбросить зависимости проекта очень просто -

  1. Выберите все проекты и щелкните правой кнопкой мыши на выгрузку.
  2. Выберите все проекты и щелкните правой кнопкой мыши перезагрузить.
  3. Восстановить решение

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

person Ben Wilde    schedule 04.01.2016
comment
На самом деле @Ben Wilde, мне приходится делать это каждый раз, когда я получаю ветку в git. Вы вообще нашли постоянное решение? - person dalcam; 29.06.2016
comment
Иногда обновление Visual Studio предотвращает повторение проблемы. - person Ben Wilde; 14.12.2016

Одна из возможных причин может заключаться в том, что вы обновили некоторые из своих проектов (в решении) до более высокой версии, например. от .NET 4.0 до 4.5 Это произошло в моем случае, когда я открыл решение в VS 2013 (изначально созданное с использованием VS 2010 и .NET 4.0). Когда я открыл VS 2013, мой проект C ++ был обновлен до .NET 4.5, и я начал замечать проблему.

person JSK    schedule 12.06.2014
comment
Именно это и случилось со мной. единственная разница в том, что я обновился с .NET 4.5 до 4.6.1 в VS 2015 - person Alvaro Pereira; 12.04.2016

Обычно такая ошибка возникает из-за человеческих ошибок, например, если мы изменяем пространство имен некорректным образом или меняем имена папок из проводника для текущего проекта и т. Д., Когда компилятор иногда не может обнаружить.

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

  1. Очистить весь раствор
  2. Щелкните правой кнопкой мыши каждый проект в своем решении, перейдите в Свойства и сделайте пространство имен по умолчанию, а также имя сборки по умолчанию таким же, как в вашем коде (т.е. пространство имен перед именем класса)
  3. Проверьте имена папок для каждого проекта, пройдя через проводник (где находится ваше проектное решение). Если они не совпадают с названиями ваших проектов, сделайте их похожими (например, шаг 2) на них.
  4. Удалите все ваши ссылки из каждого проекта, относящегося к другому из того же решения, и добавьте его снова.
  5. В папке Your Project Solution вы найдете файл проекта Visual c #. Щелкните правой кнопкой мыши и откройте с помощью Блокнота. В начальных строках вы найдете строки для каждого проекта, как показано ниже:

Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "**Client**", "**Client** \ **Client**.csproj", "{4503E259-0E3B-414A-9074-F251684322A5}" EndProject

Еще раз проверьте имена папок (я выделил жирным шрифтом) и сделайте их похожими на то, что вы делали на шаге 2.

  1. Снова очистите весь раствор

  2. Создайте решение (если не работает, попробуйте построить индивидуума после очистки снова)

person Pratik Shah    schedule 27.08.2014
comment
У меня была эта проблема в Visual Studio 2013, и шаг 4 сработал для меня! - person Michael; 06.10.2014
comment
Я открыл файл .csproj и удалил все использования / ссылки на отсутствующий файл метаданных, а затем переустановил его, и все заработало! - person mattyb; 04.02.2019

Убедитесь, что все ваши зависимые проекты используют одну и ту же версию .Net Framework. У меня была такая же проблема, вызванная зависимым проектом, использующим 4.5.1, в то время как все остальные использовали 4.5. Изменение проекта с 4.5.1 на 4.5 и восстановление моего решения устранили эту проблему для меня.

person Mark Stratman    schedule 17.12.2015
comment
То же самое, все проекты, кроме одного, были одной версии! - person Stoyan Berov; 12.02.2016
comment
Спасибо за пробежку памяти ;-) Это легко упустить из виду, отправив человека в кроличью нору ... - person Tom Miller; 03.05.2016
comment
спасибо, это действительно помогло для med. Пробовал первые два решения сверху, но безуспешно. - person Mana; 16.08.2016

XYZ не может быть найден, потому что еще не построен ....

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

person Santos    schedule 30.11.2014
comment
Оттуда вы можете изменить порядок сборки для проектов. Иногда зависимости не синхронизируются. - person Carlos Toledo; 01.06.2016

Единственное, что у меня сработало, - это удалить файл параметров пользователя решения (.suo). Обратите внимание, что это скрытый файл.

Чтобы найти этот файл, закройте студию Virsual и найдите .suo в файловом проводнике вашего проекта.

Удалить файл .suo

PS: новый файл .suo будет создан снова, когда вы перестроите свой проект, и, надеюсь, этот вновь созданный файл не вызовет у вас проблем.

Надеюсь, это поможет кому-то избавиться от этой надоедливой ошибки :).

person Tshilidzi Mudau    schedule 23.08.2017

У меня была эта проблема несколько дней! Я перепробовал все вышеперечисленное, но проблема повторялась. Когда отображается это сообщение, оно может означать «один или несколько проектов в вашем решении не были правильно скомпилированы», поэтому метаданные для файла никогда не записывались. Но в моем случае других ошибок компилятора я не увидел !!! Я продолжал пытаться скомпилировать каждое решение вручную, и только после того, как VS2012 действительно выявил некоторые ошибки компилятора, которых я раньше не видел, эта проблема исчезла.

Я дурачился с порядками сборки, без заказов на сборку, ссылками на отладочные dll (которые были скомпилированы вручную) ... НИЧЕГО не работало, пока я не нашел эти ошибки, которые не проявлялись при компиляции всего решения !!!!

Иногда кажется, что при компиляции компилятор завершает работу из-за некоторых ошибок ... Я видел это в прошлом, когда после исправления проблем последующие компиляции показывают НОВЫЕ ошибки. Я не знаю, почему это происходит, и у меня довольно редко возникают эти проблемы. Однако, когда они у вас есть, очень сложно понять, что происходит. Удачи!

person JWP    schedule 24.08.2014

Что ж, мой ответ - это не просто краткое изложение всех решений, он предлагает нечто большее.

Секция 1):

В общих решениях:

У меня было 4 ошибки такого типа («файл метаданных не найден») и 1 ошибка «Не удалось открыть исходный файл (« Неопределенная ошибка »)».

Я попытался избавиться от ошибки «файл метаданных не найден». Для этого я прочитал много сообщений, блогов и т. Д. И обнаружил, что эти решения могут быть эффективными (резюмируя их здесь):

Перезагрузите VS и попробуйте снова построить.

Перейдите в «Обозреватель решений». Щелкните правой кнопкой мыши Решение. Зайдите в Свойства. Перейдите в «Диспетчер конфигураций». Проверьте, установлены ли флажки в разделе «Сборка». Если какой-либо из них или все они не отмечены, отметьте их и попробуйте построить снова.

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

Порядок сборки и зависимости проекта:

Перейдите в «Обозреватель решений». Щелкните правой кнопкой мыши Решение. Перейдите в «Зависимости проекта ...». Вы увидите 2 вкладки: «Зависимости» и «Порядок сборки». В этом порядке сборки выполняется сборка решения. Проверьте зависимости проекта и порядок сборки, чтобы убедиться, что какой-то проект (скажем, «project1»), который зависит от другого (скажем, «project2»), пытается построить до этого (project2). Это могло быть причиной ошибки.

Проверьте путь к отсутствующей .dll:

Проверьте путь к отсутствующей .dll. Если путь содержит пробел или любой другой недопустимый символ пути, удалите его и попробуйте построить снова.

Если это причина, измените порядок сборки.

person NGANGA NICHOLAS aka    schedule 30.03.2016

Используете ли вы в своем проекте инструмент для создания кода базы данных, такой как SQLMETAL?

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

В моем случае я заметил, что некоторые старые имена таблиц во множественном числе (*) (после которых SQLMETAL добавляет, по умолчанию, букву «s» в конце) ссылаются на классы, созданные SQLMETAL.

Поскольку я недавно отключил Плюрализацию имен, после повторного преобразования некоторых классов, связанных с базой данных, некоторые из них потеряли свой префикс «s». Следовательно, все ссылки на затронутые классы таблиц стали недействительными. По этой причине у меня есть несколько ошибок компиляции, например:

«xxxx» не содержит определения для «TableNames», и метод расширения «TableNames», принимающий первый аргумент типа «yyyy», не может быть найден (вам не хватает директивы using или ссылки на сборку?)

Как вы знаете, я принимаю только ошибку, чтобы предотвратить компиляцию сборки. Отсутствующая сборка может быть связана с зависимыми сборками, в результате чего исходный «файл метаданных 'XYZ' не может быть найден»

После исправления ссылок на таблицы затронутых классов вручную на их текущие имена (без исключения) я наконец смог вернуть свой проект к жизни!

(*) Если вариант Visual Studio> Меню инструментов> Параметры> Инструменты базы данных> Конструктор O / R> < strong> Плюрализация имен включена, некоторые генераторы кода SQLMETALl будут добавлять букву «s» в конце некоторых сгенерированных классов таблиц, хотя таблица не имеет суффикса «s» в целевой базе данных . Для получения дополнительной информации см. http://msdn.microsoft.com/en-us/library/bb386987%28v=vs.110%29.aspx

Надеюсь, поможет!

person Julio Nobre    schedule 14.05.2014
comment
Спасибо за ваш комментарий, но я не использую никаких инструментов для создания кода базы данных. И я опубликовал, что решило проблему. Но кто знает, ваш ответ может помочь гуглерам ... - person Avi Turner; 14.05.2014
comment
@ Хулио, твой ответ мне помог. Я страдал от этого в прошлом и забыл, что это за исправление. Я наткнулся на ваш ответ на этот вопрос, и, хотя это не моя точная ситуация, этого было достаточно, чтобы вызвать мою память. Сначала я использую Entity Framework db с включенным множественным числом, и время от времени я сталкиваюсь с этой проблемой, потому что одна из моих таблиц имеет имя во множественном числе, а все остальные - в единственном числе. - person user1843640; 20.11.2014

У меня возникла эта ошибка. Я выполнил все приведенные здесь решения, но ничего не помогло. Я использовал Visual Studio 2013 Professional. Мне не удавалось заставить работать отдельные пересборки проекта, и я наконец понял, что существует циклическая зависимость в моих ссылках. Visual Studio обычно неплохо предупреждает вас, если вы добавляете ссылку на что-то, что ссылается обратно, но по какой-то причине в данном случае этого не произошло. Я добавил ссылку на проект, который ссылался на проект, над которым я работал, - и он ее принял. Возможно, ошибка VS?

person csharpforevermore    schedule 20.11.2014

Мои 5 центов.

Эта проблема началась после полной очистки решения.

Мне удалось решить эту проблему, установив конфигурацию активного решения в: Сборка -> Диспетчер конфигурации для выпуска. Затем соберите и снова установите отладку. После этого сборка прошла успешно.

person Yeronimo    schedule 08.12.2014

Закройте VS, найдите и удалите папку «пакеты» за пределами Visual Studio. Перезагрузите VS и выполните сборку -> все зависимости переустановлены.

person tfa    schedule 12.07.2016

Сообщество Visual Studio 2019 16.3.10
У меня была аналогичная проблема со сборкой Release. Сборка отладки компилировалась без проблем. Оказывается, проблема была вызвана OneDrive. Скорее всего, могут возникнуть аналогичные проблемы с любым диском с резервной копией или облачным сервисом.

Я очистил все в соответствии с отличным ответом Ави Тернера.

Кроме того, я вручную удалил папку \ obj \ Release из моей папки OneDrive, а также вошел в OneDrive с помощью браузера и удалил папку там также, чтобы предотвратить загрузку облачной версии OneDrive обратно при компиляции.
После этого перестроил и все заработало как надо.

person Sami    schedule 03.12.2019

это происходит из-за разницы имен в имени папки и имени пространства имен. Если вы создаете пространство имен с определенным именем, а затем переименуете его, пространство имен будет иметь старое имя. И компиляция будет использовать старый путь, чтобы найти файлы .dll и .exe. Чтобы избежать этого, откройте .csproj файл каждого пространства имен с помощью текстового файла и найдите старый путь в файле.

удалите это, очистите и восстановите раствор. Это сработало для меня. Я целый день работал над этой проблемой.

person Sooraj    schedule 29.09.2014

У меня было это, и мне удалось исправить это, используя этот ответ SO: ​​Файл метаданных '.dll 'не удалось найти

Мне пришлось снять все флажки, нажать «Применить», снова включить все флажки, а затем снова нажать «Применить», но проблема устранилась.

person Karl Gjertsen    schedule 18.04.2017

Я только что столкнулся с этой проблемой и после часа экспериментов понял, что добавил в свой продукт файл aspx с тем же именем, что и один из моих Linq-To-Sql классы.
Класс и страница, где находится «Очередь».
Изменил страницу на QueueMgr.aspx, и все было построено нормально.

person Ted Krapf    schedule 15.08.2017

Для новой сборки могут быть не установлены некоторые зависимости. Для меня это были Crystal Reports.

person Roberto    schedule 26.09.2014

Это происходит, когда одна DLL проекта выходит из строя, и на это ссылается количество проектов. Так что сначала исправьте это, а затем создайте индивидуумов.

person Muzammil Tamboli    schedule 27.11.2014
comment
Это неправда. В противном случае проект не будет компилироваться и запускаться, но проблемы возникают во время выполнения. Кроме того, как я уже упоминал My code is compiling and running. - person Avi Turner; 27.11.2014
comment
Я прочитал комментарий 16 и следил за ним, поскольку какое-то время боролся. К счастью, я понял, что один проект dll под названием PDIAPI терпит неудачу из-за неправильного кода, и мне пришлось его исправить. После его успешной компиляции я скомпилировал ссылочные проекты. Это принесло мне успех. Я думал, что это может помочь и другим. - person Muzammil Tamboli; 27.11.2014

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

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

person Enver A    schedule 11.12.2014

Есть еще одна глупая причина, которую вы должны проверить с терпением ... как это пришло мне в голову после того, как я потратил 4 часа на поиск ответов:

Для меня история заключалась в том, что я случайно изменил небольшую строчку кода среди тысяч файлов классов C #, а затем попытался перестроить решение. Как вы могли догадаться, у меня было более 40 ошибок, связанных с отсутствием файла метаданных, и одна ошибка компиляции среди них, которую я не проверял внимательно, просто думая, что все ошибки были одинаковыми!

после 4 часов поиска и случайной двойной проверки списка ошибок я обнаружил эту глупую ошибку кода, исправил ее, скомпилировал, а затем ошибка исчезла.

Не лучший ответ на вашу проблему, но очень надеюсь, что мой случай отличался от вашего.

person Lida Weng    schedule 23.02.2015

У меня такая же проблема. В моем случае я по ошибке выделил все проекты отдельно от проекта с основным методом в качестве консольного приложения.

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

person diva    schedule 06.11.2015

это произошло со мной, потому что у меня странное столкновение в пространствах имен: у меня была AssemblyA с пространством имен AssemblyA.ParentNamespace, которая определяет ClassA, и в той же сборке другое пространство имен с именем AssemblyA.ParentNamespace.ChildNamespace, которое определяет другой ClassA (но с то же имя)

У меня тогда в AssemblyA.ParentNamespace у IInterfaceB был метод, который вначале возвращает IEnumerable, а ведьма ClassB реализует IInterfaceB

Позже я изменил метод в ClassB, чтобы вернуть IEnumerable, но я забыл обновить определение IInterfaceB, поэтому метод там все еще возвращал IEnumerable, забавным фактом было то, что решение все еще компилируется, если я все перестроил, но тесты ведьма ссылается на AssemblyA не работает и возвращает ошибку «Не удалось найти файл метаданных».

обновление InterfaceB для правильного возврата IEnumerable, поскольку его разработчик ClassB решил проблему, к сожалению, сообщение об ошибке было расплывчатым, а также тот факт, что компиляция сработала, заставляет меня предположить, что, возможно, есть что исправить в компиляторе

person Mosè Bottacini    schedule 05.09.2016

Сотрудник столкнулся с этой проблемой, и причина ускользнула от нас. В конце концов мы поняли, что каталог проекта (и, следовательно, путь к пакетам NuGet) содержит %20 (спасибо, какой-то инструмент Git gui, который не должен называться), и сообщения об ошибках показали, что компилятор ищет очень похожий путь, но тот, который должен был %20, а скорее пробел. Видимо что-то в системе сборки где-то выполняет HTML-декодирование для путей локальной файловой системы.

Переименовал каталог рабочей копии и все заработало.

person Ben Voigt    schedule 15.04.2019

У меня тоже была эта проблема.

Это началось после того, как я немного привел в порядок папку в моем проекте. Затем я попытался скомпилировать и получил много повторяющихся ошибок класса. (несмотря на то, что они не дублируются. Я думаю, что связь просто вышла из строя)

После проверки все ошибки исчезнут, останется только ошибка «Файл метаданных ... debug \ application.exe не найден».

Я решил это, посмотрев в окне вывода сборки, чтобы найти, какие классы были дублированы.

Затем я бы щелкнул правой кнопкой мыши имя класса и «перейти к определению».

будет два определения для выбора, откройте их оба, второе определение будет похоже снова открывать тот же файл, однако второе будет идентифицировано как источник ошибки (красное подчеркивание).

Удалите весь код из файла и сохраните его (это не повлияет на ваш фактический файл).
Теперь он должен правильно скомпилироваться.

person Kezzla    schedule 30.12.2019
comment
Со мной тоже случилось - я изменил сигнатуру метода в классе, добавив параметр, дал ему значение по умолчанию, но не обновил интерфейс. - person MarkD; 12.05.2020

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

Я использую Windows 10 с Visual Studio Community 2019, и я клонировал многопроектное решение, как это было из репозитория GIT. У меня была эта ошибка со всеми другими зависимостями в решении вместе с ошибкой E_POINTER. В его пути, унаследованном от GIT, были пробелы вроде C: / repos / МОЕ НАЗВАНИЕ ПРОЕКТА / ...

Я удалил его, снова клонировал и убедился, что в его пути нет пробелов вроде C: / repos / MY_PROJECT_NAME / ...

Это устранило мою проблему.

person Ph0b0x    schedule 03.09.2020

У меня тоже была такая же проблема.

В моем случае я недавно добавил внутренний класс где-нибудь в проекте. Одна из зависимостей в решении имеет то же имя класса, и обе они правильно добавлены в ссылки.

Я изменил свою последнюю активность и перестроил, все работает.

Убедитесь, что сообщения вашего компилятора действительны. В моем случае я отлавливаю оттуда справочную ошибку, которая не указана как ошибка в Списке ошибок.

person Abdullah Ilgaz    schedule 10.09.2020