2013-02-19 3 views
0

Je crée une politique d'archivage personnalisée pour TFS 2010 dans Visual Studio 2010. La politique elle-même fonctionne très bien. Maintenant, j'essaie d'appliquer la politique personnalisée à partir du code. Voici mon code:Comment créer PolicyEnvelope pour une politique d'archivage personnalisée dans visual studio 2010?

try 
     { 
      var projectCollectionUri = new Uri("https://mydomain.com/tfs"); 
      var projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(projectCollectionUri, new UICredentialsProvider()); 
      projectCollection.EnsureAuthenticated(); 

      var vcs = projectCollection.GetService<VersionControlServer>(); 

      var teamProject = vcs.GetTeamProject("myProject"); 

      foreach (PolicyType policyType in Workstation.Current.InstalledPolicyTypes) 
      { 
       if (policyType.Name.ToLower().Contains("MyPolicyType")) 
       { 
        //teamProject.SetCheckinPolicies(new PolicyEnvelope[] { new PolicyEnvelope(workItemPolicy, policyType) }); 
        //break; 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 

Je suis coincé à cette ligne:

//teamProject.SetCheckinPolicies(new PolicyEnvelope[] { new PolicyEnvelope(workItemPolicy, policyType) }); 

Comment puis-je créer l'enveloppe politique pour ma stratégie personnalisée? Le code que je référencement est de l'emplacement ci-dessous: http://bartwullems.blogspot.com/2012/02/team-foundation-server-2010-enable.html

+0

Votre stratégie implémente 'IPolicyDefenition'? – DaveShaw

+0

Oui, il le fait ... – PushCode

Répondre

1

Il vous suffit de remplacer le WorkItemPolicy dans l'exemple avec votre politique:

Par exemple:

var myPolicy = new MyPolicy(); 

foreach (PolicyType policyType in Workstation.Current.InstalledPolicyTypes) 
{ 
    if (policyType.Name == myPolicy.Type) 
    { 
     teamProject.SetCheckinPolicies(
      new PolicyEnvelope[] 
      { 
       new PolicyEnvelope(myPolicy, policyType) 
      }); 
     break; 
    } 
} 

Vous devrez peut-être ajouter une référence à l'assembly contenant votre stratégie si vous ne l'avez pas dans votre application console.

+0

Oh ya ... j'ai manqué la chose simple. Votre solution a bien fonctionné. Mais, mon approche ici supprime toutes les politiques checkin existantes et active seulement celle qui est spécifiée dans ce code. Ce que j'essaye de faire est, le code que j'écris devrait ajouter la politique d'archivage spécifiée à la liste existante, mais ne remplace pas la liste entière avec la politique spécifiée. – PushCode

+0

Je l'ai eu. 'teamProject.GetCheckinPolicies()' retourne le tableau de l'objet 'PolicyEnvolope'. Ensuite, dans le bloc 'if', j'ajoute ma politique à cet objet tableau et je passe ensuite cet objet tableau à 'teamProject.SetCheckinPolicies()'. Je vais faire le travail dont j'ai besoin. Merci pour votre aide Dave. – PushCode

Questions connexes