VSTS 2008 - 自定义签入代码审查策略

最近正在微软VSTS Workshop项目中,忙了一个月了,今天将其中一个场景实现写在这里,供大家参考。

实现步骤

建立自定义策略项目

  1. 打开VS2008:
  2. 选择"文件"下的"新建"菜单中的"项目":
  3. 在新项目中选择"Visual C#">"Windows">"类库":
  4. 输入项目名为"CopyrightCheckinPolicy":
  5. 选择确定按钮保存.
  6. 重命名"Clase1""CopyrightPolicy.cs":
  7. 右击项目选择"添加引用":
  8. ".NET"选项卡选择"System.Windows.Forms"选择"确定":
  9. 再右击项目, 选择"添加引用"选择"浏览"选项卡, 找到下面路径的文件:
    C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE \PrivateAssemblies\Microsoft.TeamFoundation.VersionControl.Client.dll
    并添加:
  10. 在类中输入下面代码:

Code
using System.Windows.Forms; 

using Microsoft.TeamFoundation.VersionControl.Client; 

using System.Collections; 

using System.IO; 

using System; 

using System.Collections.Generic; 

using System.Text; 

namespace CopyrightCheckinPolicy 



[Serializable] 

public class CopyrightPolicy : PolicyBase 



public override string Description 



get { return Strings.policyDescription; } 



public override bool Edit(IPolicyEditArgs policyEditArgs) 



return false; 



public override PolicyFailure[] Evaluate() 



if (this.Disposed) 



throw new ObjectDisposedException(Strings.policyType, Strings.policyDisposedMessage); 



ArrayList changes = new ArrayList(); 

PendingChange[] checkedFiles = this.PendingCheckin.PendingChanges.CheckedPendingChanges; 

foreach (PendingChange change in checkedFiles) 



if (Path.GetExtension(change.LocalItem) == ".cs") 



if (change.ChangeType.ToString().Contains(ChangeType.Edit.ToString()) || change.ChangeType.ToString().Contains(ChangeType.Add.ToString())) 



if (IsFileMissingCopyrightNotice(change.LocalItem)) 



PolicyFailure failure = new PolicyFailure(Strings.activateMessage + " : " + change.LocalItem, this); 

changes.Add(failure); 









return (PolicyFailure[])changes.ToArray(typeof(PolicyFailure)); 



public override string Type 



get { return Strings.policyType; } 



public override string TypeDescription 



get { return Strings.policyTypeDescription; } 



public override bool CanEdit 



get 



return false; 





public override void DisplayHelp(PolicyFailure failure) 



MessageBox.Show(Strings.policyHelp); 



public override string InstallationInstructions 



get 



return Strings.policyInstallationInstructions; 



set 



Strings.policyInstallationInstructions = value; 





public override void Activate(PolicyFailure failure) 



MessageBox.Show(Strings.activateMessage); 



protected override void OnPolicyStateChanged(PolicyFailure[] failures) 



base.OnPolicyStateChanged(failures); 



public override void Initialize(IPendingCheckin pendingCheckin) 



base.Initialize(pendingCheckin); 

pendingCheckin.PendingChanges.CheckedPendingChangesChanged += new EventHandler(pendingCheckin_CheckedPendingChangesChanged); 



public override void Dispose() 



PendingCheckin.PendingChanges.CheckedPendingChangesChanged -= new EventHandler(pendingCheckin_CheckedPendingChangesChanged); 

base.Dispose(); 



private void pendingCheckin_CheckedPendingChangesChanged(Object sender, EventArgs e) 



OnPolicyStateChanged(Evaluate()); 



private bool IsFileMissingCopyrightNotice(string fullFileName) 



try 



StreamReader sr = new StreamReader(fullFileName, true); 

string sourceCode = sr.ReadToEnd(); 

bool result = !sourceCode.Contains("Copyright"); 

sr.Close(); 

return result; 



catch (Exception) 



return false; 







internal class Strings 



public static string policyType = "Copyright Notice Policy"; 

public static string policyDescription = "This policy ensures that all C# Source Files include a Copyright Notice."; 

public static string policyInstallationInstructions = "Sorry, No instructions are available at this time"; 

public static string policyTypeDescription = policyType + " Description"; 

public static string policyDisposedMessage = policyType + " Object has been disposed."; 

public static string policyHelp = "Sorry, help for " + policyType + " is not available at this time."; 

public static string activateMessage = "Copyright Notice not found in this source file."; 



  1. 编译成功后保存.

注册策略

  1. 中键入"Regedit"来运行注册表编辑器, 并找到下面注册表键:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\TeamFoundation\
    SourceControl\Checkin Policies:
  2. 添加一个字符串类型的值, 然后将名字命名为刚才建立项目生成的DLL的名字"CopyrightCheckinPolicy":
  3. 双击选择在值中写入该DLL的完整路径, 如下(视具体情况而定):
    C:\HOL\Dev\Module 05 - Lab 01 - Setting Up Custom Checkin Policies\Begin\CopyrightCheckinPolicy\CopyrightCheckinPolicy\bin\Debug\CopyrightCheckinPolicy.dll:
  4. 保存后即可.

