PDA

Просмотр полной версии : [Статья] Builder/Билдер. C#


Nickitee
05.03.2013, 23:31
Intro
Всем привет, думаю каждый из вас пользовался программой так называемой "Билдером", она создавала исполняемые файлы (.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).CompileAssemblyFromSo urce(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
[Ссылки могут видеть только зарегистрированные и активированные пользователи]

Гайд подготовил Nickitee специально для Zhyk.ru
Автор не несёт ответственности за пользование информацией
При копировании гайда, указывать автора и первоисточник (Zhyk.ru)

fenix2559
07.03.2013, 21:03
Молодец, очень помогло. Давно искал подобный гайд :) Так держать вообщем

Bac9DKo
28.03.2013, 12:16
А зачем это нужно? Разве стандартные функции студии не могет такого?

Nickitee
28.03.2013, 13:19
А зачем это нужно? Разве стандартные функции студии не могет такого?
Это ещё какие стандартные функции студии?

iamzero
03.04.2013, 23:59
мммм. а чт оделать если нужно создать с формой, а не простое сообщение?

Nickitee
04.04.2013, 01:11
мммм. а чт оделать если нужно создать с формой, а не простое сообщение?
Объявляй новую форму

Form Main = new Form();

Дальше задаёшь ей все параметры и тд

Main.Text = "Batman";
Main.Size = new Size(100, 200);

и в инициализирующей функции после всех объявлений

Application.EnableVisualStyles();
Application.Run(Main);

Lama12
06.07.2013, 21:23
Объявляй новую форму

Form Main = new Form();

Дальше задаёшь ей все параметры и тд

Main.Text = "Batman";
Main.Size = new Size(100, 200);

и в инициализирующей функции после всех объявлений

Application.EnableVisualStyles();
Application.Run(Main);


Здравствуйте! Честно сказать пришел на данный форум из за вашего урока. Администрация, обратите внимание что Nickitee приносит большую пользу данному ресурсу.

Хотел спросить следующее. Допусти мне нужно кинуть таймер и указать интервал, и естественно код на таймер. Как это реализовать?

Спасибо!

Sinyss
06.07.2013, 22:34
Допусти мне нужно кинуть таймер и указать интервал, и естественно код на таймер. Как это реализовать?
Не то что бы я кэп, но вам надо сделать ровно следующее:
Кинуть таймер на форму, указать интервал в настройках и естественно задать ваш код на таймер...

ajaz
04.11.2014, 12:16
Как сделать так чтобы после билда программа на выходе имела определенную иконку ? Ну тобишь сам файл программы

Bovi4-ua
04.01.2015, 15:13
делаю билдер,сам билдер работает,но создаёт программу с кодам Fuck work = new Fuck();

Fuck.Url("[Ссылки могут видеть только зарегистрированные и активированные пользователи]");

Fuck.AddCookies(); ,которая при запуске иво не воспринимает

Licoze
04.05.2015, 03:59
Возникают траблы с подключением внешней библиотеки.
Сам файл компилируется, но при запуске ошибка.
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Кто знает как решить?

CompilerParameters Params = new CompilerParameters();
Params.GenerateExecutable = true;
Params.ReferencedAssemblies.Add("System.dll");
Params.ReferencedAssemblies.Add("System.Windows.Forms.dll");
Params.ReferencedAssemblies.Add("System.Data.dll");
Params.ReferencedAssemblies.Add("System.Data.SQLite.dll");
Params.ReferencedAssemblies.Add("System.Xml.dll");

Добавлено через 7 минут
Скорее всего это потому, что компилируется программа под any CPU, как выставить х86?

Добавлено через 21 минуту
Проблему решил, если кому надо поменять платформу:
Params.CompilerOptions += "\n/t:winexe \n/platform:x86"
И остальные параметры тут [Ссылки могут видеть только зарегистрированные и активированные пользователи]