MSBuild是否可以从纯内存资源构建EXE。例如,假设我构建了一个.csproj和几个表单以及代码隐藏并保存到内存流中,MSBuild可以使用这些流构建一个EXE吗?
目的是除最终的EXE外没有任何内容写入磁盘。
如果是这样,是否有关于此主题的好博客文章或其他参考文献?
答案 0 :(得分:5)
MSBuild不会创建EXE文件,编译器会这样做。目前,所有Microsoft编译器都不支持从内存流进行编译。 System.CodeDom提供了一个错觉,但它实际上使用了磁盘。
C#的未来版本中出现了一些东西,计划是提供“编译器即服务”功能。目前的内部项目名称是Roslyn。这是否会影响构建过程是不明确的,我怀疑它,但没有真正的线索,它将如何与现有的编译器集成,如果有的话。
Windows的一个关键属性是内存和文件之间只有细微的差别。内存中的任何内容也都在文件中,例如页面文件。内存只是读取和写入文件数据的快捷方式。当您读取或写入文件时,您实际上正在读/写内存。文件系统缓存。如果它足够大,它适用于大多数任何C#项目,编译器将读取相同的内存而不会访问磁盘。它只会在最近没有读取或写入文件时减慢。
答案 1 :(得分:1)
为什么不使用CodeDomProvider.CompileAssemblyFromSource Method 来编译你在内存中保存的代码?