Всем привет, думаю каждый из вас пользовался программой так называемой "Билдером", она создавала исполняемые файлы (.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!"); } } } Код 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 = "Nickitee"; на static public string messageToWorld = "[DynamicMessage]"; Код static public string messageToWorld = "[DynamicMessage]"; (Изменения производим в билд файле) 4. Подключим следующее: using System.CodeDom.Compiler; using Microsoft.CSharp; Код 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); } Код 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
Привет. Возникла ошибка в этой строчке кода: string Source = Properties.Resources.bild; //Путь к файлу с исходниками Код string Source = Properties.Resources.bild; //Путь к файлу с исходниками Мой файл называется res.txt, я пишу: string Source = Properties.Resources.res; //Путь к файлу с исходниками Код string Source = Properties.Resources.res; //Путь к файлу с исходниками В файл resourse.resx зайкинул. Сама ошибка: error CS0117: 'Resources' does not contain a definition for 'res'
Есть один вопрос: Если я хочу графический интерфейс(с лэйбалами, текстбоксами и кнопками), то как его сделать?