[Из песочницы] Боевое применение компилятора C# для WEB Forms

Случаются времена, когда для компиляции сборки или приложения Visual Studio использовать не представляется возможным. Звучит это дико, но все-таки иногда случается. Например, необходима компиляция DLL из конфигуратора самописной SCADA-системы. Данный вопрос можно решить использованием класса CSharpCodeProvider. Но мы копнем глубже и создадим WEB Forms приложение без использования Visual Studio. Нашим основным инструментом станет csc.exe. Компилятор, поставляемый вместе с .NET Framework. Матерые программисты пустят скупую слезу, вспомнив свои первые шаги в .NET, а начинающим будет полезно увидеть метод применения компилятора и построение класса WEB Forms приложения. Итак, начнем…Приготовления и структура нашего мини-проектаДля начала определимся с функционалом, который мы хотим. Мы хотим WEB Forms приложение, содержащее одну форму default.aspx и которое выводит сообщение «Это работает» в метку на странице.Структура проекта %root%\deploy\bin\ default.aspx web.config source\ default.aspx.cs deploy.rsp deploy.bat default.aspx Ниже приведен код разметки: <%@ Page Language="C#" AutoEventWireup="false" Inherits="WForms_ByHands.MyPage" %> Ok

Имеем форму (form) myForm, и метку (asp: Label) testLabel, в которую мы будем выводить наше сообщение.К атрибуту «Inherits» директивы @ Page мы вернемся позднее.default.aspx.cs using System;

namespace WForms_ByHands { public partial class MyPage: System.Web.UI.Page { protected global: System.Web.UI.HtmlControls.HtmlForm myForm; protected global: System.Web.UI.WebControls.Label testLabel; public MyPage () { this.LoadComplete += Page_Load; } protected void Page_Load (object Sender, EventArgs e) { this.testLabel.Text = «Это работает!»; } } }

Мы объявляем класс страницы нашего приложения как WForms_ByHands.MyPage. Этот класс должен быть указан в атрибуте «Inherits» нашей формы. Этот класс будет загружен при обращении к нашей форме. Так как атрибут «AutoEventWireup» имеет значение «false», мы должны в конструкторе явным образом указывать процедуры-обработчики событий. Для примера выбрано событие «LoadComplete» — полная загрузка всех элементов страницы.Компиляция Чтобы скомпилировать наше приложение, можем записать все параметры сразу в командную строку, но воспользуемся ответным файлом. Ответный файл может содержать все параметры компилятора и являться единственным параметром в командной строке для csc.exe. Ниже приведен код ответного файла: /reference: System.Web.dll /*ссылка на сборку, содержащую классы System.Web.UI.HtmlControls.HtmlForm и System.Web.UI.WebControls.Label */ /target: library /out:%root%\deploy\bin\WForms_Handly.dll %root%\source\default.aspx.cs Также в директорию %root%\deploy необходимо добавить web.config c минимально требуемым кодом: Для компиляции проекта создан bat-файл, содержимое которого приведено ниже: csc @deploy.rsp iisexpress /path:%root%\deploy /port:80 /clr: v4.0 /*эта строка необходима в том случае, если используется IIS Express, в противном случае ее можно удалить. И настроить WEB-приложение в оснастке IIS.*/ В результате выполнения deploy.bat в директории %root%\deploy\bin\ мы обнаружим новый файл — сборку WForms_ByHands.dll приложения. Запросив в браузере URL ресурса (в моем случае http:\\localhost), увидим гордый текст «Это работает!».

© Habrahabr.ru