Файл метаданных '.dll' не найден

541

Я работаю над проектом WPF, С# 3.0, и я получаю эту ошибку:

Error 1 Metadata file
'WORK=- \Tools\VersionManagementSystem\BusinessLogicLayer\bin\Debug
\BusinessLogicLayer.dll' could not be found C:\-=WORK=- \Tools
\VersionManagementSystem\VersionManagementSystem\CSC VersionManagementSystem

Вот как я ссылаюсь на свои пользовательские элементы управления:

xmlns:vms="clr-namespace:VersionManagementSystem"
<vms:SignOffProjectListing Margin="5"/>

Это происходит после каждой неудачной сборки. Единственный способ получить решение для компиляции - закомментировать все мои пользовательские элементы управления и пересобрать проект, а затем я раскомментирую пользовательские элементы управления, и все в порядке.

Я проверил порядок сборки и конфигурации зависимостей.

Как видите, похоже, что урезан абсолютный путь к файлу DLL... Я читал, что есть ошибка с длиной. Это возможная проблема?

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

  • 2
    У меня была похожая проблема (возникла та же ошибка, которая указана в заголовке), и я обработал ее, очистив и перестроив проект. Чтобы правильно ссылаться на другие проекты, я понятия не имею ..
  • 0
    Есть ли на этот вопрос ответ, который будет квалифицирован как принятый? Я нахожу один из @Matt_Bro довольно хорошим.
Показать ещё 8 комментариев
Теги:
wpf
c#-3.0
visual-studio-2008

66 ответов

672
Лучший ответ

У меня была такая же проблема. Visual Studio не создает проект, на который ссылаются.

  • Щелкните правой кнопкой мыши на решении и выберите "Свойства".
  • Нажмите "Конфигурация" слева.
  • Убедитесь, что флажок в поле "Создать" для проекта, который он не может найти, проверяется. Если он уже установлен, снимите флажок, нажмите и снова установите флажки.
  • 151
    И, в моем случае, несмотря на то, что флажок был установлен, снятие флажка и повторная проверка исправили проблему.
  • 10
    Это решило мою проблему - я должен был сделать это для обоих режимов Release и Debug в свойствах решения. Спасибо!
Показать ещё 40 комментариев
187

Это все еще может произойти в более новых версиях Visual Studio (у меня только что это произошло в Visual Studio 2013):

Еще одна попытка - закрыть Visual Studio и удалить файл .suo который находится рядом с файлом .sln. (Он будет сгенерирован заново при следующем Save all (или выходе из Visual Studio)).

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

Обратите внимание, что при удалении файла .suo будут сброшены стартовые проекты решения.

Подробнее о файле .suo здесь.

  • 18
    Это решило проблему для меня. Также стоит отметить, что файлы .suo скрыты. Так что вам придется настроить свой обозреватель для отображения скрытых файлов.
  • 5
    Я работаю с проектом Xamarin, и файл .suo находится в папке .vs /. Я попытался удалить его, и это не решило мою проблему
Показать ещё 11 комментариев
123

Предлагаемый ответ не работает для меня. Ошибка является приманкой для другой проблемы.

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

  • 9
    Мне удалось исправить, сопоставив платформу для проекта с более высокой версией, указанной в предупреждающем сообщении, щелкнув правой кнопкой мыши проект> Свойства> Приложение> Target Framework.
  • 1
    То же самое для меня, используя vs2015.
Показать ещё 7 комментариев
82

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

Секция 1):

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

У меня было четыре ошибки такого типа ("файл метаданных не найден"), а также одна ошибка: "Не удалось открыть исходный файл (" ошибка не определена ")".

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

  1. Перезапустите Visual Studio и повторите сборку.

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

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

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

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

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

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

    Если это причина, то отрегулируйте порядок сборки.


Раздел (2):

Мой частный случай:

Я попробовал все шаги выше с различными перестановками и комбинациями с перезапуском Visual Studio несколько раз. Но это не помогло мне.

