Как решить проблему с добавлением обычных классов в легаси проект на вебформах?
День добрый.
Довелось столкнуться с легаси проектом (10 лет кажется) на шарпе, который писался без особых, так скажем, изысков.
Цель - рефакторинг.
Соответственно первое же что мне потребовалось - выделение кучи логики из хардкода в маршрутах куда-нибудь еще.
И вот проблема - все мои добавляемые файлы никаким образом не распознаются на эндпоинтах (ошибки уровня неизвестных неймспейсов, классов, и тд). Т.к. я сам крайне мало с шарпом работал, то, по всей видимости, даже не смог сформировать вменяемый запрос в гугл, который дал бы мне ответ. Работа ведется не через студию и не локально. Если у опытных ребят тут есть ответ на эту ситуацию - буду рад услышать.
Pavel Karinin, Ведется на удаленном сервере пока что. Параллельно локальная развертка осуществляется, но пока без достаточных успехов.
Попробую уточнить, чего хочу добиться.
Сейчас в проекте около 100 маршрутов, каждый из которых дублирует уйму логики (даже авторизацию).
Я хочу вынести такие дублирующие куски в классы-хелперы для начала, потом в иерархию наследования и тд. Шутка ли 4к строк в одном маршруте иметь, который в себя включает все от а до я и крупицу реально полезной логики. И так 100 раз повторяется.
То есть, я бы хотел сделать к примеру класс AuthorizationHelper, который был бы доступен с любого маршрута. Но вот никак - они к нему не подтягиваются.
Pavel Karinin, Если можно поподробнее. Смотри, я как представляю, IIS при старте компилирует все относящиеся к проекту файлы с кодом, ну и далее уже к скомпилированному обращается (если ошибаюсь, поправь). Соответственно, когда я пытаюсь впихнуть что-то, что не соответствует определению конечного маршрута - у меня получается тупо пропуск. Например я создаю в корне директорию Core -> Utils -> Plurals.cs. Задаю, конечно же, неймспейс, Core.Utils, но не имею возможности к этому коду обратиться откуда то еще, потому что, вероятно, IIS его просто не подхватывает. Если есть какие-то конфиги, где правила сборки задаются, или еще че, это было бы подходящим для меня вариантом.
Или, если можно, ссылку на какую-то документацию по структуре манифестов(или что там) ASP/IIS, потому что я сам нагуглить сумел только простые варианты при локальной разработке, которые и без того прекрасно работают.
JimmDiGreez, Не завидую вам, задача у вас очень сложная, тем более нет сырья (как я понимаю). Когда вы добавляете файлы в проект, служба IIS (если по-простому) уничтожает текущий домен приложения, динамически компилирует сборку и загружает ее в новый домен. Затем происходит запуск приложения. При запуске приложения все маршруты (если они определены) регистрируются, но это не всегда при запуске может быть выполнено, бывают случаи когда это можно сделать по ходу работы приложения, сложнее, но можно. Маршрутам сопоставляются обработчики. По умолчанию типам файлов и маршрутам не указанным в обработчиках устанавливаются стандартные обработчики (см. конфигурацию IIS), где первым делом проверяется наличие запрошенного файла и т.д. (так в основном для статики работа идет). Динамические страницы (типа aspx) ведут себя подобным же образом, за исключением того, что могут быть еще и так называемые виртуальные пути, но у страниц есть "типовые" обработчики, которые кстати тоже могут быть переопределены (см. web.config)
JimmDiGreez, Скажите а вам вообще карта маршрутов известна?, если да, то я бы на вашем месте сделал бы проще: использовал бы urlrewrite в котором определил бы (пакетами, шаблонами) маршруты, если вы уже знаете узловые обработчики, то эти маршруты сопоставил бы с ними... и все
Pavel Karinin, сейчас по конфигам шарюсь, отпишу как что-нибудь интересное найду. Так ведь тут дело в том, что это не обработчики, а просто код с логикой. Обработчики то нынешняя развертка цепляет как надо, даже ничего не нужно делать.
Pavel Karinin, В общем все оказалось очень просто. Не знаю, почему так долго не мог этого найти. В итоге наткнулся на это перебирая все возможные опции конфигурации. Для "левого" кода надо было в корне проекта создать директорию "App_Code", и в конфиге в секции compilation указать поддиректории в codeSubDirectories. https://msdn.microsoft.com/en-us/library/54dwfbb7(...
В общем все оказалось очень просто. Не знаю, почему так долго не мог этого найти. В итоге наткнулся на это перебирая все возможные опции конфигурации. Для "левого" кода надо было в корне проекта создать директорию "App_Code", и в конфиге в секции compilation указать поддиректории в codeSubDirectories. https://msdn.microsoft.com/en-us/library/54dwfbb7(...