файл .asmx с отсутствующим исходным файлом не выдает ошибку компиляции

#c# #asp.net #web-services

#c# #asp.net #веб-сервисы

Вопрос:

У меня есть веб-приложение AspNet. У него есть веб-служба .asmx. Содержимое следует:

 <%@ WebService Language="C#" CodeBehind="~/App_Code/SystemNotificationsService.cs" Class="SystemNotificationsService2" %>
  

Обратите внимание, что codebehind не существует. Класс не существует. Тем не менее, он все равно компилируется без ошибок. Не обрабатывает ли он этот файл до времени выполнения?

Спасибо.

Комментарии:

1. Эта строка больше похожа на ссылку, а не на фактический код, поэтому на самом деле она не компилируется в том же смысле. Я никогда не подтверждал это, но я думаю, что это более или менее верно. P.S. Если нет кода, файл asmx может быть удален.

Ответ №1:

Я считаю, что все, что находится внутри App_Code , не компилируется до тех пор, пока к нему не будет получен доступ. Это приложение для веб-сайта в старом стиле, а не веб-приложение? Если это веб-приложение, вам не следует использовать App_Code папку, особенно если вы используете более новую версию C #, так как вы получите ошибки.

Комментарии:

1. Это было приложение для веб-сайта. Я скопировал / вставил все файлы в приложение веб-сайта в новый проект. Сначала он не запускался из-за app_code . Это вызывало повторяющиеся ссылки, пока я не переименовал папку App_Code в AppCode. В этом конкретном файле .asmx я забыл обновить codebehind, чтобы указать на новое местоположение, и был удивлен, обнаружив, что он все еще скомпилирован. Даже когда я ввел несуществующий класс в файл .asmx, он все равно скомпилировался. Я пришел к выводу, что он даже не просматривает этот файл до времени выполнения.

2. Новый проект? Новый проект — это веб-приложение или веб-сайт — у нового проекта не должно быть папки App_Code . Я не понимаю, где вы говорите «В этом конкретном файле .asmx я забыл обновить codebehind, чтобы указать его в новое местоположение». Для тестирования просто поместите C # в файл .asmx. Я бы создал новый проект WebApp и попробовал еще раз.

3. Первоначальный проект был проектом веб-сайта, я создал новый проект webapp. И скопировал содержимое старого проекта в новый проект. Таким образом, у него была папка App_Code, но в проектах webApp не должно быть папки с именем App_Code, поэтому я переименовал ее в AppCode . Я обновил все ссылки на код, которые указывали на переименованную папку. Все работает. Я был просто удивлен, обнаружив, что он полностью игнорирует файл asmx во время компиляции. Похоже, он ожидает до времени выполнения, затем просматривает имя класса.