【问题标题】:Automated Builds in Team Foundation ServerTeam Foundation Server 中的自动构建
【发布时间】:2011-05-27 06:52:51
【问题描述】:

我正在为我的解决方案设置自动构建。但是,我收到有关将某些信息复制到某些文件夹失败的错误。这与我的解决方案中的每个项目都有的构建事件有关。

我想知道是否有办法“关闭”项目中的单个构建事件,或者是否有一个参数可以设置在某个地方关闭这些构建事件?

我设置的自动构建已经完成了单个项目构建事件应该做的事情,因此它试图重复自身并导致问题。我仍然需要将构建事件与项目相关联,因为当它们在开发环境之外运行时,它们需要发生才能使应用程序正常运行(构建事件与动态更新信息有关)。

长话短说,有没有办法关闭与我的解决方案中的每个单独项目相关联的构建而不实际删除它们?我需要它们在那里,我只需要它们在我在开发环境中运行自动构建时“不可见”。

对于所有内容的冗长和含糊之处,我深表歉意,有时很难在不泄露太多信息的情况下解释事情。

编辑:与其说是编辑,不如说是为了清晰起见的附加信息,但尽管如此。我要实现的基本目标是禁用与我的解决方案中的每个项目相关联的“后期构建”。我想保留它们,只是在我通过内部自动构建/测试运行它们时禁用它们

【问题讨论】:

  • 您可以使用 BuildingInsideVisualStudio 属性在您的 *.*proj 文件中确定您是否在 VS 中构建。
  • 我刚刚发现了该属性,我尝试在“构建后事件命令行”字段中以“if [NOT] $(BuildingInsideVisualStudio) 的形式实现它”语句。但是,这没有用。这是你处理它的地方/方式吗?
  • 我认为如果它在 Visual Studio 外部构建它会执行代码,但如果它在 Visual Studio 内部构建它只会跳过“执行代码”我不知道我可能在某个地方弄错了一些东西。

标签: visual-studio-2010 tfs build build-automation


【解决方案1】:

在对“BuildingInsideVisualStudio”属性进行大量研究并进行大量调整以使语法正确之后,我和我的团队找到了我们正在寻找的东西。

我们插入了语句

if '$(BuildingInsideVisualStudio)' == 'true' <executed code>

在项目属性 > 构建事件选项卡下的“构建后事件命令行”部分中设置格式。

【讨论】:

  • 这让我今天摆脱了束缚!谢谢你,先生。如果可以的话,我会给你 2 票!
【解决方案2】:

一些像这样的后期构建脚本代码应该可以工作:

if "$(BuildingInsideVisualStudio)"=="" (
    @echo TFS build
) else (
    @echo Visual Studio build
)

将现有代码放置在适当的块中,具体取决于您是希望它仅在 VS 构建中运行,还是仅在 TFS 构建中运行

【讨论】:

  • 拯救了我的一天。谢谢。
【解决方案3】:

您还可以将 .csproj 文件更改为如下内容:

  <PropertyGroup Condition=" '$(BuildingInsideVisualStudio)' == 'true' ">
    <PostBuildEvent>commands to execute</PostBuildEvent>
  </PropertyGroup>

很遗憾,Visual Studio 不会在“生成事件”选项卡中显示任何信息,因此将来的维护可能会更加困难。

【讨论】:

    【解决方案4】:

    您可以检查任何团队构建属性并查看它们是否已填充。如果是这样,您可以假设这是一个团队建设。我在我们的构建中使用这种方法,以便构建后部署标签等仅在构建服务器上运行时才会发生。

    这是link with the various team build properties

    <SomeTask Condition="$(BuildDefinitionName)!=''">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-18
      • 2010-10-03
      • 2013-07-02
      • 1970-01-01
      • 2012-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多