Итак, я решил избавиться от другой ошибки, с которой мне пришлось столкнуться ("Невозможно открыть исходный файл (" ошибка не определена ")").

Я наткнулся на сообщение в блоге: Ошибка TFS - Невозможно открыть исходный файл ("Неопределенная ошибка")

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


Раздел (3):

Мораль истории:

Попробуйте все решения, как указано в разделе (1) выше (и любые другие решения), чтобы избавиться от ошибки. Если ничего не получится, как в блоге, упомянутом в разделе (2) выше, удалите записи всех исходных файлов, которых больше нет в исходном элементе управления и файловой системе, из вашего файла .csproj.

  • 4
    Моя проблема была в Построении заказа / Зависимости проекта. Удаление и добавление обратных ссылок из других проектов исправит это (я думаю), но вы также можете сделать это сами.
  • 4
    Я столкнулся с этой проблемой, .NET v4.5 проект .NET v4.5 до .NET v.4 .
Показать ещё 11 комментариев
32

В моем случае это было вызвано несоответствием версии .NET Framework.

Один проект был 3.5, а другой ссылающийся на проект 4.6.1.

  • 1
    Это также происходит между 4.5.2. 4,6
  • 1
    Действительно, у меня был один из 4.6.1, а остальное было 4.5.2, спасибо!
Показать ещё 3 комментария
23

Закрытие и повторное открытие Visual Studio 2013 сработало для меня!

  • 4
    Restart VS 2015 тоже работает.
  • 0
    Получил эту проблему после отмены изменений в файлах проекта. Перезапустил VS2015 и решил проблему
Показать ещё 1 комментарий
16

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

Мне казалось очевидным, что эта неправильная ссылка на файл метаданных должна где-то храниться.

Быстрый поиск файла .csproj выявил виновные строки. У меня был раздел под названием <itemGroup>, который, казалось, висел на старом неправильном пути к файлу.

<ItemGroup>
    <ProjectReference Include="..\..\..\MySiteOld\MySite.Entities\MySite.Entities.csproj">
        <Project>{5b0a347e-cd9a-4746-a3b6-99d6d010a6c2}</Project>
        <Name>Beeyp.Entities</Name>
    </ProjectReference>
...

Итак, простое исправление действительно:

  1. Сделайте резервную копию вашего .csproj файла.
  2. Найдите неправильные пути в файле .csproj и переименуйте соответствующим образом.

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

  • 29
    пожалуйста, убедитесь, что вы используете контроль версий, прежде чем делать что-либо
13

Я получил ту же ошибку "Файл метаданных '.dll' не может быть найден", и я попробовал несколько вещей, описанных выше, но причина ошибки заключалась в том, что я ссылался на сторонний файл DLL, который был нацелен на версию .NET что мой проект целевой .NET версия. Таким образом, решение состояло в том, чтобы изменить целевую структуру моего проекта.

  • 0
    Ну, я собирался ответить на то же самое, в моем случае я добавил новый проект, нацеленный на .Net 4.5.x, и это начало происходить, когда в этом проекте я добавил ссылку на проект, который использовал .Net 4.6.
13

Я также встретил эту проблему. Во-первых, вам нужно вручную создать проект DLL, щелкнув правой кнопкой мыши Build. Тогда это сработает.

  • 13
    Хотя это исправление работает, на самом деле оно не решает проблему и может привести к более серьезным проблемам. Прежде всего, если вы работаете с кодом в репозитории, это плохая форма - требовать от нового разработчика перепрыгивать через обручи, чтобы получить код до точки его сборки. Во-вторых, чтобы увидеть изменения в ссылочном проекте, вам придется каждый раз вручную перестраивать его. Пожалуйста, смотрите мой ответ для более надежного решения проблемы.
  • 0
    В моем случае он даже не строит проект индивидуально, он выдает мне ту же ошибку. Допустим, мой проект называется «proj1», когда я его создаю (как вы сказали, вручную), он дает мне Metadata file ...proj1.dll could not be found !
10

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

