Visual Studio 2010创建编译代码的应用程序

时间:2013-04-12 08:54:46

标签: c# c++ c compilation

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

长篇故事:

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

这对我来说是一个新想法,谷歌搜索没有给我我想要的结果所以我决定来StackOverflow,因为我之前已经回答了很多问题而不必问(你们这些人很棒)。

TL; DR版本:

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

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

4 个答案:

答案 0 :(得分:1)

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

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

对于您的编译/脚本需要使用CS-Script

你可以在4-5小时内启动并运行这些,你可以通过一些工作来实现热交换实体脚本。

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

天啊,我愿意打赌你甚至可以抓住CS-Script在内存中制作的程序集并保存以供日后使用。

如果您再次通过“制作新发动机车轮重塑”阶段,您可以回来并支持其他语言。

答案 1 :(得分:0)

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

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

请参阅:MSBuild (MSDN)

答案 2 :(得分:0)

如果您更多地谈论编辑方面,那么可能是Visual Studio Shell:Wikipedia说出以下内容:

  

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

你可以让这个shell调用任何编译器......但很多的工作。

答案 3 :(得分:0)

您可以查看以下内容:

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));

此代码将编译results变量中的代码并将其输出到foo.exe