2010-12-02 290 views
0

我想将我的发行版上的内置文件复制到本地目录,而不是共享。所以我写了一个我想这样做的活动:TFS 2010内置,放置位置本地不共享共享

using System.Activities; 
using System.IO; 
using System.Linq; 
using Microsoft.TeamFoundation.Build.Client; 

namespace CustomBuiltActivities 
{ 
    /// <summary> 
    ///  This activity helps to copy a directory to another one. Integrated in TeamFoundation built activities are only supporting 
    ///  copy to an unc share, so this is a small helper activity we need for copying files to an local directory. 
    /// </summary> 
    [BuildActivity(HostEnvironmentOption.Agent)] 
    public sealed class CopyDirectoryLocal : CodeActivity 
    { 
     [RequiredArgument] 
     public InArgument<string> DestinationDirectory { get; set; } 

     [RequiredArgument] 
     public InArgument<string> SourceDirectory { get; set; } 

     protected override void Execute(CodeActivityContext context) 
     { 
      var destination = context.GetValue(DestinationDirectory); 
      var source = context.GetValue(SourceDirectory); 
      CopyRecursive(source, destination); 
     } 

     private static void CopyRecursive(string sourceDirectory, string destinationDirectory) 
     { 
      if (!Directory.Exists(sourceDirectory)) 
       throw new DirectoryNotFoundException(sourceDirectory); 
      try 
      { 
       Directory.CreateDirectory(destinationDirectory); 
      } 
      catch 
      { 
      } 
      Directory.GetDirectories(sourceDirectory).ToList().ForEach(
       sourceDir => 
        { 
         var dirName = sourceDir.Substring(sourceDir.LastIndexOf("\\")); 
         CopyRecursive(sourceDir, destinationDirectory+"\\"+dirName); 
        }); 
      Directory.GetFiles(sourceDirectory).ToList().ForEach(
       sourceFile => 
        { 
         var fileName = new FileInfo(sourceFile).Name; 
         File.Copy(sourceFile, string.Concat(destinationDirectory, "\\", fileName)); 
        } 
       ); 
     } 
    } 
} 

但是这个活动失败,让我知道该目录没有找到。如何解决它?我需要通过手动从二进制文件中获取seperat文件夹进行定制。

THX的帮助, 迈克尔Baarz

回答

2

你为什么不使用基于本地主机上的UNC路径?

\本地主机\ MYDIR

甚至

\本地主机\ C $ \ MYDIR

如果你想与您的自定义活动来进行,这是很容易调试。使用指定的值在单元测试(或例如控制台应用程序)中执行代码。您是否确定在开始此活动时存在源目录?您可以在代码中添加一些额外的检查(例如Directory.Exists)。 您也可以使用http://www.ewaldhofman.nl/post/2010/10/01/Customize-Team-Build-2010-e28093-Part-12-How-to-debug-my-custom-activities.aspx

+0

调试您的代码如果您使用\ localhost \,则在构建完成后单击“打开拖放文件夹”的用户无法打开它。它试图浏览到他们的本地机器,而不是构建服务器。不幸的是,我不知道如何解决这个问题。 – Pierre 2015-08-25 06:54:42