Причина? Проект, который я привел, был нацелен на другую среду .NET(4.6, а два других были 4.5.2).

  • 1
    Я не знаю, почему сейчас, но я работал над такими проектами в течение года. мой подпроект был 4.6.1, а основной проект 4.5.2. это работало без проблем. внезапно я получаю эту ошибку, но я не хочу понижать суб-проект, потому что он имеет функцию, существующую в 4.6.1, я не верю, что это проблема. Microsoft объясняет, что это все еще должно работать
  • 0
    TLDR: проверьте предупреждения компиляции. Это то, что случилось со мной, но с изюминкой. Проекты были на 4.5.2. Добавлены новые проекты на 4.6. Установленные пакеты nuget на 4.6 проектов. Понизил 4.6 проектов до 4.5.2. Ягоды ожидали 4.6. Понижение нюгетов решено.
10

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

Если ваш путь решения - это что-то вроде "Мое Project% 2c Very Popular% 2c Unit Testing% 2c Software и Hardware.zip", он не может разрешить файл метаданных, возможно, нам следует предотвратить некоторые недопустимые слова, такие как% 2c.

Переименование пути в обычное имя разрешило мою проблему.

  • 1
    Не могли бы вы более подробно проработать свой ответ, добавив немного больше описания предлагаемого вами решения?
  • 0
    Мой git clone добавил% к моему пути к папке, удалив это, решив проблему.
Показать ещё 1 комментарий
9

Для меня это произошло, когда я включил новый проект в решение.

Visual Studio автоматически выбирает .NET Framework 4.5.

Я перешел на версию .NET 4.5.2, как и другие библиотеки, и это сработало.

8

Я тоже решил эту проблему, но, попробовав предыдущие ответы, единственное, что мне помогло, - это открыть каждый проект в моем решении 1 на 1 и построить их по отдельности.

Затем я закрыл Visual Studio 2013, снова открыл свое решение, и оно скомпилировалось нормально.

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

  • 1
    Тьфу, это. Так много вещей, которые Microsoft требует перезагрузки, чтобы снова работать.
8

Для меня сработали следующие шаги:

  • Найти проект, который не строит
  • Удалить/добавить ссылки на проекты в рамках решения.
  • 0
    Щелкните правой кнопкой мыши ссылку «папка» в обозревателе решений, «удалить неиспользуемые ссылки». Я сделал это на всех моих проектах в этом решении, он добился цели
8

Для меня он пытался найти DLL в пути, который использовался для содержания Project, но мы перенесли его в новый каталог. Решение имело правильный путь к проекту, но Visual Studio каким-то образом продолжала искать в старом расположении.

Решение. Переименуйте каждую проблему. Проект - просто добавьте символ или что-то еще - затем переименуйте его обратно в исходное имя.

Это должно быть reset некоторый глобальный кеш какого-то типа в Visual Studio, потому что это очищает и эту проблему, и несколько подобных ей, в то время как такие вещи, как Clean, не работают.

7

Мой пример проблемы был вызван общим проектом, в котором было дублированное имя класса (под другим именем файла). Странно, что Visual Studio не смогла обнаружить это и взорвала процесс сборки.

  • 0
    Это комментарий, ответ или новый вопрос? Также обратите внимание, что ОП с 2009 года
  • 8
    Это дополнительное решение той же проблемы. Я знаю, что ОП старая, но, основываясь на последних двух постах, люди все еще находят другие причины. Просто пытался спасти следующего парня от некоторого разочарования, поскольку ни одно из других решений не помогло мне.
Показать ещё 1 комментарий
6

В моем случае проблема была вызвана простой ошибкой сборки,

ошибка CS0067: событие 'XYZ' никогда не используется

который по какой-либо причине не появился в окне ошибок.

Из-за этого система сборки Visual Studio, похоже, пропустила ошибку и попыталась построить зависимые проекты, которые, в свою очередь, потерпели неудачу с раздражающим сообщением метаданных.

Рекомендация -as глупа, как может sound-:

Сначала посмотрите на ваше окно вывода!

