2014-09-02 4 views
3

У меня возникли проблемы с попыткой получить мой контроллер сборки/агентов, чтобы выбрать сборку из ссылки, используемой в моем шаблоне процесса сборки.TFS не загружает пользовательские сборки

Я прочитал об этой проблеме широко через несколько блогов, и, к сожалению, я не смог решить эту проблему:

TFS Build Error Log]

Я могу подтвердить следующее:

  1. TFS 2012 без обновлений Visual Studio 2013, Обновление 1 (для создания операции и обновления шаблона процесса сборки)

  2. Один Сложение контроллер с Mutiple агентов

  3. ССТ Ассамблеи проверяемых в и в системе управления версиями

Custom Assembly Checked In]

Правильный путь установлен в контроллере сборки со службой перезапуска: [Build Controller Settings

Пользовательское действие правильно разрешается в шаблоне при выполнении руководства li указанные в другом месте, используемые в этих блогах:

http://www.ewaldhofman.nl/post/2010/04/29/Customize-Team-Build-2010-e28093-Part-4-Create-your-own-activity.aspx

http://blogs.msdn.com/b/jimlamb/archive/2010/02/12/how-to-create-a-custom-workflow-activity-for-tfs-build-2010.aspx

Build Process Template - Custom Activity Resolving Correctly (assembly updater)

я могу просмотреть ссылку внутри XAML шаблона процесса сборки и выглядит отлично без ошибок валидации и мой код активность, как представляется, выполняется правильно.

код ниже:

using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.IO; 
using System.Linq; 
using System.Reflection; 
using System.Text; 
using System.Activities; 
using System.Text.RegularExpressions; 
using Microsoft.TeamFoundation.Build.Client; 
using Microsoft.TeamFoundation.VersionControl.Client; 

namespace FireWatch.TFS 
{ 
    [BuildActivity(HostEnvironmentOption.Agent)] 
    public sealed class AssemblyUpdater : CodeActivity 
    { 
     #region Static Methods 
     #endregion 

     #region Property Variables 
     #endregion 

     #region Constants and Read-Onlys 
     private const string ASSEMBLY_VERSION_REG_EX = @"\(""\d+\.\d+\.\d+\.\d+""\)"; 
     private const string ATTRIBUTE_REG_EX = "AssemblyVersion"; 
     #endregion 

     #region Accessors 

     [RequiredArgument] 
     public InArgument<int> Major { get; set; } 
     [RequiredArgument] 
     public InArgument<int> Minor { get; set; } 
     [RequiredArgument] 
     public InArgument<int> Build { get; set; } 
     [RequiredArgument] 
     public InArgument<Workspace> Workspace { get; set; } 

     #endregion 

     #region Encapsulation 

     private void UpdateAssemblyInfo(IEnumerable<string> assemblyInfos, int major, int minor, int build) 
     { 
      foreach (string myAssemblyInfo in assemblyInfos) 
      { 
       string myFileText = File.Exists(myAssemblyInfo) ? File.ReadAllText(myAssemblyInfo) : string.Empty; 

       if (myFileText != string.Empty) 
       { 
        Regex myRegex = new Regex(ATTRIBUTE_REG_EX + ASSEMBLY_VERSION_REG_EX); 
        Match myMatch = myRegex.Match(myFileText); 

        if (myMatch.Success) 
        { 
         string myVersionNumber = myMatch.Value.Substring(ATTRIBUTE_REG_EX.Length + 2, 
               myMatch.Value.Length - ATTRIBUTE_REG_EX.Length - 4); 

         Version myCurrentVersion = new Version(myVersionNumber); 
         Version myNewVersion = new Version(major, minor, build, (myCurrentVersion.Revision + 1)); 

         string myUpdatedAssemblyText = myRegex.Replace(myFileText, ATTRIBUTE_REG_EX + "(\"" + myNewVersion + "\")"); 

         File.WriteAllText(myAssemblyInfo, myUpdatedAssemblyText); 
        } 
       } 
      } 
     } 

     private void CheckOut(Workspace workspace, IList<string> assemblyInfos) 
     { 
      if (workspace != null && assemblyInfos != null && assemblyInfos.Any()) 
      { 
       workspace.PendEdit(assemblyInfos.ToArray()); 
      } 
     } 

     private IEnumerable<string> GetRelevantAssemblyInfos(Workspace workspace) 
     { 
      IList<string> myReturn = new List<string>(); 

      PendingChange[] myPendingChanges = workspace.GetPendingChanges(); 

      foreach (PendingChange myPendingChange in myPendingChanges) 
      { 
       string myPath = AssemblyInfoPresent(myPendingChange); 

       if (!string.IsNullOrEmpty(myPath)) 
       { 
        myReturn.Add(myPath); 
       } 
      } 

      return myReturn; 
     } 

     private string AssemblyInfoPresent(PendingChange pendingChange) 
     { 
      string myReturn = string.Empty; 

      if (pendingChange != null) 
      { 
       string myParentDirectory = pendingChange.LocalItem; 
       string myParentLevelAssemblyInfo = myParentDirectory + @"\AssemblyInfo.cs"; 

       string myPropertiesDirectory = pendingChange.LocalItem + @"\Properties"; 
       string myPropertiesLevelAssemblyInfo = myParentDirectory + @"\Properties\AssemblyInfo.cs"; 

       if (Directory.Exists(myPropertiesDirectory) && File.Exists(myPropertiesLevelAssemblyInfo)) 
       { 
        myReturn = myPropertiesLevelAssemblyInfo; 
       } 
       else if (Directory.Exists(myParentDirectory) && File.Exists(myParentLevelAssemblyInfo)) 
       { 
        myReturn = myParentLevelAssemblyInfo; 
       } 
      } 

      return myReturn; 
     } 

     #endregion 

     #region CodeActivity Members 

     protected override void Execute(CodeActivityContext context) 
     { 
      int myMajor = context.GetValue(this.Major); 
      int myMinor = context.GetValue(this.Minor); 
      int myBuild = context.GetValue(this.Build); 
      Workspace myWorkspace = context.GetValue(this.Workspace); 

      IList<string> myAssemblyInfos = GetRelevantAssemblyInfos(myWorkspace).Distinct().ToList(); 

      if (myAssemblyInfos.Any()) 
      { 
       CheckOut(myWorkspace, myAssemblyInfos); 
       UpdateAssemblyInfo(myAssemblyInfos, myMajor, myMinor, myBuild); 
      } 
     } 

     #endregion 
    } 
} 

ответ

2

ли перезапущен вы машину? попробуйте очистить кэш на машине построения на

C: \ Users \ BUILDACCOUNT \ AppData \ Local \ Temp \ BuildController \ 2.0 \ Ассамблей

C: \ Users \ BUILDACCOUNT \ AppData \ Local \ Temp \ BuildAgent \ BUILDAGENTNO \ Ассамблей

либо путь должен заставить контроллер сборки для загрузки последних сборок

+0

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

+0

К сожалению, это не решило проблему.Я ценю помощь, есть ли у вас какие-либо прочные учебники, которые показывают, как расширить активность кода, которую я могу попробовать? Просто потому, что есть вероятность, что я пропустил шаг. Я довольно уверен, что нет. – Slavvy

+1

Является ли ваша dll в этих папках кеша? –

0

в конце концов эта проблема была решена с помощью TFS 20 13 с последним пакетом обновления. Пользовательские сборки теперь загружаются без проблем.

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