ASP.NET DLL ад - PullRequest
       38

ASP.NET DLL ад

1 голос
/ 26 ноября 2008

У меня есть стороннее программное обеспечение рабочего процесса (Captaris Teamplate), которое ссылается на сборку из моего проекта, которая ссылается на другие сборки из нашего проектного решения на всем протяжении GAC .

Когда наше приложение выполняется, оно вызывает метод Captaris Teamplate для создания процесса рабочего процесса, который, в свою очередь, использует сборки проекта в GAC для хранения данных в база данных.

Проблема в том, что когда я компилирую свой проект и удаляю сборки из GAC, заменяя их новыми версиями, но когда я запускаю весь проект, Captaris Teamplate выдает ошибку:

Тип исключения: System.IO.FileNotFoundException
Сообщение. Имя файла или сборки VBAssembly или одна из его зависимостей не найдены.
Имя файла: VBAssembly
FusionLog: === Предварительно связать информацию о состоянии ===
LOG: DisplayName = VBAssembly, версия = 0.0.0.0, культура = нейтральная, PublicKeyToken = ноль

То есть он не дал бы мне имя файла сборки DLL. Он пытается найти ни версию, которую ищет. Устранение неполадок, связанных с такой проблемой, подобно стрельбе в темноте и может привести к потере нескольких дней удаления старых сборок, которые хранятся в папке временных файлов ASP.NET, папке проекта и папке веб-сайта (inetpub), перезагрузке и т. Д., Проверке на наличие ошибок, получение ошибки, поиск других старых сборок и т. д.

Итак, мои вопросы:

  1. Существует ли метод, который позволил бы мне извлечь больше информации об этом исключении, например, имя сборки и версия, которая отсутствует?
  2. Есть ли простой способ удалить все эти старые версии сборок из системы во время компиляции?
  3. Любые другие предложения по работе с DLL Hell и / или Template Captaris?

Мы используем ASP.NET версии 1.1 с Visual Studio 2003 с Captaris Workflow 5.0.

Ответы [ 7 ]

1 голос
/ 26 ноября 2008

Или вы можете использовать .NET Reflector .

Однако вы также можете просто позвонить продавцу и попросить помощи у него. В большинстве случаев эти ребята очень гордятся своими продуктами, поэтому они потратят время, чтобы рассказать вам о вашей проблеме по электронной почте или в чате. Я только что столкнулся с подобной проблемой со сторонним компонентом электронных таблиц, который я использовал, и хотя компания находилась в Германии, я смог решить проблему довольно быстро, заставив их перекомпилировать компонент на своем конце и когда они отправили новая DLL работала просто отлично.

1 голос
/ 09 декабря 2008

Вероятно, наиболее эффективный способ - запустить FusLogVW.exe (часть .NET Framework SDK, см. Просмотр журнала привязки сборки (Fuslogvw.exe) ), который будет регистрировать каждый неудача связывания, которая случается. Таким образом, вы можете перечислить неудачные попытки связывания из вашего приложения.

1 голос
/ 26 ноября 2008

Используйте Dependency Walker , чтобы узнать, что отсутствует зависимость.

1 голос
/ 26 ноября 2008

Возможно, вы сможете создать политику привязки, которая перенаправит любой запрос на сборку, удаленную из XXX, в GAC на новое место. См. Политика связывания .

1 голос
/ 26 ноября 2008

Еще одна вещь, которую вы можете сделать - это принудительно ссылаться на версию сборки, которую вы хотите, через web.config. Вот пример того, что у меня есть в моем файле web.config, чтобы убедиться, что у меня есть доступ к нужной версии Crystal Reports в моем веб-приложении ...

<assemblies>       
   <add assembly="CrystalDecisions.Web, Version=11.5.3700.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
   <add assembly="CrystalDecisions.Shared, Version=11.5.3700.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
   <add assembly="CrystalDecisions.ReportSource, Version=11.5.3700.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
   <add assembly="CrystalDecisions.Enterprise.Framework, Version=11.5.3300.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>            
</assemblies>

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

1 голос
/ 26 ноября 2008

Если это вообще возможно, избегайте GAC. Он поддается DLL Ад. VBAssembly на самом деле может быть неуправляемой и может быть удалена из каталога WINDOWS/system32.

0 голосов
/ 26 ноября 2008

Отправной точкой является попытка использования опции «Чистый раствор» , а затем создание решения.

...