Ошибка управления версиями DLL

У меня есть веб-сайт, который время от времени выдает следующую ошибку:

Server Error in '/' Application.

Could not load file or assembly 'ICSharpCode.SharpZipLib, Version=0.85.3.365, Culture=neutral, PublicKeyToken=1b03e6acf1164f73' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Теперь я знаю, что у меня есть зависимость от этой DLL, но у меня есть версия 0.85.5 в моей системе. Я систематически удаляюevery более старая версия DLL с сервера, все перекомпилировано и переиздано. Но независимо от того, что я делаю, кажется, что после каждой переиздания, первого или двух раз, когда кто-то посещает сайт, они получают эту ошибку. Затем, после обновления один или два раза, ошибка исчезает и сайт работает как обычно.

Что делает его еще более странным, так это то, что я смотрю на строку кода, в которой выдается ошибка:

URLRewriter.ProcessRewritingResult(status, excludedEnum, siteName, viewMode, relativePath);

URLRewriter это класс из стороннего пакета (Kentico CMS - CMS.URLRewritingEngine.dll). Я запустил Dependency Walker для этой библиотеки DLL и не нашел никаких зависимостей от ICSharpCode.SharpZipLib.

Любые идеи, как это исправить?

EDIT: По предложению @ JeremyThompson я запустил Process Monitor, чтобы уловить ошибку. Здесь дамп экрана с выделенными соответствующими частями (и одно имя папки скрыто по соображениям конфиденциальности). Вы можете просмотреть его в полном размере, щелкнув правой кнопкой мыши по нему и т. Д ...

enter image description here

EDIT: Вот трассировка загрузки от ошибки. Это помогает?

=== Pre-bind state information ===

LOG: User = MY-SERVER-12\Administrator

LOG: DisplayName = ICSharpCode.SharpZipLib, Version=0.85.3.365, Culture=neutral, PublicKeyToken=1b03e6acf1164f73 (Fully-specified)

LOG: Appbase = file:///C:/inetpub/wwwroot/MySite/

LOG: Initial PrivatePath = C:\inetpub\wwwroot\MySite\bin

Calling assembly : CMS.WebAnalytics, Version=6.0.4377.2467, Culture=neutral, PublicKeyToken=834b12a258f213f9.

===

LOG: This bind starts in default load context.

LOG: Using application configuration file: C:\inetpub\wwwroot\MySite\web.config

LOG: Using host configuration file: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet.config

LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.

LOG: Post-policy reference: ICSharpCode.SharpZipLib, Version=0.85.3.365, Culture=neutral, PublicKeyToken=1b03e6acf1164f73

LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/root/9760eb69/275bb3db/ICSharpCode.SharpZipLib.DLL.

LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/root/9760eb69/275bb3db/ICSharpCode.SharpZipLib/ICSharpCode.SharpZipLib.DLL.

LOG: Attempting download of new URL file:///C:/inetpub/wwwroot/MySite/bin/ICSharpCode.SharpZipLib.DLL.

LOG: Attempting download of new URL file:///C:/inetpub/wwwroot/MySite/bin/ICSharpCode.SharpZipLib/ICSharpCode.SharpZipLib.DLL.

LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/root/9760eb69/275bb3db/ICSharpCode.SharpZipLib.EXE.

LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/root/9760eb69/275bb3db/ICSharpCode.SharpZipLib/ICSharpCode.SharpZipLib.EXE.

LOG: Attempting download of new URL file:///C:/inetpub/wwwroot/MySite/bin/ICSharpCode.SharpZipLib.EXE.

LOG: Attempting download of new URL file:///C:/inetpub/wwwroot/MySite/bin/ICSharpCode.SharpZipLib/ICSharpCode.SharpZipLib.EXE.

 Jeremy Thompson18 июл. 2012 г., 13:51
Привет, Шуаль, это просто для проверки связи с командой Kentico. Я имел дело с ними в прошлом, и они - лучшие парни. Я уверен, что сейчас они посмотрят это на публичном форуме. Этот парень: @PetrPalas (stackoverflow.com/users/1430236/petr-palas) он действительно хорош.

Ответы на вопрос(7)

опробуйте запустить приложение в собственном пуле приложений.

Может случиться так, что когда рабочий процесс будет перезапущен, иногда ваше приложение будет добавлено первым, а иногда Kentico CMS будет добавлено первым, и это изменит способ разрешения ICSharpCode.SharpZipLib.

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

Что такое пул приложений в IIS и Asp.Net?

ОБНОВЛЕНИЕ: является ли ваше приложение веб-сайтом (скомпилированным при первом доступе) или веб-проектом (предварительно скомпилированным в Visual Studio). Если это веб-сайт, то можете ли вы преобразовать его в веб-проект и попробовать?

 Shaul Behr17 июл. 2012 г., 17:54
Они все развернуты на одном веб-сайте, поэтому убедитесь, что они используют один и тот же пул приложений ... :)

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

 Shaul Behr17 июл. 2012 г., 11:24