Мне потребовалось полчаса, прежде чем эта идея поразила меня...

  • 0
    Я думаю, что каждый должен смотреть на этот ответ. Посмотрите в окне вывода сборки и посмотрите, есть ли там какие-либо ошибки или предупреждения, а затем исправьте их. Задача решена. Спасибо Хайнц Кесслер за ваш ответ.
6

Я получил эту проблему в Visual Studio 2012 в решении, в котором было много проектов. Перестройка каждого проекта в решении вручную в том же порядке, в котором он был исправлен в порядке сборки проекта (щелчок правой кнопкой мыши и перестроение в обозревателе решений).

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

  • 0
    Решение восстановления работало для меня.
  • 0
    В моем случае ошибка скрывалась до тех пор, пока я не открыл Visual Studio 2015 в режиме администратора. Только тогда он показал ошибку компиляции. После исправления я мог продолжить.
5

Я столкнулся с той же проблемой. В моем случае я ссылался на проект библиотеки классов с более высокой версией .Net, чем у моего проекта, и VS не смог собрать проект и вывел ту же ошибку, что и вы.

Я просто установил .Net-версию своего проекта библиотеки классов (тот, который сломал сборку), идентичный .Net-версии ссылочного проекта, и проблема решена.

  • 1
    Это!!! Хотя вышеприведенный ответ был хорошим, я просто упустил из виду это. Спасибо, сэр.
  • 0
    @RhysJohns счастливого кодирования :)))
5

Похоже, такие ошибки связаны с тем, что Visual Studio не предоставляет правильную информацию об ошибке. Разработчик даже не понимает причину неудачной сборки. Это может быть синтаксическая ошибка или что-то еще. В общем, для решения таких проблем вы должны найти корень проблемы (например, посмотрите журнал сборки).

В моем случае проблема была в том, что в окне Error List не было ошибок. Но на самом деле были синтаксические ошибки; Я нашел эти ошибки в окне " Output, и после их устранения проблема была решена.

5

У меня тоже была такая же ошибка. Он прячется как на пути ниже. Путь, на который я ссылался для файла DLL, выглядит как "D:\Assemblies Folder\Assembly1.dll".

Но исходный путь, на который ссылалась сборка, был "D:\Assemblies %20Folder\Assembly1.dll".

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

Решение в вопросе. Как заменить все пробелы на %20 в С#? ,

5

В моем случае проблема заключалась в том, что я вручную удалил файл без компиляции, который был помечен как "отсутствует". Как только я удалил ссылку на текущий файл и перекомпилировал - все было хорошо.

5

Возвращаясь к этому через несколько лет, эта проблема, скорее всего, связана с максимальным пределом пути Windows:

Именование файлов, путей и пространств имен, ограничение максимальной длины пути

  • 0
    Который...? 260? Или чуть меньше (на практике)?
4

Для моего случая это было то, что я закомментировал классы в определенном (пустом) пространстве имен:

namespace X.Y.Z.W
{

    // Class code

}

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

В сборке также говорилось - вместе с отсутствующим файлом DLL проекта:

ошибка CS0234: имя типа или пространства имен 'W' не существует в пространстве имен 'XYZ' (отсутствует ссылка на сборку?)

4

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

#if DEBUG
    public int SomeProperty { get; set; }
#endif

но использование свойства не было. Публикация была выполнена в конфигурации Release без символа DEBUG, очевидно.

4

Просто указывая на откровенно очевидное: если у вас нет "Показать окно вывода при запуске сборки", убедитесь, что вы заметили, что ваша сборка не работает (небольшая ошибка "build failed" в левом нижнем углу)!!!

  • 0
    У меня недавно было что-то похожее - совершенно неожиданно, сотни ошибок cs0006 в журнале ошибок, но больше ничего (и я прочесал это с очень хорошей расческой). В конце концов (!) Я подумал о том, чтобы посмотреть в окно «Вывод», и была обнаружена ошибка компилятора, и, конечно же, в коде ошибки была красная заглушка под ним. Я понятия не имею, почему об ошибке не сообщили в окне ошибок. VS2017 Предприятие.
