2013-02-20 2 views
0

У меня есть обычная политика проверки, написанная на C#, и я использовал проект VSIX с настраиваемым действием, включенным при установке. Установка отлично работает. Если у меня есть специальная политика проверки, применяемая к командному проекту в TFS 2010, и я удалил свою политику с одного и того же установщика, он очистит реестр и файлы, но исходный элемент управления все еще имеет политику и выдает ошибку. Ошибка загрузка политики. Я хочу, чтобы мой установщик удалял политику из исходного элемента управления при удалении политики. Как я могу это достичь?Как удалить пользовательскую политику проверки при удалении?

Я попытался написать следующий код в OnAfterUninstall случае, но он не делает то, что мне нужно:

protected override void OnAfterUninstall(IDictionary savedState) 
    { 
     base.OnAfterUninstall(savedState); 
     RemovePolicy(); 
    } 


private void RemovePolicy() 
    { 
     try 
     { 
      TfsTeamProjectCollection projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(projectCollectionUri, new UICredentialsProvider()); 
      projectCollection.EnsureAuthenticated(); 

      VersionControlServer vcs = projectCollection.GetService<VersionControlServer>(); 
      List<TeamProject> lstTeamProject = vcs.GetAllTeamProjects(true).ToList<TeamProject>(); 

      foreach (TeamProject tp in lstTeamProject) 
      { 
       List<PolicyEnvelope> tc = tp.GetCheckinPolicies().ToList<PolicyEnvelope>(); 
       var myPolicy = new MyCustomCheckinPolicy(); 
       TeamProject teamProject = vcs.GetTeamProject(tp.Name); 

       foreach (PolicyType policyType in Workstation.Current.InstalledPolicyTypes) 
       { 
        if (policyType.Name == myPolicy.Type) 
        { 
         tc.Remove(new PolicyEnvelope(myPolicy, policyType)); 
         teamProject.SetCheckinPolicies(tc.ToArray()); 
         break; 
        } 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      throw new InstallException("My Error Message"); 
     } 
    } 
+1

Итак, что * это * он делает? Происходит ли это ошибка, терпит неудачу? И вы действительно уверены, что хотите это сделать? Любой член команды, удаляющий политику, удалит ее с сервера! – jessehouwing

+0

'Любой член команды, удаляющий политику, удалит ее с сервера!' oops, я этого не знал. В таком случае я не хочу этого делать. Спасибо, что предупредили меня. – PushCode

ответ

0

Поскольку политика пользовательских Checkin должна быть установлена ​​на все рабочие станции разработчиков, имеющий доступ к проекту TFS, если он отключится от проекта TFS при удалении, он действительно удалит политику, когда любой из этих разработчиков удалит ее. Это не то, что вы хотите, я подозреваю.

Есть способы, чтобы ensure the policy is distributed to all team members through the Team Foundation Power Tools, в этом случае, если вам нужно отправить обновление или другую политику, вы будете уверены, что все участники имеют его. Только выполните дерегистрацию вручную через пользовательский интерфейс.