"Не удалось загрузить файл или сборку 'XXX.YYY' или одну из ее зависимостей. Система не может найти указанный файл." - PullRequest
8 голосов
/ 02 января 2011

У меня есть решение .net visual studio с несколькими проектами (библиотеками классов и веб-приложением).

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

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

"Не удалось загрузить файл или сборку« XXX.YYY »илиодна из его зависимостей. Система не может найти указанный файл. "

Проект с именем XXX.YYY, который был удален в рефракторенге, выдал dll с именем XXX.YYY.Но это нигде не используется в приложении.Я удалил каталог obj веб-приложений и папку bin и перестроил, но это все еще происходит.

У кого-нибудь есть какие-либо идеи, когда это может произойти, какие-либо советы ??

ОБНОВЛЕНИЕ:

Обновление по моей проблеме.Я перенес кодовое место на другой компьютер и запустил его оттуда, и он успешно скомпонован и запущен без возникновения этой проблемы.Так что это заставляет меня думать, что проблема связана с моим ПК, а не с кодовой базой.Может быть, что-то кешируется на моем ПК.Я удалил свои временные файлы в папке «C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files», но не повезло.

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

ДОПОЛНИТЕЛЬНОЕ ОБНОВЛЕНИЕ

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

2 новых фрагмента информации.Во-первых, в моих модулях http в моем файле web.config я должен удалить пользовательский модуль http, прежде чем добавлять его.Другой разработчик не должен делать это.Во-вторых, я смог решить проблему «Не удалось загрузить файл или сборку« XXX.YYY »или одну из его зависимостей» с помощью «хака», который является кратковременным исправлением, создав в моем проекте библиотеку классов под названием XXX..YYY и включая искомые классы, которые являются пользовательскими элементами управления, т.е.наследование от System.Web.UI.WebControls.WebControl.

Любые дальнейшие мысли ....

Ответы [ 8 ]

5 голосов
/ 02 января 2011

Есть две возможные причины.

1) Когда вы запускаете свое веб-приложение, вы все еще используете старые сборки где-то на своих машинах.Ваши старые сборки ссылались на старую сборку "XXX.YYY".

2) Последний созданный вами двоичный файл все еще ссылается на старую сборку "XXX.YYY".

Чтобы узнать, какие сборки использует ваше веб-приложение, если вы используете отладчик, вы можете легко найти его из окон вывода.Это должны быть первые несколько строк вывода.Другой способ выяснить это - открыть окна модулей в IDE VS.NET во время отладки.

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

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

Я предполагаю, что некоторые из ваших успешно загруженных сборок фактически поступают откуда-то из кэша ASP.NET или GAC.

1 голос
/ 07 декабря 2011

Включить ведение журнала диагностики для выходных данных сборки (TOols -> Параметры -> Создать и запустить -> Детализация журнала вывода -> Диагностика) и построить решение и посмотреть, откуда Visual Studio выбирает dll (somedll.dll версия xxx.yy ). Теперь запустите приложение и посмотрите, где среда выполнения пытается решить DLL. (Windbg это вариант).

1 голос
/ 02 января 2011

Используйте Dependency Walker (зависит) от всех ваших EXE-файлов и DLL-файлов, чтобы увидеть, какая из них имеет отсутствующую зависимость.Вы должны запустить в зависимости от рабочего каталога вашего проекта для достижения наилучших результатов.

Как только вы узнаете, какой EXE / DLL является виновником, зайдите в настройки этого проекта и посмотрите, упоминается ли там жалоба на зависимость.

РЕДАКТИРОВАТЬ: Несколько минут назад со мной произошла другая вещь ... Если какая-либо из ваших зависимостей "заблокирована", потому что они были помечены как загруженные каким-либо программным обеспечением MS (например, при использовании DL с Inet Explorer)может предотвратить загрузку исполняемого кода.Посмотрите на свойства ваших исполняемых файлов (DLL / EXE) с помощью Windows Explorer и посмотрите, есть ли у них кнопка разблокировки на первой странице.Если это так, нажмите эту кнопку.Мне потребовалось некоторое время, чтобы разобраться, надеюсь, это поможет.

1 голос
/ 02 января 2011

просто проверьте конфигурацию сборки проектов .. если на ваших ссылках есть 64-битная скомпилированная dll и ваш основной проект 32-битный (или любой процессор и ваша машина 32-битная), или наоборот, вы получите эту ошибку

0 голосов
/ 25 августа 2015

Перейти к References в Solution Explorer в Visual Studio. Выберите сборку, на которую жалуются. Выберите его и перейдите к пункту меню View и выберите Property Window внизу. Пока сборка выбрана, просмотрите ее свойства в окнах свойств и найдите значение Copy Local. Если его значение установлено на False, установите его на True. Постройте решение и опубликуйте его. Это должно успешно решить проблему.

0 голосов
/ 08 января 2011

Отличная новость, я решил проблему !!! Мне пришлось переустановить мою среду выполнения .net. Я также удалил сайты из IIS и снова перечитал сайт. Когда я запустил его, проблема не возникла, и сайт запустился.

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

0 голосов
/ 02 января 2011

Вам просто не хватает зависимости.Вероятно, в такой ситуации, как проект A, есть ссылка на проект B, в котором есть ссылка на проект C. В вашем выходном каталоге отсутствует библиотека DLL для проекта C.

0 голосов
/ 02 января 2011

Выполните поиск решения по тексту «XXX.YYY» и удалите все вхождения.Может быть, вы упустили что-то в файле web.config.

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

...