[英]Visual Studio 2015 - Pre build event to determine which projects to compile
PreBuild
可禁用冗余项目的编译,以加快编译周期。
我有一个VS15 ALL
解决方案,其中包含许多项目。
我有一个项目PreBuild
,所有其他项目都依赖于这个项目,也就是说,此PreBuild
首先编译。
此外,我们还有一个PostBuild
项目,一旦二进制文件准备好,它就会做更多的工作。
所有项目都配置为在“ Release
模式下构建(需要)。
当团队成员想要释放一些二进制文件时,他选择了F7, Build Solution
。
现在, PreBuild
激活一个单独的专用过程,该过程计算应发布哪些项目。 计算的性质与该讨论无关。
在许多项目中,通常只有少数几个项目需要发布。 但是,一旦完成PreBuild
过程,将编译所有项目,这非常耗时。
解决方案构建开始后,是否可以更改已发布的项目?
PreBuild
杀死和复兴。 一旦计算出所需的项目, PreBuild
将PreBuild
VS15进程,并激活仅编译相关项目的cmd。 更改文件ALL.sln
并删除不需要的项目。 如果我在流程开始之前更改了该文件,则可以使用该文件,但是如果在此过程中发生此更改,我不确定该文件是否可以使用。
我可以想到的最简单的方法,同时仍保留当前的大多数基础结构:有一个专用项目,该项目可以调用发布版本(通过计算依赖关系并调用msbuild)并配置VS,因此可以仅选择该项目进行构建。 全部来自您的ALL.sln内部,因此其余功能仍然保留。 脚步:
摆脱PreBuild / PostBuild项目。 我认为您提到的PostBuild也适用于实际的发行版。 如果不是就把它留在那里。 请注意,由于不要求所有项目都依赖PreBuild项目,因此您已经摆脱了一个维护负担。
添加一个将完成发布版本的项目,例如ReleaseBuild
。 这样的名称也比拥有PreBuild / PostBuild项目更好,因为它清楚地表明了该项目的意图。 一个Makefile项目是合适的,尽管从技术上讲它可以像只有一个Build目标的msbuild文件一样简单。 配置构建命令行以执行所需的任何操作,即确定要构建的内容然后进行构建。 举个例子:假设您使用Powershell来执行此操作,则可以将build命令行配置为
Powershell -NoProfile -File BuildRelease.ps1 $(Platform)
和BuildRelease.ps1包含类似
$projectsToRelease = CalculateMyProjectsForRelease()
$platform = $Args[0]
$projectsToRelease | %{& msbuild $_ "/p:Configuration=Release;Platform=$platform"}
在配置管理器中,添加一个名为Deploy
的额外配置。 这将用于选择要构建的内容:您现在可能已经具有Debug和Release配置。 这些保留在原处,仅用于构建所有内容。 这个想法是,这种额外的配置将负责构建实际的发行版。 这与VS中的标准工作方式完全一致,并且易于新手发现和理解。 使用复选框,确保在选择“部署”配置时仅构建ReleaseBuild,而没有其他构建,而在选择“调试”或“发布”时,则不构建ReleaseBuild项目。 看起来像这样:
要构建发行版,请从VS工具栏的配置下拉菜单中选择“部署”,然后按F7(或使用任何用于调用“构建解决方案”的方式)。 任何构建错误/警告都将被解析,并像往常一样在错误列表中显示。
这也很容易扩展:假设您只有几个发行版本,只需添加更多配置(如DeployA DeployB DeployC)并调整它们的构建命令行即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.