TFS 2010 встроен, локальный каталог удален, а не unc share - PullRequest
0 голосов
/ 02 декабря 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));
                    }
                );
        }
    }
}

Но это действие не удалось, и дайте мне знать, что каталог не был найден.Как это исправить?Мне нужна настройка, поскольку я получаю отдельные папки из двоичных файлов вручную.

Спасибо за помощь, Майкл Баарц

1 Ответ

2 голосов
/ 02 декабря 2010

Почему вы не используете unc-путь на основе localhost?

\ 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

...