确定TFS集合中代码总数的最佳方法是什么?我是否需要以某种方式使用SDK才能执行此操作?或者是否有报告工具?
答案 0 :(得分:1)
我不知道最好的方法,但您几乎肯定必须将源代码放入工作区,然后运行您选择的工具来计算“线条”(取决于您认为的“线条”)代码“)。
用于计算源文件中的行的工具没有结束,并且自己编写一行很简单,所以我不会尝试详细讨论该部分问题。
因此,另一部分是手动获取源代码到您的PC,或使用tf.exe从批处理文件或类似文件中自动执行Get过程。棘手的一点是找出相当不友好的tf命令行,但如果你仔细阅读文档,这是一个非常容易实现的任务。
答案 1 :(得分:0)
我承认我在找一个很好的理由我不知所措,但是如果你得到整个集合,你就可以计算每个文件中具有代码类型的行数在其中(* .cs,vb,aspx等)
许多工具可以计算行数,但是如果你需要自己编号,你可以尝试计算像“。+ \ n”这样的正则表达式的出现次数。
答案 2 :(得分:-1)
[添加表单应用程序中需要的一些控件]
private static int totalLinesCount = 0;
private static int totalLinesOfCode = 0;
private static int totalComments = 0;
private void btnCount_Click(object sender, EventArgs e)
{
try
{
totalLinesCount = 0;
totalLinesOfCode = 0;
totalComments = 0;
lblTotalCount.Text = "";
DirectoryInfo di = new DirectoryInfo(txtFileName.Text);
if (di.Exists)
{
FileInfo[] fis = di.GetFiles(txtSearchPattern.Text, SearchOption.AllDirectories);
rtbReport.Text = "";
Dictionary<string, int> dictionary = new Dictionary<string, int>();
DataSet ds = new DataSet("Report");
DataTable dt = new DataTable();
dt.Columns.Add("FileName", typeof(string));
dt.Columns.Add("TotalCount", typeof(string));
dt.Columns.Add("Code", typeof(string));
dt.Columns.Add("Commented", typeof(string));
dt.Columns.Add("Summary", typeof(string));
ds.Tables.Add(dt);
foreach (FileInfo fi in fis)
{
if (fi.Exists)
{
int fileLinesCount = File.ReadAllLines(fi.FullName).Length;
int commentedCode = 0;
foreach (string line in File.ReadLines(fi.FullName))
{
if (line.TrimStart().StartsWith("/") || (line.TrimStart().StartsWith("*")))
{
commentedCode++;
}
}
rtbReport.Text += string.Format("{0}: {1}; Actual Code: {2}; Commented lines: {3};{4}",
fi.Name, fileLinesCount.ToString(), fileLinesCount - commentedCode, commentedCode,"\n");
totalLinesCount += fileLinesCount;
totalComments += commentedCode;
DataRow dr = ds.Tables[0].NewRow();
dr["FileName"] = fi.Name;
dr["TotalCount"] = fileLinesCount;
dr["Code"] = fileLinesCount - commentedCode;
dr["Commented"] = commentedCode;
dr["Summary"] = string.Format("Code: {0}, Commented: {1}, Total: {2}",
fileLinesCount-commentedCode, commentedCode, fileLinesCount);
ds.Tables[0].Rows.Add(dr);
}
}
if (ds.Tables.Count > 0)
{
dataGridView1.DataSource = ds.Tables[0].DefaultView;
dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dataGridView1.Columns[0].DefaultCellStyle.WrapMode = DataGridViewTriState.True;
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
}
totalLinesOfCode = totalLinesCount - totalComments;
lblTotalCount.Text = string.Format("{0}: {1}; Code: {2}; Comments: {3}",
"Total Number of lines in all files", totalLinesCount.ToString(),
totalLinesOfCode.ToString(), totalComments.ToString());
rtbReport.Text += lblTotalCount.Text;
}
else
MessageBox.Show("Folder does not exist. Select a valid folder",
"Folder not found", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}