2010-12-02 20 views
0

私のリリースでビルドされたファイルをunc共有ではなくローカルディレクトリにコピーしたかったのです。だから私はこれをやりたい活動を書いた:TFS 2010ビルド、ローカルではなくunc共有に移動

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パスを使用していませんか?

\ localhostの\ MYDIR

あるいは

\ localhostの\ 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 \を使用すると、ビルドが完了した後に[Open Drop Folder]をクリックしたユーザーは開くことができません。ビルドサーバーではなくローカルマシンを参照しようとします。残念ながら、私はそれを解決する方法を知らない。 – Pierre

関連する問題