Builder/Билдер. C#

  • Автор темы Alex
  • Обновлено
  • 19, Mar 2013
  • #1
Всем привет, думаю каждый из вас пользовался программой так называемой "Билдером", она создавала исполняемые файлы (.exe) с учётом наших данных.

Т.к. авторам некоторых программ просто рутинно для каждого юзера менять пару строк кода и компилировать заново, они пользуются методом создания builder-a для готовой программы.
Тут я опишу, как написать свой билдер на C#.
Нам потребуется
1. Microsoft Visual Studio с дистрибутивом C#
2. Исходный код программы в текстовом формате (файлик .txt например).
3. Базовые знания о C#
Итак
1. Создадим Window Forms приложение. Кинем на него нужные лабелы/текст боксы.../ и самое важное - КНОПКУ.



2. Кинем наш исходный код в ресурсы программы.
Вот например мой код:
 
using System;
using System.Windows.Forms;
using System.Text;
namespace WhoWantBees
{
 class Program
 {
 static public string messageToWorld = "Nickitee";
 static void Main(string[] args)
 {
 MessageBox.Show(messageToWorld + " want do the harlem shake!");
 }
 }
}




3. Теперь самое главное, надо сделать исходный файл для компиляции, в принципе он готов, но в нём всё статическое, давайте заменим

 
 static public string messageToWorld = "Nickitee";


на

 
 static public string messageToWorld = "[DynamicMessage]";


(Изменения производим в билд файле)

4. Подключим следующее:

 
using System.CodeDom.Compiler;
using Microsoft.CSharp;


5. Сам код для компиляции, поставим его на эвент кнопки "Click":

 
 try
 {

 CompilerParameters Params = new CompilerParameters();
 Params.GenerateExecutable = true;
 Params.ReferencedAssemblies.Add("System.dll"); //Добавлем линк в исходный файл на System.dll
 Params.ReferencedAssemblies.Add("System.Windows.Forms.dll"); //Тоже самое но на System.Windwos.Forms.dlle
 Params.CompilerOptions += "\n/t:winexe"; //Убираем cmd окно путём объявления программы Windows приложением

 Params.OutputAssembly = "OpenMe.exe"; //Имя исходного файла

 string Source = Properties.Resources.bild; //Путь к файлу с исходниками

 Source = Source.Replace("[DynamicMessage]", textBox1.Text);
 var settings = new Dictionary<string, string>();
 settings.Add("CompilerVersion", "v2.0"); //Указываем версию framework-a 2.0

 CompilerResults Results = new CSharpCodeProvider(settings).CompileAssemblyFromSource(Params, Source);

 if (Results.Errors.Count > 0)
 {

 foreach (CompilerError err in Results.Errors)
 MessageBox.Show(err.ToString()); //Выводим циклом ошибки, если они есть
 }
 else
 {
 MessageBox.Show("Готово, файл появится в том же месте где и программа :)"); //Выводим сообщение что всё прошло успешно
 }
 }
 catch (Exception ex) { MessageBox.Show(ex.Message); }


6. Запускаем, вводим что нам надо в text бокс и жмём Build, запускаем получившийся файл (создастся там где и сама программа).
7. Profit!1111



by Nickitee

Alex


Рег
18 Mar, 2013

Тем
93

Постов
239

Баллов
724
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно