可能重复:
How to programatically build and compile another c# project from the current project
让我们说我们有一个名为Program1.exe的应用程序,所以当我点击该程序必须创建另一个exe的exe时,可以说在屏幕上写“hello world”的Program2.exe。所以我认为可以在代码中使用csc命令使用visual studio的命令行工具,无论如何,如果可能的话,Program2.exe会替换Program1.exe吗?我的意思是Program1.exe可以在运行时重新编译吗?
答案 0 :(得分:7)
确定你可以这样做,看看上课:Microsoft.CSharp.CSharpCodeProvider
并在本文中:Compiling and Executing Code at Runtime
P.S。你并没有真正从代码中调用csc命令,但是在我的理解中有所降低...当你使用托管类而不是外部工具时这是好的。
答案 1 :(得分:1)
当Program1.exe运行时,Windows应该拒绝对该文件的写访问权限... 如果我理解你的问题,我会说这绝对不是你要走的路。要在运行时更改自身,程序应使用某种形式的反射。
如果您想有效地工作,请查看Emit,它为您提供完整的字节码访问能力(以及相关的危险)。 几年前我使用了CodeProject的一个项目,帮助我弄清楚细节。我正在研究.NET 2.0,现在肯定有更新的东西(比如this)。
或者您可以使用CSharpCodeProvider,并构建要加载的程序集(从源代码编译或从树表示编译)。
您也可以使用csc编译程序集,并将其加载到正在运行的程序中。如果你这样做,你需要在装配加载时注意一些。 This链接可能很有用。