繁体   English   中英

Visual Studio 2015-生成前事件,以确定要编译的项目

[英]Visual Studio 2015 - Pre build event to determine which projects to compile

动机

PreBuild可禁用冗余项目的编译,以加快编译周期。

背景

我有一个VS15 ALL解决方案,其中包含许多项目。

我有一个项目PreBuild ,所有其他项目都依赖于这个项目,也就是说,此PreBuild首先编译。
此外,我们还有一个PostBuild项目,一旦二进制文件准备好,它就会做更多的工作。

所有项目都配置为在“ Release模式下构建(需要)。
当团队成员想要释放一些二进制文件时,他选择了F7, Build Solution
现在, PreBuild激活一个单独的专用过程,该过程计算应发布哪些项目。 计算的性质与该讨论无关。

问题

在许多项目中,通常只有少数几个项目需要发布。 但是,一旦完成PreBuild过程,将编译所有项目,这非常耗时。

解决方案构建开始后,是否可以更改已发布的项目?

建议不要的方法

  1. 开发人员仅选择相关项目,并且仅构建这些项目。
  2. PreBuild杀死和复兴。 一旦计算出所需的项目, PreBuildPreBuild 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM