IIS 10.0 под Windows 10 Pro. АСП.НЕТ 4.7
Пожалуйста, считайте, что это вопрос новичка - я давно не работал с IIS.
Я исследую некоторые проблемы, которые, по-видимому, возникают только в IIS (по сравнению с запуском веб-сайта в Visual Studio 2017). Итак, я установил IIS 10.0 на свой компьютер для разработки Windows и опубликовал свой веб-сайт в IIS. Описанная ниже ошибка НЕ является той, которую я изучаю, а является препятствием при попытке настроить мой веб-сайт на моем локальном IIS.
Когда я пытаюсь получить доступ к "домашней" странице, я получаю сообщение об ошибке 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 'WingtipToys.Global'.
Source Error:
Line 1: <%@ Application Codebehind = "Global.asax.cs" Inherits = "WingtipToys.Global" Language = "C#" %>
Source File: /global.asax Line: 1
(Я также пытался запустить пример веб-сайта Microsoft Wingtip Toys, и я получаю ту же ошибку, что и на своем веб-сайте. Выше показана ошибка Wingtip Toys.)
В моем приложении есть папка BIN (установленная в IIS), в этой папке есть WingtipToys.dll и (согласно .NET Reflector) в DLL есть класс WingtipToys.Global.
Я думал, что ASP.NET будет искать папку BIN и использовать любые найденные там библиотеки DLL.
Поскольку и игрушки Wingtip, и мои веб-сайты показывают одну и ту же ошибку в IIS и оба нормально работают в VS 2017, я подозреваю, что это может быть ошибка конфигурации IIS или ASP.NET с моей стороны.
Что мне нужно сделать, чтобы IIS/ASP.NET мог найти двоичные файлы в моей папке BIN? Одно предложение, которое я нашел, заключалось в том, чтобы поместить следующее в мой веб-сайт web.config:
<system.web>
<compilation targetFramework = "4.5">
<assemblies>
<add assembly = "*" />
</assemblies>
</compilation>
</system.web>
Хотя это работает, нам, по-видимому, это не нужно на нашем производственном веб-сайте (тот, который я пытаюсь устранить). (Кроме того, наш рабочий файл web.config содержит около 40 сборок, ВСЕ из которых находятся в папке BIN веб-сайта. Мне это кажется излишним.)
Я должен что-то упустить.
Если у вас есть какие-либо вопросы, пожалуйста, дайте мне знать. Спасибо!
Я не видел WingtipToys.dll (и DLL моего веб-сайта) в GAC. Просто стандартные вещи - в значительной степени. Спасибо!
Я бы, вероятно, использовал Fusion Logs и посмотрел, не увижу ли я чего-нибудь неожиданного: docs.microsoft.com/en-us/dotnet/framework/tools/…
Я использовал программу просмотра Fusion Log (раньше я пользовался этим инструментом несколько раз), но ошибок привязки не обнаружил. Я проверял как успешные, так и неудачные привязки, перезапуская IIS перед каждой попыткой. Все успешные привязки предназначены для стандартных сборок System/Microsoft; неудачных привязок не было. Я не вижу никаких попыток привязки к WingtipToys.dll. Это может быть сбой процесса перед любой попыткой связывания.
Как я понял, в моей конфигурации IIS чего-то не хватало. Мое оригинальное веб-приложение и другие примеры веб-приложений, которые я использовал для тестирования, были скомпилированы как «Любой процессор». В IIS в каждом из пулов приложений, которые я использовал для этих приложений, для параметра «Включить 32-разрядные приложения» (в разделе «Дополнительные параметры») установлено значение False. Как только я установил для каждого из них значение True, все веб-приложения заработали должным образом.
Мне больше не нужен обходной путь «добавить сборку = *» — похоже, ASP.NET снова находит то, что ему нужно, в папке BIN. Также была дополнительная ошибка ASP.NET, не находящая поставщика сборки для файлов ASPX. Эта дополнительная ошибка также исчезла.
Надеюсь, это поможет кому-то в будущем. Спасибо за ответы!
Есть ли WingtipToys.dll в GAC? Может загружается старая версия??