Ваш ключ: необходима авторизация | MyProxy - бесплатный обменник валидных прокси между пользователями форума.

Builder/Билдер. C#

Тема в разделе C#, создана пользователем Alex, 18 мар 2013.

Войдите для ответа
  1. Alex Новорег

    Alex
    Статус:
    Вне сети
    Сообщения:
    21
    Симпатии:
    4
    Регистрация:
    25.03.13
    Всем привет, думаю каждый из вас пользовался программой так называемой "Билдером", она создавала исполняемые файлы (.exe) с учётом наших данных.


    Т.к. авторам некоторых программ просто рутинно для каждого юзера менять пару строк кода и компилировать заново, они пользуются методом создания builder-a для готовой программы.


    Тут я опишу, как написать свой билдер на C#.

    Нам потребуется






    1. Microsoft Visual Studio с дистрибутивом C#


    2. Исходный код программы в текстовом формате (файлик .txt например).


    3. Базовые знания о C#

    Итак






    1. Создадим Window Forms приложение. Кинем на него нужные лабелы/текст боксы.../ и самое важное - КНОПКУ.


    [​IMG]


    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!");
    
            }
    
        }
    
    }
    
    
    [​IMG]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


    [​IMG]by Nickitee
     
    18 мар 2013 #1
Top