4

Если у вас есть место в имени вашего решения, это также вызовет проблему. Удаление пространства из имени вашего решения, поэтому путь не содержит %20.

4

Я использую Visual Studio 2013.

Похоже, что зависимости сборки были неправильными. Удаление файлов *.suo решило проблемы, которые у меня были.

4

Эта ошибка может быть показана, если вы используете поддельные сборки. Удаление подделок приводит к успешной сборке проекта.

  • 0
    Что такое «поддельная сборка»? Можете ли вы уточнить? (Ответьте, расширив свой ответ.)
3

У меня был класс в 4.6.1, обновляющий интерфейс, который был в 4.6.2... обновление класса до 462 исправило его.

3

Удаление папки с packages содержащей NuGet, в папке решения работало для меня. После восстановления все снова заработало. Проверьте References в решении и проверьте ссылки, которые имеют желтый треугольник.

Пример изображения:

Изображение 1033

3

В моем случае у меня была эта ошибка, потому что один из моих проектов использовал версию платформы .NET, отличную от других решений. Я использовал менеджер пакетов NuGet для установки NLog, поэтому, я думаю, он был установлен для .Net-версии этого проекта.

Я попробовал все решения из этого поста, но ни один не работал. Я удалил NLog, очистил решение и попытался скомпилировать: то же самое, ошибка CS006.

Когда я удалил все файлы в obj\Debug из этого проекта, решение было скомпилировано.

3

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

После того, как все пакеты NuGet были исправлены, проект снова может быть собран правильно.

3

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

Я взял .dll, декомпилировал и сгенерировал проекты и решения. Я не смог построить решение из-за нескольких ошибок такого рода.

Советы в предыдущих ответах не помогли, но через некоторое время я заметил пропущенные ссылки в некоторых проектах на несколько сборок, таких как System.dll.

Предположим, что существует проект A, зависящий от проекта B. В проекте B не было ссылки на System.dll, но ошибка после сборки выглядела как "Файл метаданных" B.dll "не найден".

Не было ошибки об отсутствии System.dll в проекте B.

Добавление ссылки на библиотеки типа System.dll в проекте B решило проблему. (System.Data, System.DirectoryServices и т.д.)

  • 0
    Пропавшие проекты и ссылки здесь для меня тоже! Проверьте свои предупреждения, а не ошибки
3

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

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

3

Я получил эту ошибку после открытия проекта, в котором была ссылка на Entity Framework, поэтому я удалил такие ссылки и переустановил Entity Framework версии 6.0.0.0 через pcket-менеджер следующим образом:

install-package entityframework -version 6.0.0.0

Ошибка все еще показывалась, поэтому я подумал, что эти ссылки были там, потому что в проекте была более ранняя версия Entity Framework, предположительно "предустановленная", но на самом деле она не работала.

Поэтому я подошел к файлу packages.config и заметил, что есть еще одна ссылка:

<packages>
  **<package id="EntityFramework" version="5.0.0" targetFramework="net45" />**
  <package id="EntityFramework" version="6.0.0" targetFramework="net45" />
</packages>

Затем я удалил строку, очистил и перестроил проект и контейнерное решение, и оно наконец заработало.

3

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

РАБОЧИЕ = -\Tools\VersionManagementSystem\BusinessLogicLayer\Bin\Debug\BusinessLogicLayer.dll

Это неверный путь. Возможно ли, что у вас есть определение макроса в процессе сборки, установленное на недопустимое значение?

  • 0
    Я не знаю, как, поскольку я ничего не изменил, и у меня нет пользовательских событий или конфигураций сборки
2

В моем случае ReSharper был глуп, и, хотя мой проект нацелен на С# 6, мне предлагали рефакторинг для использования функций только С# 7.

По этой причине я закончил тем, что изменил этот код,

private DateTime? _joinedDate;
[Column(TypeName = "DateTime2")]
public DateTime JoinedDate
{
    get { return _joinedDate ?? DateTime.Now; }
    set { _joinedDate = value; }
}

