Tfs 如何在卸载时删除自定义签入策略?
我有一个用c#编写的自定义签入策略,并且在安装时启用了自定义操作的VSIX项目。安装工作很好。如果将自定义签入策略应用于TFS 2010中的团队项目,并且从同一安装程序中卸载了策略,则该策略将清理注册表和文件,但源代码管理仍启用该策略,并在加载策略时引发错误。我希望安装程序在卸载策略时从源代码管理中删除该策略。我怎样才能做到这一点 我试图在OnAfterUninstall事件中编写以下代码,但它没有完成我需要的操作:Tfs 如何在卸载时删除自定义签入策略?,tfs,tfs-sdk,checkin-policy,Tfs,Tfs Sdk,Checkin Policy,我有一个用c#编写的自定义签入策略,并且在安装时启用了自定义操作的VSIX项目。安装工作很好。如果将自定义签入策略应用于TFS 2010中的团队项目,并且从同一安装程序中卸载了策略,则该策略将清理注册表和文件,但源代码管理仍启用该策略,并在加载策略时引发错误。我希望安装程序在卸载策略时从源代码管理中删除该策略。我怎样才能做到这一点 我试图在OnAfterUninstall事件中编写以下代码,但它没有完成我需要的操作: protected override void OnAfterUninstal
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");
}
}
卸载后受保护的覆盖无效(IDictionary savedState)
{
base.OnAfterUninstall(savedState);
删除策略();
}
私有void RemovePolicy()
{
尝试
{
TfsTeamProjectCollection projectCollection=TfsTeamProjectCollectionFactory.GetTeamProjectCollection(projectCollectionUri,新UICredentialsProvider());
projectCollection.EnsureReauthenticated();
VersionControlServer vcs=projectCollection.GetService();
List lstTeamProject=vcs.getAllTeamProject(true.ToList();
foreach(团队项目中的团队项目tp)
{
List tc=tp.GetCheckinPolicies().ToList();
var myPolicy=new MyCustomCheckinPolicy();
TeamProject TeamProject=vcs.GetTeamProject(tp.Name);
foreach(工作站中的PolicyType PolicyType.Current.InstalledPolicyType)
{
if(policyType.Name==myPolicy.Type)
{
删除(新保单信封(myPolicy,policyType));
setCheckInPolicys(tc.ToArray());
打破
}
}
}
}
捕获(例外情况除外)
{
抛出新的InstallException(“我的错误消息”);
}
}
因为需要在访问TFS项目的所有开发人员工作站上安装自定义签入策略,所以在卸载时让它从TFS项目中注销本身实际上会在这些开发人员卸载策略时删除该策略。我怀疑这不是你想要的
如果您需要发布升级或其他策略,您可以通过多种方式确保所有成员都拥有它。只能通过UI手动取消注册。那么它在做什么?它会犯错误,惨败吗?你真的确定要这么做吗?任何删除策略的团队成员都会将其从服务器中删除<代码>任何删除策略的团队成员都会将其从服务器中删除哎呀,我不知道。那样的话,我不想这样做。谢谢你提醒我。