Я столкнулся со странной проблемой при сборке моего приложения ASP.NET Core. Процесс сборки зависает на неопределенный срок всякий раз, когда я включаю code, который обращается к свойству context.Request.Path в промежуточном программном обеспечении. Однако приложение работает нормально при отладке.
У меня есть промежуточное программное обеспечение, которое изменяет путь запроса при возврате codeа статуса 404, поэтому оно отображает пользовательскую страницу 404 без изменения URL. Вот code промежуточного программного обеспечения:
Когда я собираю проект, процесс сборки зависает при вызове компилятора csc.exe. Visual Studio остается отзывчивым, но вывод сборки остается на той же команде на неопределенный срок. Я даже оставил его работать на ночь без какого-либо прогресса. Та же проблема возникает при запуске msbuild напрямую из командной строки.
Что интересно, приложение запускается нормально, когда я использую "Начать отладку". Проблема, похоже, характерна для процесса сборки.
Зависание происходит всякий раз, когда я обращаюсь к context.Request.Path. Простого чтения свойства без его изменения достаточно, чтобы вызвать проблему:
Промежуточное программное обеспечение регистрируется только тогда, когда среда не является средой разработки, но сборка выполняется в среде разработки.
app.Use(async (context, next) =>
{
await next();
if (context.Response.StatusCode == 404)
{
LogUtils.GetGlobalErrorLogger().Warn("Page not found: {PageUrl}", context.Request.GetDisplayUrl());
context.Request.Path = "/404"; // This line causes the issue
await next();
}
});
var path = context.Request.Path; // Causes the hang