Эта проблема
Я не могу развернуть веб-сайт (назовите его «zzz») в нашей производственной среде. Вот исключение:
Server Error in '/Admin' Application.
Parser Error
Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately.
Parser Error Message: Could not load type 'zzz.Admin.Default'.
Source Error:
Line 1: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="zzz.Admin.Default" %>
Line 2:
Line 3: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Source File: /Admin/default.aspx Line: 1
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.6.1055.0
Аналогичная ошибка устранена на Вот или Вот но меня не интересует изменение кода (CodeBehind
к CodeFile
), потому что 1) проект работает отлично как на моем локальном компьютере, так и при развертывании для разработки (единственные изменения в коде находятся в файле web.config, указывающем на другую базу данных) и 2) есть некоторые признаки наличия других базовых проблема.
подробности
Это старый веб-сайт, в который мне пришлось внести некоторые изменения, и я воспользовался возможностью, чтобы выполнить некоторую очистку (например, слияние конфликтующего дублированного кода, который был разным в разных проектах ...). Решение ранее было разделено на четыре разных проекта (администратор, учетная запись, корень «веб-сайта по умолчанию» и еще один), каждый из которых имел свой собственный виртуальный каталог в IIS (3 под корневым веб-сайтом). Я объединил это в один проект и избавился от виртуальных каталогов. На моей машине все работает нормально. В среде разработки все работает нормально. Но в продакшене не работает.
Если я скопирую папку / bin, как раньше, сайт снова заработает.
старая версия / код; работает на локальном, разработчика и продакшене; виртуальные каталоги.
+-+ website zzz
+-+ /Account
| +-- /Account/bin (Account.dll)
|
+-+ /Admin
| +-- /Admin/bin (Admin.dll)
|
+...
новая версия / код; работает на local, dev; общая dll в папке bin; нет виртуальных каталогов. Не работает на производстве.
+-+ website zzz
+-+ /Account
|
+-+ /Admin
|
+-+ /bin (zzz.dll)
|
+...
Чтобы сайт заработал на производстве, мне нужно скопировать папку bin в предыдущие места:
+-+ website zzz
+-+ /Account
| +-- /Account/bin (zzz.dll)
|
+-+ /Admin
| +-- /Admin/bin (zzz.dll)
|
+...
Если я удалю временные файлы, я увижу, что папки / Admin и / Account создаются во временном местоположении (с новой dll), хотя все должно быть только в одной папке (верно?).
Я ожидаю, что временные файлы появятся в C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\
но вместо этого они создаются на один уровень выше, например C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\admin
, по одному для каждого места, куда копируется папка / bin.
Я попытался удалить временные файлы для этого веб-сайта, запустить и остановить веб-сайт, а также запустить и остановить пулы приложений. Перезагрузка еще не производилась, так как на одном экземпляре размещено несколько разных веб-сайтов, но, вероятно, это произойдет в ближайшее время.
Окружающая среда
Две разные машины за балансировщиком нагрузки, но обе ссылаются на общую папку, в которой расположен веб-сайт. Управление DFS фактически используется для синхронизации папки веб-сайта между двумя компьютерами (может ли это быть связано?).
AFAIK наши среды разработки и производства одинаковы, но может быть что-то не синхронизированное, что уже случалось раньше. Не уверен, что я ищу, поскольку настройки IIS в целом выглядят одинаково.
В web.config нет ничего о кешировании.
пул приложений "Включить 32-разрядное приложение" имеет значение false во всех средах.
супервыборка не включен (никогда не был) включен.
Проект win forms, ориентированный на .NET Framework 4
IIS 7.5.7600.16385
Windows Server 2008 R2
Изменить обновление
Есть 15 патчей на dev, а не на prod, и 65 патчей на prod, а не на dev. Пытаясь найти лучший способ разобраться в этом (с помощью Вот ).
В моем случае перезагрузки не хватило.
Я открыл диспетчер IIS и просмотрел пул приложений. (Щелкните правой кнопкой мыши -> просмотреть приложения)
Там я видел, что мои старые пути все еще перечислены, несколько раз, но приложение, которому они принадлежали, уже было удалено, однако при изучении соответствующего веб-сайта через диспетчер IIS вызывалась правильная папка.
Итак, я выполнил инструкции из этого Почта убрать "фантомные приложения". (По сути: выключите iis. Редактировать C:\windows\system32\inetsrv\config\applicationHost.config
и удалите узлы приложений, которые все еще включают неправильные пути. Перезагрузите iis.)
Перезагрузка устранила проблему (наше регулярное плановое обслуживание). Я предполагаю, что что-то было где-то в кэше. Если у кого-то есть объяснение получше, я приму этот ответ.