Файл метаданных '.dll' не найден - PullRequest
591 голосов
/ 14 сентября 2009

Я работаю над проектом WPF, C # 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 ... Я читал, что есть ошибка с длиной. Это возможная проблема?

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

Ответы [ 71 ]

747 голосов
/ 18 июля 2013

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

  1. Щелкните правой кнопкой мыши решение и выберите Свойства.
  2. Нажмите Конфигурация слева.
  3. Убедитесь, что установлен флажок "Построить" для проекта, который он не может найти. Если он уже установлен, снимите флажок, нажмите «Применить» и снова установите флажки.
  4. (Необязательно) Вы должны были сделать это для режимов выпуска и отладки в свойствах решения.
200 голосов
/ 22 апреля 2014

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

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

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

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

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

139 голосов
/ 16 декабря 2015

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

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

93 голосов
/ 05 мая 2014

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

Секция (1):

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

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

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

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

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

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

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

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

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

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

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


Раздел (2):

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

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

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

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

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


Раздел (3):

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

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

35 голосов
/ 08 апреля 2016

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

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

25 голосов
/ 28 мая 2015

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

16 голосов
/ 27 ноября 2014

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

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

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

<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 перед тем, как начать играть .

14 голосов
/ 15 сентября 2012

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

13 голосов
/ 11 февраля 2016

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

11 голосов
/ 27 марта 2015

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

Если путь вашего решения похож на «Мой проект% 2c, очень популярный% 2c, модульное тестирование% 2c Software and Hardware.zip», он не может разрешить файл метаданных, возможно, нам следует запретить использование некоторых недопустимых слов, таких как% 2c.

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

...