我们正在研究遗留的WinForms项目,该项目忽略了基本的编码标准,现在有很多类,有20k +代码行。
问题在于,这个项目的大多数开发人员只研究过遗留技术,而且对于正确代码形式的重要性教育他们有点困难。
我正在考虑在我们的TFS服务器中实施检查,如果一个(或多个)更改文件的大小超过2000行并且新版本大于前一个版本,它将阻止他们检查代码
这会阻止文件增长,只会减小文件大小。
不幸的是,据我所知,TFS代码分析规则集只考虑了签入代码的当前状态,并且无法与以前的版本进行比较(工作区版本与服务器版本)版本)。
是否有办法在TFS服务器级别实现此功能,以防止人们向文件添加行,但是他们不会被迫重构20k类只是为了提交更改?
答案 0 :(得分:0)
没有默认方式来满足您的要求。您需要自定义签入策略,以将本地文件与同一文件的服务器副本进行比较。
您需要的第一步是从TFS获取最新版本的文件。然后将本地文件与下载的文件进行比较。这里有a blog分享了如何检索给定文件的最新版本的示例:
using System;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.VersionControl.Client;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string teamProjectCollectionUrl = "https://YourTfsUrl/tfs/YourTeamProjectCollection";
string filePath = @"C:\project\myfile.cs";
// Get the version control server
TfsTeamProjectCollection teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(teamProjectCollectionUrl));
VersionControlServer versionControlServer = teamProjectCollection.GetService<VersionControlServer>();
// Get the latest Item for filePath
Item item = versionControlServer.GetItem(filePath, VersionSpec.Latest);
// Download and display content to console
string fileString = string.Empty;
using (Stream stream = item.DownloadFile())
{
using (MemoryStream memoryStream = new MemoryStream())
{
stream.CopyTo(memoryStream);
// Use StreamReader to read MemoryStream created from byte array
using (StreamReader streamReader = new StreamReader(new MemoryStream(memoryStream.ToArray())))
{
fileString = streamReader.ReadToEnd();
}
}
}
Console.WriteLine(fileString);
Console.ReadLine();
}
}
}