2

可能重复:
如何从当前项目以编程方式构建和编译另一个 c# 项目

假设我们有一个名为 Program1.exe 的应用程序,所以当我单击该 exe 时,该程序必须创建另一个 exe,让我们说 Program2.exe 在屏幕上写“hello world”。所以我认为它可以在代码中使用 csc 命令使用 Visual Studio 的命令行工具,无论如何,如果它可能 Program2.exe 可以替换 Program1.exe?我的意思是 Program1.exe 可以在运行时重新编译?

4

2 回答 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 回答