C# 从内存中的资源生成MSBuild

C# 从内存中的资源生成MSBuild,c#,msbuild,C#,Msbuild,MSBuild是否可以纯粹从内存中的资源生成EXE。例如,假设我构建了一个.csproj和一些表单和代码,并保存到内存流中,那么MSBuild可以使用这些流构建一个EXE吗 这样做的目的是,除了最终的EXE外,不会向磁盘写入任何内容 如果是这样的话,关于这个主题有没有好的博客文章或其他参考资料?为什么不使用它来编译内存中的代码?MSBuild不会创建EXE文件,编译器会创建。目前没有任何Microsoft编译器支持从内存流进行编译。System.CodeDom提供了一种错觉,但实际上它使用了磁盘

MSBuild是否可以纯粹从内存中的资源生成EXE。例如,假设我构建了一个.csproj和一些表单和代码,并保存到内存流中,那么MSBuild可以使用这些流构建一个EXE吗

这样做的目的是,除了最终的EXE外,不会向磁盘写入任何内容


如果是这样的话,关于这个主题有没有好的博客文章或其他参考资料?

为什么不使用它来编译内存中的代码?

MSBuild不会创建EXE文件,编译器会创建。目前没有任何Microsoft编译器支持从内存流进行编译。System.CodeDom提供了一种错觉,但实际上它使用了磁盘

C#的未来版本中会出现一些东西,计划提供“编译器即服务”功能。当前内部项目名称为Roslyn。这是否会影响构建过程尚不清楚,我对此表示怀疑,但没有真正的线索表明它将如何与现有编译器集成(如果有的话)


Windows的一个关键特性是内存和文件之间只有细微的差别。内存中的任何内容也在文件中,例如分页文件。内存是读取和写入文件数据的唯一快捷方式。读或写文件时,实际上是在读/写内存。文件系统缓存。如果它足够大,对于大多数C#项目来说,编译器将读取相同的内存,而不会碰到磁盘。只有在最近没有读取或写入文件时,它才会减慢速度。

您可能需要重新考虑使用
.csproj
和MSBuild。NET有一个具有完整.NET框架的编译器:(特别是:
CodeCompiler.FromSourceBatch
)。这也将减少您对安装MSBuild的依赖性,这很好。我想我当时对MSBuild的用途没有很好的理解。要编译一个应用程序,假设所有这些文件都是有序的,那么只要System.CodeDom就足够了吗?这些文件(包括图像等资源)是否都可以像内置类一样存储在内存中,该类构建了所有需要的文件(不管CodeDom自己做什么,比如使用磁盘)?MSBuild可以在正确的时间运行正确的编译器。不仅是csc.exe,还有sgen.exe、resgen.exe等。不,System.CodeDom几乎不足以完成同等的工作。我想说的一点是,使用记忆并不像听起来那么性感。我建议使用Windows内部构件来获得良好的洞察力。
CodeDomProvider.compileasemblyFromdom
是实现“不写入磁盘”的更好方法吗?我的意思是,我不想在磁盘上写任何东西(除了最终输出),不管CodeDom自己做什么,比如使用磁盘。