Файл метаданных '.dll' не найден.
Я работаю над проектом 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... Я читал, что есть ошибка с длиной. Это возможная проблема?
Это очень раздражает и приходится комментировать, строить и раскомментировать, сборка становится чрезвычайно утомительной.
Ответы
Ответ 1
У меня просто была такая же проблема. Visual Studio не создает проект, на который ссылаются.
Письменные инструкции:
- Щелкните правой кнопкой мыши решение и выберите Свойства.
- Нажмите Конфигурация слева.
- Убедитесь, что установлен флажок "Построить" для проекта, который он не может найти. Если он уже установлен, снимите флажок, нажмите "Применить" и снова установите флажки.
- (Необязательно) Это необходимо сделать для режимов выпуска и отладки в свойствах решения.
Инструкции по захвату экрана:
- Они говорят, что картинка стоит тысячи слов. Нажмите на GIF, чтобы увеличить масштаб, и, надеюсь, вам будет легко следить:
Ответ 2
Это все еще может произойти в более новых версиях Visual Studio (у меня только что это произошло в Visual Studio 2013):
Еще одна попытка - закрыть Visual Studio и удалить файл .suo
который находится рядом с файлом .sln
. (Он будет сгенерирован заново при следующем Save all
(или выходе из Visual Studio)).
У меня была эта проблема при добавлении новых проектов в решение на другом компьютере и последующем получении ревизий, но файл .suo
может быть поврежден и в других случаях и привести к очень странному поведению Visual Studio, поэтому удаление его из вещей, которые я всегда стараюсь.
Обратите внимание, что при удалении файла .suo
будут сброшены стартовые проекты решения.
Подробнее о файле .suo
здесь.
Ответ 3
Предлагаемый ответ не работает для меня. Ошибка является приманкой для другой проблемы.
Я обнаружил, что нацелился на несколько иную версию .NET, и компилятор пометил ее как предупреждение, но это приводило к сбою сборки. Это должно быть помечено как ошибка, а не как предупреждение.
Ответ 4
Что ж, мой ответ - это не просто краткое изложение всех решений, но оно предлагает нечто большее.
Секция 1):
В общем решения:
У меня было четыре ошибки такого типа ("файл метаданных не найден"), а также одна ошибка: "Не удалось открыть исходный файл (" ошибка не определена ")".
Я пытался избавиться от файла метаданных не удалось найти ошибку. Для этого я прочитал много постов, блогов и т.д. И обнаружил, что эти решения могут быть эффективными (обобщая их здесь):
-
Перезапустите Visual Studio и повторите сборку.
-
Перейдите в "Обозреватель решений". Щелкните правой кнопкой мыши на Решение. Перейти к свойствам. Перейдите в "Диспетчер конфигурации". Проверьте, установлены ли флажки под "Build" или нет. Если какие-либо или все из них не отмечены, то проверьте их и попробуйте построить заново.
-
Если вышеуказанные решения не работают, следуйте последовательности, упомянутой в шаге 2 выше, и даже если все флажки установлены, снимите их, проверьте снова и попробуйте выполнить сборку заново.
-
Порядок сборки и зависимости проекта:
Перейдите в "Обозреватель решений". Щелкните правой кнопкой мыши на Решение. Перейти к "Зависимости проекта...". Вы увидите две вкладки: "Зависимости" и "Порядок сборки". Этот порядок сборки является тем, в котором строится решение. Проверьте зависимости проекта и порядок сборки, чтобы убедиться, что какой-либо проект (скажем, "проект1"), который зависит от другого (скажем, "проект2"), пытается построить этот проект (проект2). Это может быть причиной ошибки.
-
Проверьте путь к отсутствующему .dll:
Проверьте путь к отсутствующему .dll. Если путь содержит пробел или любой другой недопустимый символ пути, удалите его и попробуйте построить заново.
Если это причина, то отрегулируйте порядок сборки.
Раздел (2):
Мой частный случай:
Я попробовал все шаги выше с различными перестановками и комбинациями с перезапуском Visual Studio несколько раз. Но это не помогло мне.
Итак, я решил избавиться от другой ошибки, с которой мне пришлось столкнуться ("Невозможно открыть исходный файл (" ошибка не определена ")").
Я наткнулся на сообщение в блоге: Ошибка TFS - Невозможно открыть исходный файл ("Неопределенная ошибка")
Я попытался выполнить шаги, упомянутые в этом сообщении в блоге, и я избавился от ошибки "Исходный файл не может быть открыт (" неопределенная ошибка ")", и неожиданно я избавился и от других ошибок ("файл метаданных не найден)",
Раздел (3):
Мораль истории:
Попробуйте все решения, как указано в разделе (1) выше (и любые другие решения), чтобы избавиться от ошибки. Если ничего не получится, как в блоге, упомянутом в разделе (2) выше, удалите записи всех исходных файлов, которых больше нет в исходном элементе управления и файловой системе, из вашего файла .csproj.
Ответ 5
В моем случае это было вызвано несоответствием версии .NET Framework.
Один проект был 3.5, а другой ссылающийся на проект 4.6.1.
Ответ 6
Закрытие и повторное открытие Visual Studio 2013 сработало для меня!
Ответ 7
Ну, ничего в предыдущих ответах не помогло мне, так что это заставило меня задуматься о том, почему я щелкаю и надеюсь, что когда мы, как разработчики, действительно должны попытаться понять, что здесь происходит.
Мне казалось очевидным, что эта неправильная ссылка на файл метаданных должна где-то храниться.
Быстрый поиск файла .csproj выявил виновные строки. У меня был раздел под названием <itemGroup>, который, казалось, висел на старом неправильном пути к файлу.
<ItemGroup>
<ProjectReference Include="..\..\..\MySiteOld\MySite.Entities\MySite.Entities.csproj">
<Project>{5b0a347e-cd9a-4746-a3b6-99d6d010a6c2}</Project>
<Name>Beeyp.Entities</Name>
</ProjectReference>
...
Итак, простое исправление действительно:
- Сделайте резервную копию вашего .csproj файла.
- Найдите неправильные пути в файле .csproj и переименуйте соответствующим образом.
Пожалуйста, убедитесь, что вы сделали резервную копию своего старого .csproj перед тем, как начать играть.
Ответ 8
Я также встретил эту проблему. Во-первых, вам нужно вручную создать проект DLL, щелкнув правой кнопкой мыши Build. Тогда это сработает.
Ответ 9
Я получил ту же ошибку "Файл метаданных '.dll' не может быть найден", и я попробовал несколько вещей, описанных выше, но причина ошибки заключалась в том, что я ссылался на сторонний файл DLL, который был нацелен на версию .NET что мой проект целевой .NET версия. Таким образом, решение состояло в том, чтобы изменить целевую структуру моего проекта.
Ответ 10
В моем случае у меня есть установленная директория ошибочно.
Если ваш путь решения - это что-то вроде "Мое Project% 2c Very Popular% 2c Unit Testing% 2c Software и Hardware.zip", он не может разрешить файл метаданных, возможно, нам следует предотвратить некоторые недопустимые слова, такие как% 2c.
Переименование пути в обычное имя разрешило мою проблему.
Ответ 11
Я добавил новый проект в свое решение и начал его получать.
Причина? Проект, который я привел, был нацелен на другую среду .NET(4.6, а два других были 4.5.2).
Ответ 12
Для меня он пытался найти DLL в пути, который использовался для содержания Project, но мы перенесли его в новый каталог. Решение имело правильный путь к проекту, но Visual Studio каким-то образом продолжала искать в старом расположении.
Решение. Переименуйте каждую проблему. Проект - просто добавьте символ или что-то еще - затем переименуйте его обратно в исходное имя.
Это должно быть reset некоторый глобальный кеш какого-то типа в Visual Studio, потому что это очищает и эту проблему, и несколько подобных ей, в то время как такие вещи, как Clean, не работают.
Ответ 13
Для меня это произошло, когда я включил новый проект в решение.
Visual Studio автоматически выбирает .NET Framework 4.5.
Я перешел на версию .NET 4.5.2, как и другие библиотеки, и это сработало.
Ответ 14
Для меня сработали следующие шаги:
- Найти проект, который не строит
- Удалить/добавить ссылки на проекты в рамках решения.
Ответ 15
Я тоже решил эту проблему, но, попробовав предыдущие ответы, единственное, что мне помогло, - это открыть каждый проект в моем решении 1 на 1 и построить их по отдельности.
Затем я закрыл Visual Studio 2013, снова открыл свое решение, и оно скомпилировалось нормально.
Это странно, потому что, если я щелкнул каждый проект в моем обозревателе решений и попытался построить их таким образом, все они потерпели неудачу. Мне пришлось открыть их одному в их собственных решениях.
Ответ 16
Мой пример проблемы был вызван общим проектом, в котором было дублированное имя класса (под другим именем файла). Странно, что Visual Studio не смогла обнаружить это и взорвала процесс сборки.
Ответ 17
Я получил эту проблему в Visual Studio 2012 в решении, в котором было много проектов. Перестройка каждого проекта в решении вручную в том же порядке, в котором он был исправлен в порядке сборки проекта (щелчок правой кнопкой мыши и перестроение в обозревателе решений).
В конце концов я попал в тот, который дал мне ошибку компиляции. Я исправил ошибку, и после этого решение было бы правильно построено.
Ответ 18
Возвращаясь к этому через несколько лет, эта проблема, скорее всего, связана с максимальным пределом пути Windows:
Именование файлов, путей и пространств имен, ограничение максимальной длины пути
Ответ 19
В моем случае проблема заключалась в том, что я вручную удалил файл без компиляции, который был помечен как "отсутствует". Как только я удалил ссылку на текущий файл и перекомпилировал - все было хорошо.
Ответ 20
В моем случае проблема была вызвана простой ошибкой сборки,
ошибка CS0067: событие 'XYZ' никогда не используется
который по какой-либо причине не появился в окне ошибок.
Из-за этого система сборки Visual Studio, похоже, пропустила ошибку и попыталась построить зависимые проекты, которые, в свою очередь, потерпели неудачу с раздражающим сообщением метаданных.
Рекомендация -as глупа, как может sound-:
Сначала посмотрите на ваше окно вывода!
Мне потребовалось полчаса, прежде чем эта идея поразила меня...
Ответ 21
Похоже, такие ошибки связаны с тем, что Visual Studio не предоставляет правильную информацию об ошибке. Разработчик даже не понимает причину неудачной сборки. Это может быть синтаксическая ошибка или что-то еще. В общем, для решения таких проблем вы должны найти корень проблемы (например, посмотрите журнал сборки).
В моем случае проблема была в том, что в окне Error List
не было ошибок. Но на самом деле были синтаксические ошибки; Я нашел эти ошибки в окне " Output
, и после их устранения проблема была решена.
Ответ 22
У меня тоже была такая же ошибка. Он прячется как на пути ниже. Путь, на который я ссылался для файла DLL, выглядит как "D:\Assemblies Folder\Assembly1.dll".
Но исходный путь, на который ссылалась сборка, был "D:\Assemblies %20Folder\Assembly1.dll".
Из-за этого изменения имени пути сборка не может быть извлечена из исходного пути и, следовательно, выдает ошибку "Метаданные не найдены".
Решение в вопросе. Как заменить все пробелы на %20 в С#? ,
Ответ 23
Я столкнулся с той же проблемой. В моем случае я ссылался на проект библиотеки классов с более высокой версией .Net, чем у моего проекта, и VS не смог собрать проект и вывел ту же ошибку, что и вы.
Я просто установил .Net-версию своего проекта библиотеки классов (тот, который сломал сборку), идентичный .Net-версии ссылочного проекта, и проблема решена.
Ответ 24
На основании сообщения об ошибке я не верю, что путь к файлу усекается. Это выглядит просто неправильно. Если я правильно читаю сообщение, оно, похоже, ищет файл DLL в...
РАБОЧИЕ = -\Tools\VersionManagementSystem\BusinessLogicLayer\Bin\Debug\BusinessLogicLayer.dll
Это неверный путь. Возможно ли, что у вас есть определение макроса в процессе сборки, установленное на недопустимое значение?
Ответ 25
Эта ошибка может быть показана, если вы используете поддельные сборки. Удаление подделок приводит к успешной сборке проекта.
Ответ 26
Я использую Visual Studio 2013.
Похоже, что зависимости сборки были неправильными. Удаление файлов *.suo решило проблемы, которые у меня были.
Ответ 27
Если у вас есть место в имени вашего решения, это также вызовет проблему. Удаление пространства из имени вашего решения, поэтому путь не содержит %20.
Ответ 28
Просто указывая на откровенно очевидное: если у вас нет "Показать окно вывода при запуске сборки", убедитесь, что вы заметили, что ваша сборка не работает (небольшая ошибка "build failed" в левом нижнем углу)!!!
Ответ 29
У меня была эта ошибка, когда я пытался опубликовать веб-приложение. Оказалось, что один из свойств класса был заключен в
#if DEBUG
public int SomeProperty { get; set; }
#endif
но использование свойства не было. Публикация была выполнена в конфигурации Release без символа DEBUG
, очевидно.
Ответ 30
Для моего случая это было то, что я закомментировал классы в определенном (пустом) пространстве имен:
namespace X.Y.Z.W
{
// Class code
}
Когда я удалил код пространства имен и команды его импорта (использования) - это решило проблему.
В сборке также говорилось - вместе с отсутствующим файлом DLL проекта:
ошибка CS0234: имя типа или пространства имен 'W' не существует в пространстве имен 'XYZ' (отсутствует ссылка на сборку?)