2015-10-08 3 views
0

Я пишу сценарий PowerShell v5 для запуска нашего автоматизированного процесса сборки на основе NAnt. У меня также есть пользовательская задача (GetLatestFromLabel), написанная на C#. Когда я запускаю сборку в командном окне DOS, сборка завершается успешно, однако, когда я запускаю процесс сборки из моего сценария PowerShell v5, он, кажется, добавляет локальный путь к файлу Windows в местоположение исходного кода TFS.Как «получить последнюю от метки» при использовании Nant с PowerShell?

C:\Windows\sysWOW64\WindowsPowerShell\v1.0\$\AHLTAPrint\AWP 2.x.

Здесь ошибка я получаю:

SourceControl.GetLatestFromLabel: 

    [echo] NewFolderVersion = 2.0.0.2 

BUILD FAILED 

INTERNAL ERROR 

Microsoft.TeamFoundation.VersionControl.Client.ItemNotMappedException: There is no working folder mapping for C:\Windows\sysWOW64\WindowsPowerShell\v1.0\$\AHLTAPrint\AWP 2.x. 
    at Microsoft.TeamFoundation.VersionControl.Client.Client.GetLocalWorkspace(String localPath, Boolean throwIfNotFound) 
    at AHLTA.NAnt.TFS.Tasks.GetFromLabelTask.ExecuteTask() in c:\Workspaces\Ahltaprint\Build\NAnt.Extensions.Extended\AHLTA.NAnt.TFS.Tasks\Tasks\GetFromLabelTask.cs:line 66 
    at NAnt.Core.Task.Execute() 
    at NAnt.Core.Target.Execute() 
    at NAnt.Core.Project.Execute(String targetName, Boolean forceDependencies) 
    at NAnt.Core.Task.Execute() 
    at NAnt.Core.Target.Execute() 
    at NAnt.Core.Project.Execute(String targetName, Boolean forceDependencies) 
    at NAnt.Core.Project.Execute() 
    at NAnt.Core.Project.Run() 

Вот мой NAnt Цель:

<target name="SourceControl.GetLatestFromLabel"> 
    <property name="Private.SourceCodeFoldersfolders" value="$/AHLTAPrint/AWP 2.x" /> 
    <property name="Private.SourceCodeFoldersDelimiter" value="|" /> 

    <echo message="NewFolderVersion = ${NewFolderVersion}" /> 

    <tfsgetfromlabel tfsfolders ="${Private.SourceCodeFoldersfolders}" 
        labelname="${NewFolderVersion}" 
        folderdelimiter="${Private.SourceCodeFoldersDelimiter}"> 
     <connectioninformation refid="TFSConnection" /> 
    </tfsgetfromlabel> 

    </target> 

Это часть ExecuteTask из пользовательской задачи:

protected override void ExecuteTask() 
{ 
    VersionControlServer vcs = base.TheConnectionInformation.GetVersionControlServer(); 
    if (vcs != null) 
    { 
     if (String.IsNullOrEmpty(TheFolderDelimiter)) 
     { 
      /*** Only one folder ***/ 
      if (!String.IsNullOrEmpty(TheTFSFolders)) 
      { 
       LabelVersionSpec version = new LabelVersionSpec(TheLabelName); 
       Workspace ws = vcs.GetWorkspace(TheTFSFolders); 
       if (ws != null) 
       { 
        string[] items = { TheTFSFolders }; 
        GetStatus gs = ws.Get(items, version, RecursionType.Full, GetOptions.Overwrite | GetOptions.GetAll); 
       } 
      } 
     } 
     else 
     { 
      // multiple folders in a string 
      string[] folders = TheTFSFolders.Split(TheFolderDelimiter.ToCharArray()); 

      LabelVersionSpec version = new LabelVersionSpec(TheLabelName); 
      for (int i = 0; i < folders.Length; ++i) 
      { 
       if (!String.IsNullOrEmpty(folders[i])) 
       { 
        Workspace ws = vcs.GetWorkspace(folders[i]); 
        if (ws != null) 
        { 
         string[] items = { folders[i] }; 
         Console.WriteLine("Getting Latest Code in " + items[0].ToString() + " From Label " + version.Label); 
         GetStatus gs = ws.Get(items, version, RecursionType.Full, GetOptions.Overwrite | GetOptions.GetAll); 
        } 
       } 
      } 
     } 
    } 
} 

Любая идея, что происходит или как я могу это исправить?

+0

Beatcracker Спасибо за редактирование этого. Я попытался исправить это, но не знал, как и не мог видеть базовый код, окружающий его. – GhostHunterJim

ответ

0

Решено, добавив параметр -workingdirectory в командную строку Start-Process. Сценарий вызывается из другого каталога

Смежные вопросы