0

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

我仍在学习 MSBuild 并尝试一些东西,但我认为 Stack Overflow 上的某个人已经尝试过这个并且有一些见识。

4

2 回答 2

3

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

ProjectInstance有一个接受ProjectRootElement的构造函数,可以通过Create(XmlReader) 方法构造它。您可能知道,XmlReader 可以附加到各种流,包括 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);
于 2012-10-19T22:44:28.503 回答
1

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

于 2012-11-01T16:44:37.667 回答