Файл метаданных '.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 ]

1 голос
/ 21 ноября 2015

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

1 голос
/ 05 марта 2018

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

1 голос
/ 09 октября 2018

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

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

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

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

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

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

Другое решение-> Очистить, другое решение-> Перестроить, и оно работает локально и на сервере сборки.

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

1 голос
/ 25 сентября 2017

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

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

1 голос
/ 19 апреля 2019

Я согласен со всем вышесказанным, только разница. В моем случае: я использую Visual Studio 2019. Я закрыл VS-2019 и открыл с VS-2017. и перестроить проект все работает отлично! Для кого в моем положении дата: 4/19/2019

0 голосов
/ 30 января 2019

Когда я делал сборку, в 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 голосов
/ 07 июня 2016

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

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

0 голосов
/ 17 ноября 2018

В моем случае внутри моего Web.config файла меняется это

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

к этому

<?xml version="1.0"?>

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

0 голосов
/ 20 сентября 2018

Среда 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 голосов
/ 18 августа 2017

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

Выводится имя элемента кортежа «Значение». Пожалуйста, используйте языковую версию 7.1 или выше для доступа к элементу по его предполагаемому имени

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

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

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

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

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

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

...