我正在开发一种服务,它将从存储库下载.NET解决方案并构建它(与持续集成构建服务不同)。我想知道的是,通过Microsoft.Build
命名空间类以编程方式使用MSBuild,我可以将解决方案和项目加载到内存中并构建它,而不是首先将它们保存到磁盘中一个临时文件夹?
我还在学习MSBuild并尝试一些东西,但我认为Stack Overflow上有人试过这个并且有一些见解。
答案 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和所有相关组件之后,似乎有必要在构建文件系统之前将整个项目设置在文件系统上。不幸的是,我正在尝试做的事情无法使用提供的工具集完成。