【发布时间】:2012-06-09 07:31:41
【问题描述】:
我需要在 MsBuild 中构建的项目之间同步对共享资源的访问。过去,当项目按顺序在同一流程中运行时,这不是问题。但是现在当 MsBuild 可以在多个线程和多个进程中运行项目构建时,我就是找不到实现这一点的方法。
基本上,我想要的是当我的项目开始构建时,我可以对资源进行一些操作。而当他们都建到最后,我可以再做一次手术。
如果首先想到我可以实现一个自定义任务并让每个项目修改构建过程,在构建之前和之后注入任务。但由于它们可以并行运行,甚至可以跨进程运行,我似乎无法选择。
当我试图弄清楚这一点时,我最接近的是当我在 Microsoft.Build.Execution 命名空间中找到 BuildSubmission 类时 (http://msdn.microsoft.com/en-us/library/microsoft.build.执行.buildsubmission.aspx)。但是我无法从我的自定义任务中找到任何关于我应该如何与这些类进行交互的信息。
任何类型的输入或某个方向的指针都将受到高度赞赏!
/每
【问题讨论】:
-
您能更具体地说明您要共享的资源吗?可能还有其他解决方案。
-
嗯,资源并不是真正的单一资源,但可以说它是一个用于说明的数据库。当构建属于共享解决方案的一组项目时,我想确保在构建之前,到达预构建注入点的第一个项目在这个数据库上做一些事情,并且所有后续项目都知道它已经完成,所以他们跳过做同样的事情。反之,当构建会话结束时:在构建最后一个项目之后,它会对数据库执行一些其他操作,也是独占的(其他项目不会)。
-
我可以尝试用另一种方式来说明。我们让一个进程成为资源。我们有 X 项目的解决方案。构建解决方案时(在 MsBuild 之上使用 MsBuild 或 VS),我们要确保在任何项目开始构建之前,关闭一个进程(“Foo.exe”),并且在最后一个完成构建之后,我们要确保再次启动相同的过程。我们拥有所有 MsBuild 标准任务和制作自定义任务的选项供我们使用。我们可能希望通过修改 BuildDependsOn 属性在构建之前和构建之后注入我们的自定义任务。
标签: msbuild task synchronize