Answers:
Team Foundation Server 2015(本地)和Visual Studio Team Services(云版本)都提供了内置支持,可在您的所有代码和工作项中进行搜索。
您可以进行简单的字符串搜索,例如foo
,布尔操作之类,foo OR bar
或更复杂的特定于语言的事物如class:WebRequest
您可以在这里阅读有关此内容的更多信息:https : //www.visualstudio.com/zh-cn/docs/search/overview
以我为例,用C#编写一个小的实用程序很有帮助。对我有帮助的链接-http: //pascallaurin42.blogspot.com/2012/05/tfs-queries-searching-in-all-files-of.html
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.VersionControl.Client;
using Microsoft.TeamFoundation.Framework.Client;
using System.IO;
namespace TFSSearch
{
class Program
{
static string[] textPatterns = new[] { "void main(", "exception", "RegisterScript" }; //Text to search
static string[] filePatterns = new[] { "*.cs", "*.xml", "*.config", "*.asp", "*.aspx", "*.js", "*.htm", "*.html",
"*.vb", "*.asax", "*.ashx", "*.asmx", "*.ascx", "*.master", "*.svc"}; //file extensions
static void Main(string[] args)
{
try
{
var tfs = TfsTeamProjectCollectionFactory
.GetTeamProjectCollection(new Uri("http://{tfsserver}:8080/tfs/}")); // one some servers you also need to add collection path (if it not the default collection)
tfs.EnsureAuthenticated();
var versionControl = tfs.GetService<VersionControlServer>();
StreamWriter outputFile = new StreamWriter(@"C:\Find.txt");
var allProjs = versionControl.GetAllTeamProjects(true);
foreach (var teamProj in allProjs)
{
foreach (var filePattern in filePatterns)
{
var items = versionControl.GetItems(teamProj.ServerItem + "/" + filePattern, RecursionType.Full).Items
.Where(i => !i.ServerItem.Contains("_ReSharper")); //skipping resharper stuff
foreach (var item in items)
{
List<string> lines = SearchInFile(item);
if (lines.Count > 0)
{
outputFile.WriteLine("FILE:" + item.ServerItem);
outputFile.WriteLine(lines.Count.ToString() + " occurence(s) found.");
outputFile.WriteLine();
}
foreach (string line in lines)
{
outputFile.WriteLine(line);
}
if (lines.Count > 0)
{
outputFile.WriteLine();
}
}
}
outputFile.Flush();
}
}
catch (Exception e)
{
string ex = e.Message;
Console.WriteLine("!!EXCEPTION: " + e.Message);
Console.WriteLine("Continuing... ");
}
Console.WriteLine("========");
Console.Read();
}
// Define other methods and classes here
private static List<string> SearchInFile(Item file)
{
var result = new List<string>();
try
{
var stream = new StreamReader(file.DownloadFile(), Encoding.Default);
var line = stream.ReadLine();
var lineIndex = 0;
while (!stream.EndOfStream)
{
if (textPatterns.Any(p => line.IndexOf(p, StringComparison.OrdinalIgnoreCase) >= 0))
result.Add("=== Line " + lineIndex + ": " + line.Trim());
line = stream.ReadLine();
lineIndex++;
}
}
catch (Exception e)
{
string ex = e.Message;
Console.WriteLine("!!EXCEPTION: " + e.Message);
Console.WriteLine("Continuing... ");
}
return result;
}
}
}
还有另一种替代解决方案,它似乎更具吸引力。
现在,通过上述所有设置,您可以为客户端提供一些选择:
更新:我确实走过这条路线,并且运行良好。只是想添加到此。
参考链接:
如果安装TFS 2008 PowerTools,则在Team Explorer的右键单击菜单中将获得“在源代码管理中查找”操作。
我们已经为Team Foundation Server源代码控制(而不是您提到的SourceSafe)建立了一个类似于Grant所建议的解决方案。预定的TF Get,Search Server Express。但是,用于C#文件(文本)的IFilter没有提供我们想要的结果,因此我们将源文件转换为.htm文件。现在,我们可以向文件添加其他元数据,例如:
但是,我们希望使用TFS源代码管理的协议处理程序,以及专用于源代码的IFilter来获得更具针对性的解决方案。
从TFS 2015起,现在可以使用该Code Search
插件了。https://marketplace.visualstudio.com/items?itemName=ms.vss-code-search
搜索是通过Web界面完成的,不需要您将代码下载到本地计算机上就可以了。
假设您拥有Notepad ++,那么经常会错过的功能是“查找文件”,该功能非常快速,并带有过滤器,正则表达式,replace和所有N ++好东西。
该加载项声称具有您认为需要的功能:
此搜索文件链接说明了如何查找文件。 我确实必须仔细考虑建议才能使其正常工作。
对于cd命令,我执行cd命令是因为我正在寻找tf.exe文件。仅从该目录开始添加整个路径会更容易。现在,我了解了如何实现此目的,我将在引号中使用绝对路径。
在进行tf搜索的情况下,我从服务器的根目录开始,$/
然后搜索所有以sql
ie 结尾的文件*.sql
。如果您不想从根开始,请"$/myproject/*.sql"
改用。
哦! 这不能解决问题的文件搜索,但是我的Google搜索使我在这里可以找到其他链接中的文件。
当前没有开箱即用的方法,但是有添加它的用户语音建议:http : //visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2037649-implement-indexed-全文搜索项目
尽管我怀疑这只是切换开关一样简单,但是如果所有查看过此问题的人都赞成,MS可能会实施一些措施。
更新:只需阅读Brian Harry的博客,该博客显示此请求已在他们的雷达上,并且Visual Studio的在线版本对将git用作vc的搜索提供了有限的支持:http : //blogs.msdn.com/b/ visualstudioalm / archive / 2015/02/13 /宣布对visual-studio-online-code-search.aspx进行有限的预览。由此看来,我认为可以说这只是时间问题...
更新2:现在提供了Microsoft提供的扩展,即代码搜索,它可以在代码以及工作项中进行搜索。
Code Search
插件了。marketplace.visualstudio.com/items?itemName=ms.vss-code-search