CodeDom - Билдер на C# : Часть первая
AntlionНачнём с того что из себя представляет CodeDom компилятор?
В среду .NET Framework включен механизм, который называется Code Document Object Model (CodeDOM). Он позволяет разработчикам программ, порождающих исходный код, создавать код на нескольких языках программирования во время выполнения на основе единой модели, представляющей код для визуализации.
В платформе .NET Framework имеются генераторы и компиляторы кода для языков CSharpCodeProvider, JScriptCodeProvider и 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 Нужно удалить чтобы избежать ошибок с повторными записями

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

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

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

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

Создайте дизайн для программы, кинем туда: 1-ну Button, 2 -а TextBox, 2-а Label
В ссылках удалите всё лишнее как показано на скриншоте они просто не нужны.

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

Создаём класс 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