如何在TFS自定义构建活动中获取构建项目

时间:2013-03-07 11:37:18

标签: c# build tfs

我正在创建一个自定义构建定义,我想在签入时使用它来增加我的程序集编号。我跟着this blog指示在更改Workspace时传入ReadOnly文件。我有这样的源代码控制结构:

  • 团队协作
    • 解决方案A.
      • 项目A
      • 项目B
    • 解决方案B.
      • 项目A
      • 项目B

我已在解决方案 B 中为项目B 设置了自定义构建。我已经使用以下代码实现了一个记录器来记录正在进行测试的操作:

protected void TrackMessage(CodeActivityContext context, string message)
{
  context.Track(new BuildInformationRecord<BuildMessage>()
  {
    Value = new BuildMessage()
    {
      Message = message,
      Importance = BuildMessageImportance.High
    }
  });
}

从根本上说,当我override execute时,我得到了:

Workspace workspace = context.GetValue<Workspace>(CurrentWorkspace);
foreach (WorkingFolder folder in workspace.Folders)
{
  TrackMessage(context, string.Format("Working Folder: {0}", folder.LocalItem));
  //Then get all directories for this working folder
}

我的工作文件夹以Team collaboration形式出现,然后获取整个协作项目中的所有AssemblyInfo.*个文件!我不知道我必须传递什么属性以及它是什么类型,我已经尝试研究它以找到用于将TeamCollaboration\Solution B\Project B放入我的文件夹的属性。

关于我希望实现此目的的类型和属性的任何想法?

1 个答案:

答案 0 :(得分:4)

我认为您可以通过缩小build configuration内的工作文件夹映射来解决此问题。尝试按如下方式设置:

  • 编辑构建配置
  • 点击源设置(VS 2012),工作区(VS 2010)
  • 让你的映射看起来像这样:

状态 源控制文件夹 构建代理文件夹
有效 $ /团队合作/解决方案B $(SourceDir)\

这将使此构建的工作区仅限于您要构建的解决方案。因此,只有其下的AssemblyInfo文件才对您的构建活动可见。

希望这有帮助。