в этот код:

private DateTime? _joinedDate;
[Column(TypeName = "DateTime2")]
public DateTime JoinedDate
{
    get => _joinedDate ?? DateTime.Now;
    set => _joinedDate = value;
}

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

  • 0
    Тоже самое. Но в моем случае я использовал синтаксис C # 8.
2

aaaaaand шесть лет спустя во время обновления до Visual Studio 2015 такая же проблема. Поскольку это конкретное решение отсутствует в этом списке, я добавляю к нему.

Две ссылочные dll находились в папке c:\windows\system32.... Перемещение их в не системную папку и добавление ссылки на новую папку наконец-то исправили. Остальные вопросы были действительно тем, что уже говорили здесь уже

  • 1
    Просто была такая же проблема с одним из проектов в моем решении. Снятие отметки и проверка «сборки» не сработали. Для меня было уловкой удалить проект из решения и добавить его снова.
  • 0
    @AlexanderDerck Unload and Reload в проекте сделали это для меня. Попробовав кучу ответов здесь. Спасибо за чаевые!
2

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

2

Причиной проблемы может быть смешанное добавление ссылок на файлы DLL и проекты в решении.

Если у вас есть проекты A, B и C:

  • Ссылки B и C как проекты в решении.
  • B ссылается на C как файл DLL (ссылка на файл)

Вы можете построить каждый проект отдельно, но не можете перестроить решение, заканчивающееся на: файл метаданных 'C.dll' не найден.

Помогает изменение ссылки из файла на проект в решении.

  • 0
    Забавно, как это проявляется в качестве решения этой проблемы, но в моем случае это была настоящая проблема.
2

У меня была эта проблема, потому что .nuget\NuGet.exe не был включен в мой репозиторий. Хотя я включил DownloadNuGetExe в NuGet.targets, он сообщал об ошибке прокси при попытке загрузить его. Это привело к сбою остальных сборок проекта.

1

Моя проблема возникла, когда я написал код на С# 7, но проект использовал более старую версию для .net Framework

1

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

1

Как указывает пользователь @burzhuy, может быть важно взглянуть на окно Output, а не только на окно Error List.

В моем случае я работал над внесением изменений в компилятор Roslyn. Его проекты сборки запускают дополнительную проверку, чтобы увидеть, согласуются ли открытые поля с тем, что было определено как открытый интерфейс компилятора, в противном случае он выдает ошибку RS0016 или RS0017. Я добавил пару открытых полей и исправил ошибку RS0016, наведя указатель мыши на ошибку и выбрав "Добавить в публичный API".

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

Вам нужно найти правильный файл PublicAPI.Unshipped.txt (в моем случае это был E:\Roslyn\32414\src\Compilers\Core\Portable) и отредактировать его вручную, чтобы удалить E:\Roslyn\32414\src\Compilers\Core\Portable строки.

1

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

Мне пришлось прекратить отладку, а затем он позволил мне построить успешно.

1

Я столкнулся с этой проблемой. В моем случае несколько С# проектов упоминались как файлы DLL. Любая ошибка времени компиляции в проекте, который используется как файл DLL (в других проектах), может привести к потоку ошибок. Причина в том, что ошибка времени компиляции предотвращает создание соответствующего файла DLL, и это приводит к серии ошибок в проектах, которые ссылаются на отсутствующий файл DLL.

Поэтому, когда вы перестраиваете в Solution Explorer (игнорируя тривиальные ошибки времени компиляции), возникает куча ошибок "файл метаданных .dll не найден" (что заставляет вас думать, что вы сделали не так, как простое перестроение).

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

1

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

1

Я столкнулся с этой ошибкой в Visual Studio 2015, когда удалил аннотацию типа из вызова метода расширения, из-за которого остались только пустые угловые скобки.

Поэтому вместо obj.extensionMethod<Type>() меня был obj.extensionMethod<>().

