Может ли приложение скомпилировать и создать другое приложение?
Возможный дубликат:
Как программно собрать и скомпилировать другой проект C# из текущего проекта
Допустим, у нас есть приложение с именем Program1.exe, поэтому, когда я нажимаю на этот exe-файл, программа должна создать еще один exe-файл, скажем, Program2.exe, который пишет "hello world" на экране. Поэтому я думаю, что это возможно, используя инструмент командной строки Visual Studio, используя команду csc в коде, в любом случае, если это возможно, может ли Program2.exe заменить Program1.exe? Я имею в виду, что Program1.exe может перекомпилироваться во время выполнения?
2 ответа
Уверен, что вы можете сделать это, взгляните на класс: Microsoft.CSharp.CSharpCodeProvider
и в этой статье: Компиляция и выполнение кода во время выполнения
PS Вы на самом деле не вызываете команду csc из кода, но что-то гораздо ниже, в моем понимании... что в любом случае хорошо, так как вы используете управляемые классы, а не внешний инструмент.
Пока запущен Program1.exe, Windows должна запретить доступ на запись в файл... Если я правильно понял ваш вопрос, я бы сказал, что это определенно не тот путь. Чтобы изменить себя во время выполнения, программа должна использовать некоторую форму Reflection.
Если вы хотите работать эффективно, посмотрите на Emit, который дает вам полную силу доступа к байт-коду (и связанную с этим опасность). Несколько лет назад я использовал проект от CodeProject, который помог мне проработать детали. Я работал над.NET 2.0, теперь наверняка есть что-то более свежее (как этот).
Или вы можете использовать CSharpCodeProvider и создавать сборки для загрузки (либо компилировать из исходного кода, либо из представления дерева).
Вы также можете использовать csc для компиляции сборки и загрузить ее в работающую программу. Если вы пойдете по этому пути, вам потребуется некоторое внимание при загрузке сборки. Эта ссылка может быть полезной.