测试策略

  1. 打开VS2008, 右击项目选择其属性:
  2. 选择"调试"页:
  3. 选择"启动外部程序"单选按钮, 然后设置其值为"C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe":
  4. 保存.
  5. 调试该程序, 这时一个新的VS2008被打开:
  6. 选择团队项目, 在其中选择"团队项目设置"菜单中的"源代码管理":
  7. 选择"签入策略"选项卡, 点击"添加"按钮:
  8. 这时我们看到刚才定义的策略已经在其中了, 选择它并点击"确定":
  9. 新建一个项目, 将其加入到该团队项目中:

  10. 继续后将" // Copyright ( c ) MyCompany"加入Class1中:
  11. 再新建一个类:
  12. 然后"签入"所有代码:
  13. 这时可以看到提示未加入版权的信息:

 

希望本文对大家有帮助,谢谢!

时间: 2024-11-07 17:35:19

VSTS 2008 - 自定义签入代码审查策略的相关文章

Team System: 自定义签入策略

在本专栏的最近三期中,我探讨了 Team Foundation Server (TFS) 版本控制和工作项跟踪 API.我 使用这些 API 构建了一个 Microsoft Word 2003 加载项,为 Word 文档的签入和工作项关联提供 支持,这类似于 Visual Studio 2005 中团队资源管理器的功能.在本期专栏中,我将深入论述签 入说明和策略.您将了解签入说明的工作原理以及如何编写自己的自定义策略实现.在未来的专栏中,我 会将此支持添加到 Word 加载项中. 签入说明和策略

Team System: 签入说明和策略

在本专栏 2007 年 1 月刊中,我开始讨论使用 Microsoft Word 2003 加载项提供的 Team Foundation Server (TFS) 版本控制 API.一年多之后,我又在这里为大家奉上第五部分,同时也是最后 一部分有关版本控制 API 和 Word 加载项的专项讨论(我确实没想到会有这么多部分). 您也许还记得在以前的专栏里我们曾提到加载项目前支持签入.签出.撤消挂起的更改,并能够将工 作项与签入相关联.在我最新的专栏中,我详细分析了签入说明和签入策略.本月,我将为

Windows Server 2008密码和账号锁定策略

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   Windows Server 2008 操作系统为组织提供一个方法,可以为域中的不同集合的用户定义不同的密码和账号锁定策略.在Microsoft Windows 2000和Windows Server 2003 活动目录域中,只能有一个密码策略和账号锁定策略应用到域中的所有的用户.这些策略在域的缺省的域策略中指定.结果是,那些想为不同集合的用户定义不同的密码和账

PowerShell如何批量签入SharePoint Document Library中的文件

由于某个文档库设置了编辑前签出功能,导致批量导入文件时这些文件默认的状态都被签出了.如果手动签入则费时费力,故利用PowerShell来实现批量签入Document Library中的文件. Resolution Add-PSSnapin Microsoft.SharePoint.PowerShell function CheckInDocument([string]$url){ $spWeb=Get-SPWeb $url $spDocument=$spWeb.Lists.TryGetList(

flash8.0自定义缓入/缓出动画范例

本小节我们利用自定义缓入/缓出动画制作一个逼真弹跳的球范例,范例效果如图3-96所示. 图3-96 范例效果 下面讲解制作过程. (1)为了方便本范例的制作,笔者已经事先制作好了一些图形元件.我们直接打开本实例中的提供素材的原始文件,在这个文件的基础上进行操作.如图3-97所示是事先制作好的三个图形元件. 图3-97 事先制作的图形元件 (2)将"图层1"重新命名为"背景".在这个图层上,将"库"中的"背景"图形元件拖放到舞台

windows-Win10下签入桌面窗口的所有文字透明而显示不清,怎样能使文字不透明?

问题描述 Win10下签入桌面窗口的所有文字透明而显示不清,怎样能使文字不透明? 50C 在Windows系统桌面签入窗口,点击'显示桌面'时也能和桌面图标一样不隐藏.使用了这样的方法:public void SetDeskWindow(IntPtr hWin) { //win7 下是查找 Progman 窗口 IntPtr hDeskTop = FindWindow(""Progman"" null); IntPtr hShellDll = IntPtr.Zero

添加-如何签入整个解决方案?

问题描述 如何签入整个解决方案? 我有本地一个解决方案,现在想变为团队开发,建立好了tfs服务,怎么签入整个解决方案呢?貌似只能新建一个tfs解决方案然后一个文件一个文件添加?

visual studio-TFS 不能签入文件报错 TF203082: 所上载文件的校验和值与提供的值不匹配。

问题描述 TFS 不能签入文件报错 TF203082: 所上载文件的校验和值与提供的值不匹配. TFS是2010 版本,VS是2013 update 4版本,账户密码可以获取.签出.编辑文件,但是不能签入文件,一签入就会报错.请求大虾支持一下: 解决方案 兄弟,解决了没?我也遇到了这个问题,我的是tfs2010 + vs 2013 update5

sip服务器-sip server 2008的呼入域和呼出域的作用及配置

问题描述 sip server 2008的呼入域和呼出域的作用及配置 我想知道sip server 2008呼入域和呼出域的作用,配置和完成的功能,在线等,大神们快来解救我!我想实现两个服务器下的分机之间通信,配置这个呼入域和呼出域能不能实现?如果不能实现有其他方法能告诉我吗!求解救!