0

我正在尝试在 C# 中创建一个自定义构建活动,该活动从由 TFS 2010 中的签入操作触发的构建中获取变更集中的文件列表,并将这些文件从 SourcesDirectory 移动到另一个位置。问题是是否可以检索用户签入到触发构建的 TFS 2010 的文件列表,以便我可以遍历文件并将它们移动到另一个位置?到目前为止,我没有运气。

非常感谢任何答案或帮助!


感谢 Loïc Faure-Lacroix 的评论。我想我的问题太宽泛了,所以没有人回答我的问题。我花了一段时间才到达现在的位置,这就是我到目前为止所做的事情。我从以下链接中获得了将变更集作为自定义活动参数的想法。我还将 SourcesDirectory 作为一个参数,我可以从“Run On Agent”序列中获取它。

http://blogs.msdn.com/b/codejunkie/archive/2010/09/02/custom-build-activity-for-tfs-2010-to-send-email-with-build-details-part-1。 aspx http://blogs.msdn.com/b/codejunkie/archive/2010/09/15/custom-build-activity-for-tfs-2010-to-send-email-with-build-details-part-2 .aspx

  [RequiredArgument]
  [Browsable(true)]
  public InArgument<IList<Changeset>> Changesets { get; set; }

  [RequiredArgument] // The source directory to copy the files from 
  public InArgument<string> SourcesDirectory { get; set; }

然后我需要遍历变更集以获取签入到 TFS 的项目列表。但是,我从变更集中获得的项目包含服务器路径,即“$/MainProj/SubProj/contactus/contact.htm”之类的东西,所以我需要一种类似于 ConvertWorkspaceItem 活动的方法,可以将服务器路径转换为真实的构建服务器上的本地构建路径。有谁知道 ConvertWorkspaceItem 的实际工作原理?SourcesDirectory 具有与此类似的路径(我不确定它是否始终具有相同的格式或是否会根据项目或构建服务器的配置方式进行更改。):C:\Builds\1\SubProj\Sources\contactus 因为我可以找不到转换路径的正确方法,所以我使用了一种丑陋的基本子字符串搜索和替换方法……一旦我遍历了 changset,将服务器路径转换为本地源路径,我能够将刚刚签入到 TFS 的那些文件复制到另一个位置,例如我们开发服务器上的文件夹。然后我遇到了一个很大的障碍。当我测试创建一个包含一些新文件的新文件夹并将这些文件签入以触发构建时,我从构建中收到拒绝访问错误。似乎某些在 TFS 中创建新文件夹并签入文件的进程或线程在构建开始运行时仍会锁定该文件夹,我认为这是另一个线程……如果签入的文件位于现有文件夹中,则一切正常好的……有人可以分享一些见解吗?当我测试创建一个包含一些新文件的新文件夹并将这些文件签入以触发构建时,我从构建中收到拒绝访问错误。似乎某些在 TFS 中创建新文件夹并签入文件的进程或线程在构建开始运行时仍会锁定该文件夹,我认为这是另一个线程……如果签入的文件位于现有文件夹中,则一切正常好的……有人可以分享一些见解吗?当我测试创建一个包含一些新文件的新文件夹并将这些文件签入以触发构建时,我从构建中收到拒绝访问错误。似乎某些在 TFS 中创建新文件夹并签入文件的进程或线程在构建开始运行时仍会锁定该文件夹,我认为这是另一个线程……如果签入的文件位于现有文件夹中,则一切正常好的……有人可以分享一些见解吗?

谢谢!

4

0 回答 0