假设我们有一个名为 Program1.exe 的应用程序,所以当我单击该 exe 时,该程序必须创建另一个 exe,让我们说 Program2.exe 在屏幕上写“hello world”。所以我认为它可以在代码中使用 csc 命令使用 Visual Studio 的命令行工具,无论如何,如果它可能 Program2.exe 可以替换 Program1.exe?我的意思是 Program1.exe 可以在运行时重新编译?
问问题
1935 次
2 回答
7
确定你可以做到这一点,看看类:Microsoft.CSharp.CSharpCodeProvider
在这篇文章中:在运行时编译和执行代码
PS,您并没有真正从代码中调用 csc 命令,但在我的理解中,它的调用方式要低一些……无论如何,这很好,因为您使用托管类而不是外部工具。
于 2011-12-16T12:40:18.317 回答
1
当 Program1.exe 正在运行时,Windows 应该拒绝对该文件的写访问...如果我正确理解了您的问题,我会说这绝对不是要走的路。要在运行时改变自身,程序应该使用某种形式的反射。
如果您想高效地进行操作,请查看Emit,它为您提供了完整的字节码访问能力(以及相关的危险)。几年前,我使用了 CodeProject 的一个项目,它帮助我解决了细节问题。我正在研究 .NET 2.0,现在肯定有更新的东西(比如this)。
或者您可以使用CSharpCodeProvider并构建要加载的程序集(从源代码或树表示编译)。
您也可以使用 csc 编译程序集,并将其加载到正在运行的程序中。如果您采用这种方式,则在程序集加载时需要注意。此链接可能很有用。
于 2011-12-16T13:02:00.243 回答