Как? Куда? Пример кода, пожалуйста?
 17 июл. 2012 г., 12:08
 14 дек. 2017 г., 17:42
Это сообщение не является реальной попыткой ответить на вопрос. пожалуйста, обратите вниманиеStack Overflow doesn't work like a discussion forum, это Q & amp; сайт, где каждое сообщение является либо вопросом, либо ответом на вопрос. Сообщения также могут иметьcomments - небольшие предложения, подобные этому, - которые можно использовать для критики или запроса разъяснений у автора. Это должен быть либо комментарий, либоnew question.
 17 июл. 2012 г., 14:03
Или используйте средство просмотра журнала привязки сборок (Fuslogvw.exe), чтобы узнать, как проверяются сборки.msdn.microsoft.com/en-us/library/e74a18c4(v=vs.71).aspx ---- и посмотреть ----stackoverflow.com/questions/255669/…

которое регистрирует загрузку сборок и предоставляет подробную информацию об ошибках загрузки.

Узнайте больше здесь:http://msdn.microsoft.com/en-us/library/e74a18c4.aspx

Решение Вопроса

but I have version 0.85.5 on my system. I have systematically deleted every older version of the DLL from the server, recompiled everything and republished.

Похоже на «зависимость» ожидаетOLDER версия DLL. Почему бы и нетREPLACE все копииNEWER версия (0.85.5) в вашей системе, сOLDER версия (0.85.3.365)? (Обязательно проверьте папку «bin» вашего веб-приложения и папку «GAC»: c: \ windows \ сборки)

Если вам нужно, вы можете скачать старую версию здесь:http://sourceforge.net/projects/sharpdevelop/files/SharpZipLib/0.85.3/

НОТА:

After replacing the DLL, stop IIS and clear all Temporary ASP.Net files. E.g.: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files ALSO: Remember to update your Visual Studio Solution so that it references the older version.

ура

Пит

 Shaul Behr22 июл. 2012 г., 10:14
Ну, как выясняется, мне не нужно ничего в более новой версии DLL, так что это решение действительно работает для меня. Несмотря на то, что это очень неудовлетворительное решение с интеллектуальной точки зрения, оно делает свое дело, и поэтому отвечает вам за вознаграждение и вознаграждение. Спасибо!

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

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

 Shaul Behr17 июл. 2012 г., 17:55
Я не понимаю ... Яam привязка к более новой версии ...? Или я что-то перепутал в своем коде?

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

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

-iisreset
-запустите Process Monitor на сервере
-просмотреть пару страниц и воспроизвести проблему как можно быстрее
остановите трассировку ProcessMonitor
-поиск в процессе отслеживанияICSharpCode.SharpZipLib

Если это не помогло, посмотрите, что еще было причиной:

сохранить результаты ProcessMonitor как CSV
открыть CSV в Excel
-фильтровать все столбцы
-выберите выпадающий список столбца с Отказано в доступе или ...

Это должно сказать вам, в чем проблема с ошибкойCould not load file or assembly

 Shaul Behr15 июл. 2012 г., 10:10
Спасибо за совет. Я действительно обнаружил, что рабочий процесс IIS (w3wp.exe) ищет v0.85.3 этой библиотеки DLL в реестре и в файловой системе и получает сообщение «ИМЯ НЕ НАЙДЕНО» или "ПУТЬ НЕ НАЙДЕН" .... до тех пор, пока через пару сотен микросекунд не будет обнаружена версия DLL DLL 0.85.5. Что это говорит нам?
 Shaul Behr15 июл. 2012 г., 10:17
На самом деле, он пытается (и не может) создать файл & quot; в GAC, затем в папке временных файлов .NET, прежде чем успешно выполнить & quot; создать файл & quot; в папке bin моего веб-сайта. Почему "создавать файл", а не "читать файл"?

ICSharpCode.SharpZipZip.dll - и он ожидает найти более старую версию. Я нашел подобное решениеВот, Вставив следующий блок в мой файл web.config, кажется, я наконец-то изгнал эту ошибку!

<runtime>
  <assemblyBinding>
    <dependentAssembly>
      <assemblyIdentity name="ICSharpCode.SharpZipLib" publicKeyToken="1b03e6acf1164f73"/>
      <bindingRedirect oldVersion="0.85.3.365" newVersion="0.85.5.452"/>
    </dependentAssembly>
  </assemblyBinding>
</runtime>

Что я до сих пор не понимаю, так это почему Dependency Tracker не обнаружил эту зависимость?

EDIT: О, дорогой, это не решило все-таки. Кажется, сейчас это происходит реже, но после перезапуска IIS сегодня один из наших тестеров снова получил старое сообщение об ошибке! :-(

 05 нояб. 2013 г., 10:58
Это то, что я бы сделал для привязки redirect = & gt; что угодно, от 0 до .85.5.452 (что означает, что оно включает .85.3.365 ... используйте 85.5.452. например.<bindingRedirect oldVersion="0.0.0.0-0.85.5.452" newVersion="0.85.5.452"/>

Ваш ответ на вопрос