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

MSBuild(通过Microsoft.Build命名空间)能否从内存加载项目?,msbuild,msbuild-4.0,Msbuild,Msbuild 4.0,我正在开发一项服务,该服务将从存储库下载.NET解决方案并进行构建(与持续集成构建服务不同)。我想知道的是,通过Microsoft.Build命名空间类以编程方式使用MSBuild,我可以将解决方案和项目加载到内存中并构建它,而不必先将它们保存到临时文件夹中的磁盘上吗 我仍在学习MSBuild并尝试一些东西,但我认为堆栈溢出方面的某些人已经尝试过这一点,并且有了一些见解。我不知道这是否是一个好主意,但这是可能的 具有接受的构造函数,可以通过构造。您可能知道,XmlReader可以连接到各种流,包

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


我仍在学习MSBuild并尝试一些东西,但我认为堆栈溢出方面的某些人已经尝试过这一点,并且有了一些见解。

我不知道这是否是一个好主意,但这是可能的

具有接受的构造函数,可以通过构造。您可能知道,XmlReader可以连接到各种流,包括MemoryStream

下面是类似的情况:

var xmlReader=XmlTextReader.Create([您现有的内存流]);
var project=ProjectRootElement.Create(xmlReader);
var buildParams=新的BuildParameters();
var buildData=新建BuildRequestData(新建ProjectInstance(项目),
新字符串[]{“Build”,“此处的其他目标”});
var buildResult=BuildManager.DefaultBuildManager.Build(buildParams,buildData);

我不知道这是不是一个好主意,但这是可能的

具有接受的构造函数,可以通过构造。您可能知道,XmlReader可以连接到各种流,包括MemoryStream

下面是类似的情况:

var xmlReader=XmlTextReader.Create([您现有的内存流]);
var project=ProjectRootElement.Create(xmlReader);
var buildParams=新的BuildParameters();
var buildData=新建BuildRequestData(新建ProjectInstance(项目),
新字符串[]{“Build”,“此处的其他目标”});
var buildResult=BuildManager.DefaultBuildManager.Build(buildParams,buildData);

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

+1因为您解决了问题的前半部分。第二部分是实际的代码文件,其中包含要编译/链接/资源的项目等。。有没有办法手动解决它们而不是让工具在磁盘上查找它们?是的,我刚刚意识到通过项目链接到的实际资源仍然在磁盘上。。。嗯。也许解决这个问题的一种方法是建立一个项目文件可以引用的公共(只读?)网络共享。这不太适合我的体系结构。我想我需要深入研究反射器,看看引擎盖下到底发生了什么。也许我可以做一些类似于根目录的操作,以加载带有自定义代码的文件。@老实说,这很好地回答了你的问题,你没有提到你对源文件的位置有额外的要求。+1只是因为你解决了问题的前半部分。第二部分是实际的代码文件,其中包含要编译/链接/资源的项目等。。有没有办法手动解决它们而不是让工具在磁盘上查找它们?是的,我刚刚意识到通过项目链接到的实际资源仍然在磁盘上。。。嗯。也许解决这个问题的一种方法是建立一个项目文件可以引用的公共(只读?)网络共享。这不太适合我的体系结构。我想我需要深入研究反射器,看看引擎盖下到底发生了什么。也许我可以做一些类似于根目录的操作,以加载带有自定义代码的文件。@老实说,这很好地回答了您的问题,您没有提到对源文件的位置有其他要求。