如何在添加依赖项时自动更新主解决方案?

时间:2017-08-10 18:00:47

标签: visual-studio visual-studio-2015 projects-and-solutions maintenance

我们在多个软件项目中使用single master solution strategy,最近有人在公共代码中添加了依赖项,这打破了其他项目的解决方案,直到将新的依赖项添加到他们的解决方案中。什么是消除或最小化此类问题的好策略?

我们已经考虑过以下几点:

  • 在签入日志消息中添加关键字以告知其他项目添加依赖项(但这是一个手动过程)
  • 使用多个分区解决方案而不是单个主解决方案(导致更长的构建时间,跨解决方案丢失智能感知等)。
  • 使用工具从多个分区解决方案创建主解决方案(任何适用于VS2015的建议,这可以自动化吗?)

到目前为止,我们最大的单一主解决方案是115个项目文件,所以仅在此基础上看起来似乎没有必要对解决方案进行分区,除非这是解决问题的最佳方法。

如果你遇到过这个问题,你是如何解决的?

1 个答案:

答案 0 :(得分:1)

可能没有内置方法(任何版本的VS安装的MSBuild文件都没有执行项目的构建,以及它的特征请求like this one)。一个非常快速的解决方案是创建一个msbuild文件,该文件将引用的项目构建为预构建事件,并在每个引用另一个项目的项目中包含该文件。例如,在具有常见构建工具的目录中创建名为buildprojectreferenecs.targets的文件,内容为

Public Sub ClearAllBut1stRow(byval Range As Range)
    Range.Resize(Range.Rows.Count-1).Offset(1).Clear
    End With
End Sub

这只是使用与包含它的项目相同的配置和平台构建每个ProjectReference。在每个使用项目引用的项目中导入它。必须在定义ProjectReference项后进行导入,因此请将其放入一直到底:

ClearAllBut1stRow(Range("A:D"))

现在,如果运行构建,在实际编译开始之前,无论是否在解决方案中,都会发生引用项目的构建(以及它们引用的项目等)。一些缺点:

  • 如果您添加项目引用但忘记导入此文件没有任何反应
  • 无条件地进行构建,因此如果已经构建了引用项目,则会再次启动构建;虽然它也会立即完成,因为构建系统看到所有输出都是最新的
  • VS中的构建系统无法检测到解决方案之外的引用项目的更改,因此,如果解决方案中的所有项目都是最新的,并且您在解决方案之外的引用项目中更改源文件它不会被建造。但是,命令行构建不是这种情况,项目的构建将会开始,因此也会构建引用的项目。

总而言之,我不确定它是否值得。由于您选择了单一主解决方案'可以说,解决方案应该是项目的单一解决方案,因此必须包含从源构建的所有依赖项。而且它是开发者'确保发生这种情况的任务。为了快速解决失败问题,最好的解决方案是使用构建服务器来构建对代码库的每次提交,从而快速发现错误。然后开发人员也会收到他们的错误通知,并会尽快应用修复程序(特别是因为它很简单)。