4

我希望能够从我创建的另一个应用程序中编译代码。

很长的故事:

我正在使用 SDL 从头开始​​创建 2D 引擎(请不要评论什么更好用)。我了解如何使用 SDL 库并且可以创建简单的游戏。但是,我想致力于更大的项目,但我需要创建一个应用程序来帮助我组织代码和整个系统。基本上,这个程序是一个编辑器(很像unity或UDK,但当然没有那么先进)。使用代码编辑器等对实际应用程序进行编程并不难,但我的问题是如何获取该代码并将其编译、运行和/或导出为 exe?(获取代码和脚本并将它们放入架构中进行编译不是问题,而是知道如何编译它的想法)。

这对我来说是一个新想法,谷歌搜索并没有给我想要的结果,所以我决定来到 StackOverflow,因为我以前在这里得到了很多问题的回答,而不必问(顺便说一句,你们很棒)。

TL;DR 版本:

从另一个自制应用程序编译代码。

(我的想法是使用 C# 作为界面或 gui,然后使用 C/C++ 作为实际引擎)

4

4 回答 4

1

我的回答是基于我会做什么(至少在开发期间): 使用现有组件。即一个编辑器和一个脚本编译器;

对于您的编辑器,您可以使用Avalon Edit

对于您的编译/脚本需求,请使用CS-Script

您可以在 4 到 5 小时内启动并运行这些脚本,并且您几乎可以通过一些工作来热交换实体脚本。

只需有一个基本的 exe,它可以读取项目的根脚本文件并开始运行它。

见鬼,我敢打赌,你甚至可以获取 CS-Script 在内存中生成的程序集并保存以供以后使用。

如果您随后通过了“制造新引擎-车轮-改造”阶段,您可以回来支持其他语言。

于 2013-04-12T09:38:48.530 回答
0

如果您正在谈论构建像 Unity 这样的视觉编辑环境 - 可以托管渲染的视觉效果、游戏引擎变量的 UI 句柄、音频编辑以及脚本编辑和这些脚本的编译,那么您将需要使用 MSBuild 之类的东西。

由于您声明您可以控制项目文件的打包和管理,并假设您打算构建此自定义界面以对 Visual Studio 解决方案引用的文件进行修改,那么您需要做的就是调用 MSBuild使用适当的命令行参数。

请参阅:MSBuild (MSDN)

于 2013-04-12T09:13:07.963 回答
0

如果您更多地谈论编辑方面,那么也许 Visual Studio Shell: Wikipedia会说以下内容:

Visual Studio 2008 引入了允许开发定制版 IDE 的 Visual Studio Shell。Visual Studio Shell 定义了一组提供任何 IDE 所需功能的 VSPackage。最重要的是,可以添加其他软件包来自定义安装。shell 的隔离模式会在安装包的位置创建一个新的 AppId。这些将使用不同的可执行文件启动。它旨在为特定语言或特定场景开发自定义开发环境。集成模式将软件包安装到专业/标准/团队系统版本的 AppId 中,以便工具集成到这些版本中。 [16] Visual Studio Shell 可免费下载。

你可以让这个 shell 调用任何编译器……不过需要做很多工作。

于 2013-04-12T09:29:39.410 回答
0

You can have a look at the following:

var csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });
var parameters = new CompilerParameters(new[] { "mscorlib.dll", "System.Core.dll" }, "foo.exe", true);
parameters.GenerateExecutable = true;
CompilerResults results = csc.CompileAssemblyFromSource(parameters,
@"using System.Linq;
    class Program {
      public static void Main(string[] args) {
        var q = from i in Enumerable.Rnge(1,100)
                  where i % 2 == 0
                  select i;
      }
    }");

results.Errors.Cast<CompilerError>().ToList().ForEach(error => Console.WriteLine(error.ErrorText));

This code will compile the code in the results variable and output it to foo.exe.

于 2013-04-12T10:50:05.090 回答