Как подсчитать количество строк кода в решении C # без комментариев и пустых строк и других избыточных материалов и т. д.?

17

Из-за избыточных вещей я имею в виду пространства имен, поскольку я знаю, что они необходимы, но если их 10 тыс., это не добавляет ценной информации в таблицу.

Можно ли это сделать с помощью Linq?

    
задан Joan Venge 10.05.2011 в 22:31
источник

6 ответов

23

Не нужно изобретать велосипед. Взгляните на Показатели кода Visual Studio Code PowerTool 11.0

  

Обзор

     

Код Metrics PowerTool - это утилита командной строки, которая вычисляет метрики кода для вашего управляемого кода и сохраняет их в XML-файле. Этот инструмент позволяет командам собирать и сообщать показатели кода как часть процесса сборки. Вычисляемые показатели кода:

     

• Индекс работоспособности

     

• Cyclomatic Complexity

     

• Глубина наследования

     

• Сочетание классов

     

• Линии кода (LOC)

Я знаю, что вы сказали, что у вас нет Ultimate, поэтому я просто хотел показать вам, чего вам не хватает.

Для всех остальных существует SourceMonitor

    
ответ дан grenade 10.05.2011 в 22:55
источник
15

Visual studio сделает это за вас. Щелкните правой кнопкой мыши свой проект и выберите Calculate Code Metrics .

    
ответ дан Kyle Trauberman 10.05.2011 в 22:35
источник
2

От: Ссылка

private int CountNumberOfLinesInCSFilesOfDirectory(string dirPath)
{
    FileInfo[] csFiles = new DirectoryInfo(dirPath.Trim())
                                .GetFiles("*.cs", SearchOption.AllDirectories);

    int totalNumberOfLines = 0;
    Parallel.ForEach(csFiles, fo =>
    {
        Interlocked.Add(ref totalNumberOfLines, CountNumberOfLine(fo));
    });
    return totalNumberOfLines;
}

private int CountNumberOfLine(Object tc)
{
    FileInfo fo = (FileInfo)tc;
    int count = 0;
    int inComment = 0;
    using (StreamReader sr = fo.OpenText())
    {
        string line;
        while ((line = sr.ReadLine()) != null)
        {
            if (IsRealCode(line.Trim(), ref inComment))
                count++;
        }
    }
    return count;
}

private bool IsRealCode(string trimmed, ref int inComment)
{
    if (trimmed.StartsWith("/*") && trimmed.EndsWith("*/"))
        return false;
    else if (trimmed.StartsWith("/*"))
    {
        inComment++;
        return false;
    }
    else if (trimmed.EndsWith("*/"))
    {
        inComment--;
        return false;
    }

    return
           inComment == 0
        && !trimmed.StartsWith("//")
        && (trimmed.StartsWith("if")
            || trimmed.StartsWith("else if")
            || trimmed.StartsWith("using (")
            || trimmed.StartsWith("else  if")
            || trimmed.Contains(";")
            || trimmed.StartsWith("public") //method signature
            || trimmed.StartsWith("private") //method signature
            || trimmed.StartsWith("protected") //method signature
            );
}
  1. Комментарии // и / * kind игнорируются.
  2. Оператор, написанный в нескольких строках, считается отдельной строкой.
  3. скобки (т. е. '{') не считаются строками.
  4. Строка
  5. 'using namespace' игнорируется.
  6. Линии, которые являются именем класса и т. д., игнорируются.
ответ дан Yogee 19.09.2014 в 11:13
источник
1

У меня нет твердого представления о них, но вы можете использовать Значения показателей кода для получения некоторые статистические данные о вашем решении, такие как строки кода.

    
ответ дан Akram Shahda 10.05.2011 в 22:36
источник
1

мы использовали куб tfs для получения данных о том, сколько строк добавляет / удаляет / меняет на наших tfs. Этот, который вы можете просмотреть с помощью excel. Но нужно правильно настроить его. И я не думаю, что это исключает комментарии и пустые строки и т. Д.

    
ответ дан spspli 10.05.2011 в 23:22
источник
0

Ctrl + Shift + f (Найти в файлах) - & gt; положил ";" в разделе «Найти что:» - текстовое поле - & gt; Нажмите кнопку «Найти все».

Этот чрезвычайно простой метод использует тот факт, что любой оператор C # заканчивается точкой с запятой. И, по крайней мере, я не использую точки с запятой в любом другом месте (например, в комментариях) ...

    
ответ дан Martin777 08.12.2017 в 11:18
источник