Загрузка...

Builder/Билдер. C#

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

Загрузка...
  1. Alex_inactive
    Alex_inactive Автор темы 18 мар 2013 14 18 мар 2013
    Всем привет, думаю каждый из вас пользовался программой так называемой "Билдером", она создавала исполняемые файлы (.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
     
  2. Checkerchin
    Checkerchin 24 окт 2017 178 16 апр 2017
    Привет. Возникла ошибка в этой строчке кода:
    Код

    string Source = Properties.Resources.bild; //Путь к файлу с исходниками
    Мой файл называется res.txt, я пишу:
    Код

    string Source = Properties.Resources.res; //Путь к файлу с исходниками
    В файл resourse.resx зайкинул.
    Сама ошибка: error CS0117: 'Resources' does not contain a definition for 'res'
     
  3. Checkerchin
    Checkerchin 24 окт 2017 178 16 апр 2017
    Исправил все.
     
  4. Checkerchin
    Checkerchin 24 окт 2017 178 16 апр 2017
    Есть один вопрос: Если я хочу графический интерфейс(с лэйбалами, текстбоксами и кнопками), то как его сделать?
     
  5. Watchiz
    Watchiz 6 янв 2018 34 24 мар 2017
    Ну там более - менее легко.
     
Top