Пишем билдер C# вариант 1

rif009

Legend UFO
Сообщения
23
Оценка реакций
20
Бывает такое что программист сталкивается с такой проблемой что под каждого человека нужно создавать отдельную сборку,
притом в коде меняется только значения некоторых переменных. Для таких случаев создают Bilder` ы которые позволяют экономить время.
В данной статье я хочу показать один из способов создание билдов на нашем любимом языке c#.

Слава нашему монстру что шарп предоставляет возможность динамической компиляции а именно мы познакомимся с пространством имен System.CodeDom
с помощью него мы можем компилировать код прям из нашей сборки.

Создадим функцию которой мы будем в формате string передавать 2 параметра ,первый это непосредственно сам исходный код нашей программы и второй
это указываем директорию с названием для будущего билда.
Создадим новый экземпляр класса который позволяет нам компилировать заранее указав что компилируем шарп (для VB.Net используется new VBCodeProvider())
C#:
 CodeDomProvider compiler = new CSharpCodeProvider();
Так же нам нужно создать еще экземпляр класса который позволяет указать параметры, используемые для вызова компилятора.
C#:
 CompilerParameters Params = new CompilerParameters();
А дальше преступим непосредственно заданию параметров.
Укажем директорию с именем будущего билда.
C#:
Params.OutputAssembly = fileName;
Добавим необходимые ссылки
C#:
  Params.ReferencedAssemblies.Add("System.dll");
По желанию можно добавить параметров компиляции например создать приложение windowsform
C#:
Params.CompilerOptions += "/t:winexe";
Так же надо обязательно указать что компилируем исполняемый файл ибо по дефолту будет dll
C#:
Params.GenerateExecutable = true;
Под конец вызываем метод компиляции и проверяем на наличие ошибок если же они присутствуют выведем на экран
В итоге получим такую функцию


Для тестового проекта я добавил в ресурсы текстовый файл со след содержанием.

Обратим внимание на {TEXT} именного его я планирую заменять в каждом билде.
Кинем на форму кнопку и пару полей

Первое поле будем использовать чтоб получить текст который будем использовать для замены {TEXT},а второе для вывода ошибок.
И последний на сегодня код это код на событие нажатия на кнопку.

Собственно где мы получаем из ресурсов текст исходного кода и делая замену {TEXT} с помощью метода Replace на указанный пользователем текст вызываем нашу функцию для компиляцию.
При отсутствие ошибок радуемся полученной сборке^^

© rif009 2016

Скачать исходник

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.