Я бы классифицировал это как ошибку в Visual Studio, так как не вижу, как эта ошибка может привести к этой ошибке.

1

Вау, похоже, что эта ошибка может прийти отовсюду.

В любом случае, я добавил новый контроллер WebAPI в свое приложение MVC, и он автоматически получил все ссылки от NuGet. Чуть позже я удалил ссылки из интерфейса NuGet, но я забыл удалить файлы, используя их (например, System.Http).

По какой-то причине я получил сообщение об ошибке, а также простое предупреждение о том, что переменная не используется.

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

1

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

1
  • Щелкните правой кнопкой мыши на решении и нажмите "Очистить".
  • Щелкните правой кнопкой мыши на решении и нажмите "Восстановить".
0

Когда я делал сборку, в Visual Studio 2017 обычно отображались такие ошибки:

Error   CS0006  Metadata file 'C:\src\ProjectDir\MyApp\bin\x64\Debug\Inspection.exe' could not be found MyApp   C:\src\ProjectDir\MyApp\CSC 1   Active

Но иногда такая ошибка будет отображаться в течение пары секунд, а затем она исчезнет и переключится обратно на указанное выше сообщение:

Error   CS1503  Argument 1: cannot convert from 'MyApp.Model.Entities.Asset' to 'MyApp.Model.Model.Entities.Inspection' MyApp   C:\src\ProjectDir\MyApp\ViewModels\AssetDetailsViewModel.cs 1453    Active

Поэтому я потратил время на устранение первой ошибки, но настоящая проблема оказалась из-за второй ошибки. Сначала мне пришлось удалить все каталоги /bin и /obj, затем я также удалил файлы .suo, как указано выше. Это позволило мне сузить проблему до проблемы интерфейса.

В моем интерфейсе у меня было это:

    Task<IList<Defect>> LoadDefects(Asset asset);

Но в моей реальной реализации у меня был этот код:

    public virtual async Task<IList<Defect>> LoadDefects(Inspection inspection)
    {
       var results ...
       // ....

        return results;
    }

Сборка успешно завершена после того, как я обновил интерфейс до этого:

    Task<IList<Defect>> LoadDefects(Inspection inspection);

Таким образом, похоже, что кеширование в VS заставляло его отображать ошибку CS0006, когда настоящей проблемой была ошибка CS1503.

0

В моем случае в моем файле Web.config это

<?xml version="1.0" encoding="utf-8"?>

к этому

<?xml version="1.0"?>

исправил мою проблему

0

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

Вопрос: одно решение, несколько проектов. Основное приложение, которое использует некоторые другие результаты, не удалось, сказав:

CSC: ошибка CS0006: файл метаданных 'C:\Repos\TheApplication\TheApplicationCommon\bin\Debug\TheApplication.dll' не найден

Но на самом деле этот проект сгенерировал C:\Repos\TheApplication\TheApplicationCommon\bin\Debug\TheApplicationCommon.dll Другой проект, который также использует ту же самую DLL, скомпилированную без нареканий.

Прежде чем я обновил внутренний NuGet-пакет, который использовал PostSharp 3.xxx и теперь использует PostSharp 4.xxx, я решил добавить это в мой файл *.csproj:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="...">
  <Import Project="..." Condition="..." />
  <PropertyGroup>
    ...
    <AssemblyName>TheApplication</AssemblyName>
    ...
    <SkipPostSharp>True</SkipPostSharp> <!-- This line -->
  </PropertyGroup>
...

Другая Solution-> Clean, другая Solution-> Перестройка, и она работает локально и на сервере сборки.

Надеюсь, это поможет кому-то. Поток старый и довольно длинный, но эта проблема часто возвращается, и я пока не видел этого решения. Кстати, с использованием Visual Studio 2017 (15.8.x).

0

