Ответ - Colorama для всех кроссплатформенных раскрасок в Python.
Ваши выводы кажутся правильными. Я бы проголосовал за перенос функциональных возможностей в один или несколько проектов библиотеки классов, поскольку это может открыть дверь для повторного использования тех же функций и в других проектах.
Похоже, что это возможно при использовании App_code , но я бы либо перенес эту логику в собственный проект библиотеки классов, либо изменил тип проекта на веб-приложение, как предлагают Фредрик и Колин.
Я всегда создаю свои собственные проекты ASP.NET как проекты веб-приложений, а не как сайты.
И, как указано в OP, также можно перейти в проект веб-приложения, который, я бы сказал, тоже чище, ваши страницы могут оставаться в проекте приложения wep, они будут у вас в 1 DLL (тестируемая). Вся ваша бизнес-логика и т. Д. Хранится в отдельной библиотеке / библиотеках классов.
У нас в компании есть такая проблема (моему боссу не нравятся DLL, какая-то ерунда с версионированием...)
У нас есть два способа ее обойти, которые мы часто используем:
1) Заставить CI инструмент делать модульное тестирование: Мы используем TeamCity, который имеет довольно тесную интеграцию с NUnit, и наше решение собирается достаточно быстро (и имеет достаточно мало тестов), чтобы это было приемлемым вариантом.
2) Ручная прекомпиляция и модульное тестирование полученных двоичных файлов: Вполне возможно запустить компилятор ASP.net / MSBuild из командной строки (как если бы вы делали сборку 'Publish') и просто протестировать полученные двоичные файлы.
Однако, если у вас есть возможность разделить код на двоичные файлы (библиотеки классов) или просто использовать веб-приложение, я бы предложил эту альтернативу.