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

C# Visual Studio 2010创建编译代码的应用程序,c#,c++,c,compilation,C#,C++,C,Compilation,我希望能够从我创建的另一个应用程序编译代码 长话短说: 我正在使用SDL从头开始创建一个2D引擎(请不要评论什么更好用)。我了解如何使用SDL库,并能创建简单的游戏。然而,我想在更大的项目上努力,但我需要创建一个应用程序来帮助我组织代码和整个系统。基本上,这个程序是一个编辑器(很像unity或UDK,但当然不是那么高级)。用代码编辑器等编写实际应用程序并不困难,但我的问题是如何将代码编译、运行和/或导出为exe?(将代码和脚本放入体系结构进行编译不是问题,而是知道如何编译它的想法) 这对我来说是

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

长话短说: 我正在使用SDL从头开始创建一个2D引擎(请不要评论什么更好用)。我了解如何使用SDL库,并能创建简单的游戏。然而,我想在更大的项目上努力,但我需要创建一个应用程序来帮助我组织代码和整个系统。基本上,这个程序是一个编辑器(很像unity或UDK,但当然不是那么高级)。用代码编辑器等编写实际应用程序并不困难,但我的问题是如何将代码编译、运行和/或导出为exe?(将代码和脚本放入体系结构进行编译不是问题,而是知道如何编译它的想法)

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

TL;DR版本: 从另一个自制的应用程序编译代码


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

如果您正在谈论构建一个像Unity这样的可视化编辑环境,它可以承载渲染的视觉、游戏引擎变量的UI处理、音频编辑、,除了脚本编辑和编译这些脚本之外,您还需要使用类似于MSBuild的东西

由于您声明已控制了项目文件的打包和管理,并且假设您打算构建此自定义接口以修改visual studio解决方案引用的文件,那么您所需要做的就是使用适当的命令行参数调用MSBuild


请参阅:

如果您更多地谈论编辑方面,那么Visual Studio Shell:可能会说:

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));
VisualStudio2008引入了VisualStudioShell,它允许开发自定义版本的IDE。VisualStudioShell定义了一组VSPackages,这些VSPackages提供任何IDE中所需的功能。除此之外,还可以添加其他软件包来自定义安装。shell的隔离模式将创建一个新的AppId,在其中安装包。这些将由不同的可执行文件启动。它旨在为特定语言或特定场景开发自定义开发环境。集成模式将软件包安装到Professional/Standard/Team System版本的AppId中,以便将工具集成到这些版本中。[16]Visual Studio Shell可免费下载


您可以让这个shell调用任何编译器……但是需要做很多工作。

我的答案基于我将要做的事情(至少在开发期间): 使用现有组件。即编辑器和脚本编译器

对于编辑器,您可以使用

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

使用这些工具,您可以在4-5个小时内启动并运行,并且只需做一点工作就可以完成热插拔实体脚本

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

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


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

您可以查看以下内容:

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));
var csc=new CSharpCodeProvider(new Dictionary(){{“compilervision”,“v3.5”});
var参数=新的编译器参数(新[]{“mscorlib.dll”,“System.Core.dll”},“foo.exe”,true);
parameters.GenerateExecutable=true;
CompilerResults results=csc.compileasemblyFromSource(参数,
@“使用System.Linq;
班级计划{
公共静态void Main(字符串[]args){
var q=可枚举.Rnge中的i(1100)
其中,i%2==0
选择i;
}
}");
results.Errors.Cast().ToList().ForEach(error=>Console.WriteLine(error.ErrorText));

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

So。。VisualStudio不能满足项目管理的需要吗?即使是TFS?我不是一个游戏程序员,所以很可能我遗漏了一些明显的东西,但仍然…@WhozCraig-同意。VS支持每个解决方案的多个项目,可以编译C++、C++和C。还有哪些丢失?你有几年的时间吗?编译器不容易制作,而且对于通用语言来说更难制作。成熟的编译器有几十年或几百年的开发时间。但在我看来,如果你在编辑器中生成的是一种已知的编译器存在的语言,那么你只需要一种调用编译器的方法。你是在问如何生成编译器,还是在问如何使用已经存在的编译器,只是替换Visual Studio编辑器?如果是后者,请查看msbuild。听起来您正试图重新发明轮子。Visual Studio无法满足您的哪些需求?感谢您提供的资源,我将确保在本周末对其进行研究。本课程的重点是学习如何创建新引擎和/或工具。我计划使用这不仅是未来的项目,而且是为了向雇主展示。亲爱的,我会尝试一下,看看我能把它用到哪里去。要运行exe吗?(当然不必点击它)