CodeDom - Билдер на C# : Часть первая

CodeDom - Билдер на C# : Часть первая

Antlion

Начнём с того что из себя представляет CodeDom компилятор?

В среду .NET Framework включен механизм, который называется Code Document Object Model (CodeDOM). Он позволяет разработчикам программ, порождающих исходный код, создавать код на нескольких языках программирования во время выполнения на основе единой модели, представляющей код для визуализации.

В платформе .NET Framework имеются генераторы и компиляторы кода для языков CSharpCodeProviderJScriptCodeProvider и VBCodeProvider.

Перед тем, как мы попытаемся сгенерировать код, нам должно быть абсолютно ясно, что именно мы хотим сгенерировать. Написание нашего желаемого кода в виде черновика может быть очень полезным на наших ранних этапах создания кода, потому что слишком легко пропустить что-то иное.


Пути компилятора в Windows

Win + R = %systemroot%\Microsoft.NET\Framework64

То тут можем увидеть папки с разными версиями в некоторых из них хранится файл csc.exe он и компилирует Ваш исходный код.

У меня же нашло только в этих папках:

C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727

C:\WINDOWS\Microsoft.NET\Framework64\v3.5

C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319


Пример компиляции выглядит так:

C:\Windows\Microsoft.NET\Framework\v3.5\csc.exe /nologo hello.cs

Есть много способов динамической компиляции исходного кода программы, но в этой статье мы будем писать программу билдер которая будет:

Компилировать исходный код из ресурса билдера ( это *.txt формат файла)

Будьте очень внимательны при написание Stub (билда), компилятор не любит новый код C# (Sharp) начиная с 6-ой версии C#

Не пишите такие конструкции типа:

  • Методы лямбда-выражения:
static bool method => {...}
  • Интерполяция строк:
$"Hello {Environmet.UserName}"
  • Переменные типа:
var 
  • Условные выражения типа:
return HitWork ? true : false

За место них пишите стандартные функции типа:

  • За место лямбда используем такое:
static bool method() {...}
  • За место интерполяции пишем такое:
string.Format("Argument = {1}", arg1);
  • Используйте явный тип за место var типа:
string, bool, int и.т.д
  • За место условных выражений пишите стандартные типы возвращаемого значения:
if (Hitwork)
{ 
   return true;
} 
return false;

[Вариант первый]

Итак начнём с исходного кода (Stub)

Начала проекта Стаба

Немного информации

Информация

Переходим в класс AssemblyInfo.cs всё его содержимое ( уберите там лишние ) переместите в класс Program.cs как это показано ниже!

Класс AssemblyInfo.cs Нужно удалить чтобы избежать ошибок с повторными записями

AssemblyInfo перемещаем в главный класс

Теперь давайте научимся писать код внутри класса Program.cs

Вопрос: Для чего это нужно ?

Ответ: Это нужно для того чтобы по итогу написания файл Program.cs можно было изменить расширение на .txt и закинуть его в ресурсы

Класс внутри класса

Запишем метод в другом классе (внутри класса) и зададим ему аргументы которые потом будем изменять в билдер-программе

Новый метод и аргументы для замены через билдер

Теперь выделяем это всё и копируем, создаём на рабочем столе текстовый файл и назовём его точно так же как и namespace нашего проекта Stub.txt и вставим туда наш код! Всё на этом написание Stub движка закончено. Закрываем студию.

Сохраняем код стаба (Stub) в текстовик

Теперь перейдём к написанию Билдера

:D Открываем опять студию, создаём новый проект windows форм ( можно и консоль - но это не удобно )

Начала проекта билдера

Создайте дизайн для программы, кинем туда: 1-ну Button, 2 -а TextBox, 2-а Label

В ссылках удалите всё лишнее как показано на скриншоте они просто не нужны.

Билдер программа

Заходим в ресурсы:

Проект - Свойства - Ресурсы

Жмём "Добавить ресурс" и выбераем наш текстовый файл Stub.txt, закрываем вкладку ресурсы )

Stub (движок) добавляем в ресурсы

Создаём класс Source.cs

Source.cs класс компиляции

Теперь переходим в форму, кликаем два раза на кнопку(button) и запишем такой код:

P.S: Старайтесь давать имена всем кнопкам, лабелам и.т.д
/*1-ый аргумент это наше имя файла при создание, 2-ой это наше сообщение */
Source.Editor(this.FileNameTextBox.Text, this.MessageTextBox.Text);
Старт компиляции

Теперь у нас всё готово)

Компилируем, запускаем, вводим данные жмём создать (билд) готовый файл с изменениями.

Демонстрация работы билдера

Как видим всё работает!

В имени файла мы задали

Test.txt - это имя файла который создаётся после запуска билд файла

Ваше сообщение - Мы ввели Good work ( хорошая работа ) при запуске файла Test.txt видим это сообщение.

Вторая часть!


Видео ролик по созданию билдера


Более детальное аргументирование Вы найдёте в проектах.

SHA256 Архива: 3a1d0e3f9bd6ed4fe2e13fa54cbdcf9a352265595a02c5eb58f49306647fd8e0

Ссылка на все проекты (готовые) в Архиве: https://mega.nz/#!jOAEnSZT!3czopPsiTMIq-dKk4CeYdThqxdfchqHTgovjnF8XvRk

Дополнительная ссылка: https://yadi.sk/d/9IeR-D7NNIiQvw

#Developer: Antlion

------------------------------------------------------------------------------------------------------------------------

Всем Удачи :D

Report Page