【问题标题】:Can an application compile and create another application? [duplicate]一个应用程序可以编译并创建另一个应用程序吗? [复制]
【发布时间】:2011-12-16 12:34:36
【问题描述】:

可能重复:
How to programatically build and compile another c# project from the current project

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

【问题讨论】:

  • 你可以使用命令行来编译你的程序
  • @GabrielGM 我已经说过“所以我认为它可以使用 Visual Studio 的命令行工具在代码中使用 csc 命令”

标签: c# .net csharpcodeprovider


【解决方案1】:

确定你可以做到这一点,看看课程:Microsoft.CSharp.CSharpCodeProvider

在这篇文章中:Compiling and Executing Code at Runtime

附:您并没有真正从代码中调用 csc 命令,但在我的理解中,它的调用方式要低一些……这无论如何都很好,因为您使用托管类而不是外部工具。

【讨论】:

    【解决方案2】:

    当 Program1.exe 运行时,Windows 应该拒绝对该文件的写访问... 如果我正确理解了您的问题,我会说这绝对不是要走的路。要在运行时改变自身,程序应该使用某种形式的反射。

    如果您想提高效率,请查看Emit,它为您提供完整的字节码访问能力(以及相关的危险)。 几年前,我使用了 CodeProject 的一个项目,它帮助我解决了细节问题。我在 .NET 2.0 上工作,现在肯定有更新的东西(比如this)。

    或者您可以使用CSharpCodeProvider,并构建要加载的程序集(从源代码或树表示编译)。

    您也可以使用 csc 编译程序集,并将其加载到正在运行的程序中。如果您采用这种方式,则在程序集加载时需要注意。 This 链接可能很有用。

    【讨论】:

      猜你喜欢
      • 2014-08-26
      • 1970-01-01
      • 1970-01-01
      • 2011-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多