Visual Studio IDE не создает никаких закулисных структур, как это делает приложение Msbuild. VS IDE, по сути, просто создает файл проекта, который используется Msbuild, и довольно часто он делает ошибки, если вы оставляете его на усмотрение IDE, чтобы самому разобраться. Если вы получаете Metadata file '.dll' could not be found ошибку, скорее всего, из-за того, что правильные/ожидаемые сборки не найдены. Так что, возможно, Visual Studio может создавать файл проекта для приложения платформы 4.5 и ожидать 4,5 сборки, пока вы ссылаетесь на сборки 4.0. Поэтому посмотрите на свои настройки Visual Studio на предмет несовместимости или зайдите в файл проекта и вручную исправьте его, указав правильный путь <Reference Include="C:\\correct path to assembly\\yourAssembly.dll"/>.

0

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

Я полагаю, что возникла ошибка при сборке, потому что DLL файл библиотеки Logic Layer не мог быть собран, и основное приложение не смогло его найти.

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

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

PS: это было в Visual Studio 2015 Community Edition

0

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

В конце концов, моя проблема была решена тем, что я исправил все остальные ошибки сборки, а затем снова собрал, и он был успешно собран.

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

0

В моем случае установка целевой платформы решила проблему:

  1. Щелкните правой кнопкой мыши по проекту и выберите "Свойства".

  2. В приложении измените целевую платформу на ту же, что и у основного проекта (например, ".NET Framework 4.5").

0

Ни один из десятков ответов до сих пор не работал для меня. В моем случае я тоже получил ошибку:

Имя элемента кортежа 'Value' выводится. Пожалуйста, используйте языковую версию 7.1 или выше для доступа к элементу по его предполагаемому имени

Это появилось рядом с ошибками "Файл метаданных .dll" не удалось найти "при сборке, но вскоре исчезло, поскольку ошибки иногда возникают, когда среда IDE" догоняет ".

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

В противном случае вы можете попробовать это в Visual Studio:

Меню Проект → <Имя проекта> Свойства → Построить → кнопка Дополнительно → Языковая версия → С# <последняя дополнительная версия> (например, "С# 5.0")

И это тоже исправляет.

Похоже, что "файл метаданных '.dll' не найден" часто является признаком некоторых других основных проблем, поэтому, если ни одно из лучших решений не работает для вас, проверьте другие ошибки и предупреждения и попытайтесь найти реальную проблему.

  • 0
    Можете ли вы привести еще один пример значения «Языковая версия»?
0

Я видел эту ошибку, потому что у меня была следующая строка в моем коде (похоже, я все еще думал в режиме SQL):

if(myVar is null)
    DoSomething();

Visual studio (2017) не сообщала об ошибках при проектировании или компиляции, однако проект не собирался и выдавал ошибку "missing.dll". При изменении ошибочной строки на:

if(myVar == null)

Проблема решена.

0

У меня появилась эта проблема после того, как я сильно изменил решение, отложил изменения и отменил их.

Единственный способ решить эту проблему - удалить и снова добавить отображение из TFS в мою локальную папку.

0

Ни одно из предыдущих решений не сработало для меня, поэтому я поделюсь тем, что сделал.

У меня была эта проблема после слияния некоторых новых библиотек классов из другой ветки, которые ссылались друг на друга. Удаление ссылок в проектах и воссоздание их, наконец, решило проблему. Очевидно, Visual Studio слилась по неправильным путям к файлам.

0

Я столкнулся с этой проблемой после getting latest (команда Team Foundation Server (TFS)).

После разрешения конфликтов я обнаружил использование оператора для namespace that does not exist in the project.

Поэтому я удалил оператор using затем clean and rebuild, и все было в порядке.

0

Очень странно! Я перепробовал все предыдущие ответы и, к сожалению, в моем случае ничего не получалось.

Я столкнулся с двумя ошибками:

  1. Отсутствует файл .dll
  2. Метод уже определен в другом месте с такими же параметрами

Сначала я очистил вторую ошибку, удалив функцию, дублированную в другом месте.

Моя первая ошибка - отсутствие файла .dll - решила сама.

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

0

Проверьте файл .csproj основного проекта. Visual Studio не очищает это, если вы удаляете проекты или изменяете ссылки в решении.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню