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

5 голосов
/ 21 июня 2018

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

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

5 голосов
/ 31 января 2017

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

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

5 голосов
/ 18 июня 2016

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

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

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

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

4 голосов
/ 04 сентября 2015

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

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

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

4 голосов
/ 09 июля 2015

Просто указав на очевидное: если у вас не включено «Показывать окно вывода при запуске сборки», убедитесь, что вы замечаете, что ваша сборка не удалась (небольшая ошибка «сборка не удалась» внизу слева) !! !!

4 голосов
/ 17 июня 2015

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

4 голосов
/ 09 апреля 2015

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

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

4 голосов
/ 05 декабря 2014

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

4 голосов
/ 14 сентября 2009

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

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

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

4 голосов
/ 24 ноября 2015

В моем случае я закомментировал классы в определенном (пустом) пространстве имен:

namespace X.Y.Z.W
{

    // Class code

}

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

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

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

...