На веб-сайте ASP.NET с кодом в какой момент скомпилированы файлы .cs?

Вкратце: На веб-сайте ASP.net с кодом, в какой момент скомпилированы файлы *.cs?

Контекст: Коллега, который с тех пор ушел, развернул веб-сайт с кодом .cs на общий сервер. Я внес небольшое изменение в файл .cs, который я должен ожидать отразить на одной из страниц, но он еще не появился. Я перезапустил пул приложений, однако я ненавижу reset IIS на сервере, так как есть несколько приложений других команд, которые могут быть использованы на одном сервере.

Ответ 1

Это относится к проектам Web Application в отличие от проектов Web Site, которые по умолчанию CodeFile, и не позволяют изменять действие сборки...

В ASP.NET Web Applications у вас есть два метода развертывания ваших страниц; CodeFile и CodeBehind. По умолчанию страницы всегда будут использовать CodeBehind, но вы можете изменить это.

CodeBehind

CodeBehind компилирует ваш .cs файл в DLL файл в папку bin при компиляции/время сборки, а затем вы развертываете его на своем веб-сервере. Нет необходимости разворачивать файл .cs на ваш веб-сервер. Если вы это сделаете, он просто сидит там, пока не будет использован.

Чтобы настроить страницу с помощью CodeBehind, убедитесь, что:

  • Директива страницы в вашем файле .aspx имеет CodeBehind="your.aspx.cs"
  • Свойства файлов .cs и .designer.cs в проводнике решений имеют build-action compile.

CodeFile

Это заставляет ASP.NET компилировать файл .cs на лету на сервере. Это означает, что ваш файл .cs необходимо развернуть на веб-сервере. Это также означает, что ваш файл .cs не будет скомпилирован в момент компиляции/сборки и поэтому не будет встроен в ваш .dll в папке bin.

Основное преимущество

С CodeFile вы можете внести изменения в файл .cs и развернуть только этот файл, чтобы увидеть изменения на вашем веб-сервере производства. Нет необходимости повторно развертывать. Не нужно перерабатывать пул приложений. Это может быть очень полезно во многих ситуациях.

Чтобы настроить страницу с помощью CodeFile, убедитесь, что выполнено все из следующих элементов:

  • Директива страницы в файле .aspx имеет CodeFile="your.aspx.cs"
  • Свойства файла .cs в проводнике решений имеют build-action content
  • Свойства файла .designer.cs в проводнике решений имеют build-action none.

Примечания

  • Intellisense не любит работать, когда страницы настроены с помощью CodeFile (вы можете изменить CodeBehind во время кодирования, а затем изменить его для развертывания).
  • Если вы изменили код CodeBehind на CodeFile, то всегда выполните перестроить и повторно развернуть (и наоборот). Это происходит потому, что, когда страница была CodeBehind, .cs был скомпилирован в .dll в папке bin и будет оставайтесь там, когда вы переходите на CodeFile. CodeFile будет скомпилированные на лету, и вы получите тот же код/​​классы, определенный в .dll и в компилированном коде "на лету", что приведет к ошибки времени выполнения.

Ответ 2

Для настройки, которую я использую, файлы .cs компилируются при создании проекта. Это означает, что DLL файлы в bin должны быть изменены, а не файлы .cs.

Файлы .aspx могут меняться в любое время, но я думаю, что вам нужно перестроить проект, чтобы код был в силе.

Я заменил исключительные .dlls без проблем (хотя это не очень хорошая практика).

Ответ 3

По-видимому, то, что вы сделали, должно работать. Проверьте, выполнено ли кэширование. В противном случае опубликуйте код и разверните dll вместо файла .cs. Я бы порекомендовал протестировать на промежуточном сервере, прежде чем вы перейдете в эфир.