MSBuild(通过Microsoft.Build命名空间)可以从内存加载项目吗?

时间:2012-10-19 19:37:19

标签: msbuild msbuild-4.0

我正在开发一种服务,它将从存储库下载.NET解决方案并构建它(与持续集成构建服务不同)。我想知道的是,通过Microsoft.Build命名空间类以编程方式使用MSBuild,我可以将解决方案和项目加载到内存中并构建它,而不是首先将它们保存到磁盘中一个临时文件夹?

我还在学习MSBuild并尝试一些东西,但我认为Stack Overflow上有人试过这个并且有一些见解。

2 个答案:

答案 0 :(得分:3)

我不能说这是不是一个好主意,但是可以做到。

ProjectInstance有一个接受ProjectRootElement的构造函数,可以通过Create(XmlReader) method构建。{3}}。您可能知道,XmlReader可以附加到各种Streams,包括MemoryStream。

以下是这样的事情:

var xmlReader = XmlTextReader.Create([your existing memory stream]);
var project = ProjectRootElement.Create(xmlReader);

var buildParams = new BuildParameters();
var buildData = new BuildRequestData(new ProjectInstance(project),
    new string[] { "Build", "Your Other Target Here" });

var buildResult = BuildManager.DefaultBuildManager.Build(buildParams, buildData);

答案 1 :(得分:1)

在研究了MSBuild和所有相关组件之后,似乎有必要在构建文件系统之前将整个项目设置在文件系统上。不幸的是,我正在尝试做的事情无法使用提供的工具集完成。