gpt4 book ai didi

msbuild - 如何在MsBuild中同步项目之间的共享资源

转载 作者:行者123 更新时间:2023-12-02 18:23:39 26 4
gpt4 key购买 nike

我需要在 MsBuild 中构建的项目之间同步对共享资源的访问。过去,当项目在同一流程中按顺序运行时,这不是问题。但现在,当 MsBuild 可以在多个线程和多个进程中运行项目构建时,我只是找不到实现此目的的方法。

基本上,我想要的是当我的项目开始构建时,我可以对资源进行一些操作。当它们都构建到最后时,我可以进行另一次操作。

如果首先想到我可以实现一个自定义任务,并让每个项目修改构建过程,在构建之前和构建之后注入(inject)任务。但由于它们可以并行甚至跨进程运行,我似乎别无选择。

当我试图弄清楚这一点时,我最接近的是当我在 Microsoft.Build.Execution 命名空间 (http://msdn.microsoft.com/en-us/library/microsoft.build) 中找到 BuildSubmission 类时。执行.buildsubmission.aspx)。但我在自定义任务中找不到任何关于如何与这些类交互的信息。

任何类型的输入或某个方向的指针都将受到高度赞赏!

/每

最佳答案

您可以在自定义 MSBuild 任务中实现资源访问,并通过 named mutex 保护它。 (这些可用于同步单独的进程)。也就是说,实现将首先获取互斥体,检查资源是否需要被触摸,然后才对资源执行其工作,最后释放互斥体。您可以使用 AfterTargets or BeforeTargets 强制此任务在构建之前或之后运行。

这样,如果使用此任务的两个项目同时到达预构建或构建后阶段,则只有其中一个项目将对资源执行工作,而另一个项目则等待。当第一个项目释放互斥量时,第二个项目将获取它,意识到工作已经完成并立即释放互斥量,而不接触资源。

您应该考虑是否要使用相同的互斥体还是两个不同的互斥体来进行预构建和后构建资源访问(它们可以同时运行吗?)。

关于msbuild - 如何在MsBuild中同步项目之间的共享资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10959250/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com