Bagaimana Anda menghitung baris kode dalam solusi Visual Studio?

800

Apakah mungkin untuk menemukan jumlah baris kode di seluruh solusi? Saya pernah mendengar tentang MZ-Tools , tetapi adakah yang setara dengan sumber terbuka?

Fermin
sumber
24
Saya setuju bahwa itu tidak banyak membantu tetapi jika manajemen memintanya ...
Fermin
33
LoC hanyalah metrik dan khususnya interresting dalam 2 kasus: 1) untuk mendapatkan gambaran seberapa besar basis kode yaitu ketika Anda bergabung dengan tim baru 2) untuk mengukur kemajuan Anda ketika mencoba membuat basis kode Anda lebih kompak
Piotr Owsiak
191
Beberapa orang di sini mengatakan bahwa menghitung baris kode tidak berguna tanpa memikirkannya dengan baik. Ini cukup berguna karena ini adalah metrik yang umumnya harus diminimalkan. Ini adalah cara sederhana untuk mengukur kompleksitas solusi (bukan efisiensi) dan jika masalahnya diketahui sederhana, semakin banyak baris kode, umumnya semakin rendah kualitasnya. Hal lain adalah mengapa orang repot menanggapi jika hanya mengatakan pertanyaannya buruk? Apa yang akan Anda pikirkan jika seorang guru memberi tahu Anda pertanyaan Anda yang seharusnya tidak ditanyakan.
77
Di VS2010 ada alat built-in yang menghitung semua baris kode dan nilai-nilai lain juga: Pergi ke Lihat -> Windows Lain -> Hasil metrik kode. Sebuah tombol kecil di sudut yang terlihat seperti kalender, klik itu, tooltip harus mengatakan Hitung metrik kode untuk soulution, dan biarkan VS melakukan hal itu.
user959631
64
Orang itu tidak selalu perlu memberi tahu Anda mengapa mereka ingin menghitung kode. Ketika pertanyaannya adalah ini hanya dinyatakan, kasus sekitar mengapa tidak relevan. Jawab saja pertanyaannya. Aku benci itu. Ada saat-saat untuk bertanya mengapa ketika jelas Anda perlu dan kemudian ada waktu Anda tidak (ketika Anda secara pribadi tidak melihat kebutuhan ... dan hanya membuat poster kesombongan dengan kesombongan).
PositiveGuy

Jawaban:

525

Visual Studio 2010 Ultimate memiliki built-in ini:

Analisis → Hitung Metrik Kode

Herter
sumber
12
Ultimate dan Premium, saya pikir
Stefan Dragnev
39
Peringatan: Ini melakukan banyak hal lain selain penghitungan baris. Itu juga mencantumkan "Indeks Maintainability", "Kompleksitas Siklomatik", "Kedalaman Warisan", dan "Kopling Kelas", yang semuanya cukup rumit untuk dihitung, dan Anda tidak dapat menjalankan metrik hanya untuk sebagian saja. Apakah ini berarti bahwa jika basis kode Anda sangat besar, Anda mungkin duduk berjam-jam menunggu untuk itu. Jika yang Anda inginkan adalah penghitungan garis, ada banyak solusi yang lebih cepat di luar sana.
Darrel Hoffman
4
juga pada vs2012 ultimate =)
oCcSking
9
VS 2013 memiliki Analisis -> Hitung metrik Kode
Dinesh Rajan
42
Sayang sekali ini tidak bekerja dengan proyek-proyek C ++ asli (setidaknya tidak di VS2013).
Cameron
844

Saya menemukan PowerShell berguna untuk ini. Saya menganggap LoC sebagai metrik yang cukup palsu, jadi saya tidak percaya apa pun yang lebih formal harus diminta.

Dari direktori solusi smallish:

PS C:\Path> (gci -include *.cs,*.xaml -recurse | select-string .).Count
8396
PS C:\Path>

Itu akan menghitung baris non-kosong di semua file .cs dan .xaml solusi. Untuk proyek yang lebih besar, saya hanya menggunakan daftar ekstensi yang berbeda:

PS C:\Other> (gci -include *.cs,*.cpp,*.h,*.idl,*.asmx -recurse | select-string .).Count
909402
PS C:\Other>

Mengapa menggunakan seluruh aplikasi saat satu baris perintah akan melakukannya? :)

Greg D
sumber
19
(Satu-satunya waktu saya pernah diminta untuk memasok jumlah saluran adalah ketika manajemen tingkat atas mencari tahu berapa banyak waktu yang diperlukan untuk memigrasikan semua produk kami di luar negeri sehingga mereka dapat menutup situs domestik kami.)
Greg D
8
(Ya, ini termasuk file dan komentar codegen. Tidak, itu tidak mengganggu saya. Desainer, kode gen'd, dan komentar perlu dipertahankan juga.)
Greg D
27
sangat bagus, benar-benar lupa tentang PowerShell. itu harus menjadi pengganti default untuk cmd
lubos hasko
4
Luar biasa! Komentar akhir Anda benar-benar merangkumnya, itu adalah tugas yang sepele, jadi mengapa menggunakan alat yang tidak sepele? Meskipun saya benar-benar berpikir itu harus dimasukkan dalam semua versi VS.
Sune Rievers
13
Jika Anda ingin mengecualikan file backing yang dihasilkan untuk XAML, Anda bisa menambahkan switch -exclude: (dir -exclude *.g.cs -include *.cs,*.xaml -recurse | select-string .).Count
EZ Hart
349

Saya menggunakan Ctrl+ Shift+ F. Selanjutnya, masukkan a \ndi kotak pencarian dan aktifkan kotak ekspresi reguler. Kemudian di hasil pencarian, di akhir layar adalah jumlah file yang dicari dan baris kode yang ditemukan.

Anda dapat menggunakan [^\n\s]\r\nuntuk melewati garis kosong dan hanya spasi (kredit ke Zach dalam komentar).

NicolásKittsteiner
sumber
16
Solusi ini salah memasukkan baris kosong, komentar, dokumentasi, dan pernyataan split. Untuk banyak aplikasi, itu tidak boleh dihitung sebagai baris kode.
Jay Baxter
1
Meskipun sedikit tidak akurat (jika Anda benar-benar menggunakan \ n dalam kode Anda, baris itu akan dihitung ganda), itu masih merupakan jawaban terbaik jika Anda memerlukan ROM baris kode tanpa alat pihak ke-3
Joseph Duty
1
Anda juga dapat memilih jenis file tertentu dengan memilih Look at these file types:dropdown opsi hanya di bawah enable regular expressions box.
Moshii
1
Bekerja untuk proyek yang sangat kecil ... ketika Anda memiliki 100 juta baris kode ini akan memakan waktu.
rawa
11
[^\n\s]\r\nmelompati garis kosong, bahkan dengan spasi di dalamnya.
Zach Mierzejewski
219

Penghitung garis sumber terbuka untuk VS2005, 2003 dan 2002 tersedia di sini:

http://www.wndtabs.com/

Ada juga diskusi tentang membuat penghitungan baris addin VS, lengkap dengan kode pada proyek Codep, disini

http://www.codeproject.com/KB/macros/LineCounterAddin.aspx

Juga Edit Slick Gadgets memiliki penghitung garis yang bagus, di sini:

http://www.slickedit.com/products/slickedit

dan Microsoft Visual Studio Team System 2008 termasuk penghitung garis yang baik.

Ingat saja:

Mengukur progres pemrograman dengan garis kode sama seperti mengukur progres pembangunan pesawat terbang berdasarkan beratnya. Bill Gates

Ali Parr
sumber
1
Seringkali menghitung baris kode adalah Just Plain Silly, dan kuantitas tidak menyiratkan kualitas. Namun, tim besar yang meletakkan 545.000 lb (545.000 lb !!) Dreamliner di udara adalah pencapaian yang sama sekali berbeda dari meluncurkan ultralite yang saya buat sendiri di garasi. Dan jika Anda berpikir tentang jumlah baris kode di Windows, mungkin Mr. Bill memaksudkan ini dengan cara yang berbeda dari yang biasanya dilakukan ...?
UnconditionalReinstateMonica
18
Tampaknya tidak ada yang berlaku untuk Visual Studio 2010, dan tautan slickedit rusak.
MGOwen
57
Anda menemukan fitur LOC di Visual Studio 2010 Ultimate di bawah "Analisis> metrik Kode" Saya harap saya menerjemahkannya dengan benar. Saya punya versi Jerman. Itu dia "Analisis"> "Codemetriken berechnen"
OneWorld
2
untuk Visual Studio 2012 metrik LoC dapat ditemukan di ANALYZE> Hitung Metrik Kode untuk Solusi
tetri
2
Juga, VS2012 menyertakan fitur ini di edisi Ultimate dan Premium (dan sekarang juga Profesional).
SWalters
81

Berikut ini adalah pembaruan untuk Visual Studio 2012/2013/2015 untuk mereka yang ingin melakukan opsi "Temukan" (yang menurut saya paling mudah): RegEx ini akan menemukan semua baris yang tidak kosong dengan beberapa pengecualian untuk memberikan hasil yang paling akurat. .

Masukkan RegEx berikut ke dalam kotak "Temukan". Pastikan untuk memilih opsi "Gunakan Ekspresi Reguler". Ubah opsi pencarian menjadi "Proyek Saat Ini" atau "Seluruh Solusi" tergantung pada kebutuhan Anda. Sekarang pilih "Temukan Semua". Di bagian bawah jendela Temukan Hasil , Anda akan melihat "Garis Pencocokan" yang merupakan baris jumlah kode.


^(?!(\s*\*))(?!(\s*\-\-\>))(?!(\s*\<\!\-\-))(?!(\s*\n))(?!(\s*\*\/))(?!(\s*\/\*))(?!(\s*\/\/\/))(?!(\s*\/\/))(?!(\s*\}))(?!(\s*\{))(?!(\s(using))).*$

RegEx ini tidak termasuk item berikut:


Komentar

// This is a comment

Komentar multi-baris (dengan asumsi baris dikomentari dengan benar dengan * di depan setiap baris)

/* I am a
* multi-line
* comment */

XML untuk Intellisense

/// <summary>
/// I'm a class description for Intellisense
/// </summary>

Komentar HTML:

<!-- I am a HTML Comment -->

Menggunakan pernyataan:

using System;
using System.Web;

Membuka kurung kurawal:

{

Kurung kurawal penutupan:

}

Catatan: apa pun di antara kurung kurawal akan disertakan dalam pencarian, tetapi dalam contoh ini hanya 4 baris kode yang akan dihitung, alih-alih 18 baris non-kosong aktual:

        public class Test
        {
            /// <summary>
            /// Do Stuff
            /// </summary>
            public Test()
            {
                TestMe();
            }
            public void TestMe()
            {
                //Do Stuff Here
                /* And
                 * Do
                 * Stuff
                 * Here */
            }
        }

Saya membuat ini untuk memberi saya jumlah LOC yang jauh lebih akurat daripada beberapa opsi sebelumnya, dan saya pikir saya akan membagikannya. Para bos suka jumlah LOC, jadi saya terjebak dengannya sebentar. Saya harap orang lain dapat menemukan ini bermanfaat, beri tahu saya jika Anda memiliki pertanyaan atau butuh bantuan agar berhasil.

Howard Renollet
sumber
18
Suka downvote tanpa komentar. Ini seharusnya tidak diizinkan. Bagaimana dengan solusi saya yang tidak berfungsi ??? Saya bahkan tidak peduli dengan suara, saya hanya ingin memposting pembaruan untuk pengguna VS2012-2013.
Howard Renollet
Sulit untuk menyaring semua kode yang dihasilkan (AssemblyInfo dll.) Sehingga Menganalisis / Menghitung Metrik Kode harus lebih disukai.
MKesper
4
Pekerjaan bagus, tapi tolong sebutkan tentang kotak centang Pakai Ekspresi Reguler di bawah bagian Temukan Opsi . Itu membuatnya jauh lebih mudah
Gogutz
@MKesper TAPI YANG TIDAK BEKERJA UNTUK C ++
d7samurai
Versi yang lebih sederhana jika tanpa XML, atau HTML ... ^ (? ([^ \ R \ n]) \ s) * [^ \ s +? /] + [^ \ N] * $.
LastBlow
80

Temukan tip ini: LOC dengan VS Temukan dan ganti

Bukan plugin meskipun jika itu yang Anda cari.

Mads Andersen
sumber
Saya suka yang ini, tapi saya pikir saya menemukan kesalahan kecil dalam ekspresi di sana. Untuk VB.Net saya pikir itu harus ^ ~ (: Wh @ ') ~ (: Wh @ \ #). + Dan untuk C # Saya pikir ^ ~ (: Wh @ //) ~ (: Wh @ \ {: Wh @) ~ (: Wh @ \}: Wh @) ~ (: Wh @ \ #). + Dengan begitu, baris komentar kosong dan arahan kompiler ditangani dengan benar. Itu bekerja lebih baik untuk saya dengan VB.NET, dan C # saya belum diuji.
user12861
^ ~ (: Wh @ //) ~ (: Wh @ \ {: Wh @) ~ (: Wh @ \}: Wh @) ~ (: Wh @ \ #) ~ (: Wh @ $). + Berakhir bekerja lebih baik untuk C #, saya mendapatkan beberapa baris yang hanya terdiri dari spasi kosong.
user12861
Apakah itu tidak menghitung semua baris komentar juga? Tolong, hanya baris KODE!
HydPhani
4
Inilah salah satu yang saya buat dengan yang bekerja di VS2012 (yang diposting sudah usang pada 2010) dan hanya menghitung baris kode. Itu mengecualikan semua komentar, menggunakan arahan, kurung kurawal, arahan xml, baris kosong, dll .... untuk memberi Anda kode yang benar hanya dihitung: ^ (?! (\ S **)) (?! (\ S * \ - \ - \>)) (?! (\ s * \ <\! \ - \ -))) (?! (\ s * \ n)) (?! (\ s ** \ /)) (?! (\ s * \ / *)) (?! (\ s * \ / \ / \ /)) (?! (\ s * \ / \ /)) (?! (\ s * \}))) (? ! (\ s * \ {)) (?! (\ ((menggunakan)))). * $
Howard Renollet
65

cloc adalah commandline yang sangat baik, berbasis Perl, dapat dieksekusi Windows yang akan memecah baris kosong, baris komentar, dan baris kode sumber, dikelompokkan berdasarkan format file.

Sekarang tidak akan berjalan secara khusus pada file solusi VS, tetapi dapat muncul kembali melalui direktori, dan Anda dapat mengatur filter nama file sesuai keinginan Anda.

Berikut contoh output dari halaman web mereka:

prompt> cloc perl-5.10.0.tar.gz
    4076 file teks.
    3883 file unik.                                          
    1521 file diabaikan.

http://cloc.sourceforge.net v 1.07 T = 10.0 s (251.0 file / s, 84566.5 baris / s)
-------------------------------------------------- -----------------------------
File bahasa kosong kode komentar skala 3 gen. equiv
-------------------------------------------------- -----------------------------
Perl 2052 110356 112521 309778 x 4.00 = 1239112.00
C 135 18718 22862 140483 x 0,77 = 108171,91
C / C ++ Header 147 7650 12093 44042 x 1.00 = 44042.00
Bourne Shell 116 3402 5789 36882 x 3.81 = 140520.42
Lisp 1 684 2242 7515 x 1.25 = 9393.75
buat 7 498 473 2044 x 2,50 = 5110,00
C ++ 10 312 277 2000 x 1,51 = 3020.00
XML 26 231 0 1972 x 1.90 = 3746.80
yacc 2 128 97 1549 x 1.51 = 2338.99
YAML 2 2 0 489 x 0.90 = 440.10
DOS Batch 11 85 50 322 x 0,63 = 202,86
HTML 1 19 2 98 x 1.90 = 186.20
-------------------------------------------------- -----------------------------
SUM: 2510 142085 156406 547174 x 2.84 = 1556285.03
-------------------------------------------------- -----------------------------

Skala setara generasi ketiga adalah perkiraan kasar tentang berapa banyak kode yang diperlukan dalam bahasa generasi ketiga . Tidak terlalu berguna, tapi tetap menarik.

Mark Rushakoff
sumber
1
Ini bagus dan super mudah digunakan. Jauh lebih mudah daripada solusi Find / Replace dan lebih jelas apa yang sebenarnya dilakukan daripada opsi VS Code Metrics. Hanya choco install clockemudian cloc .di dir solusi Anda. Pekerjaan selesai!
Rory
1
Saya mengunduh Windows EXE dari situs web CLOC dan menjalankannya di folder proyek situs web Visual Studio 2017 saya. Bekerja seperti pesona. Saya suka opsi --by-file-by-lang yang mencantumkan jumlah baris per file dan bahasa individual, diurutkan dari yang terbesar hingga yang terkecil.
humbads
42

Jawaban di sini sedikit ketinggalan zaman, mungkin dari vs 2008 waktu. Karena dalam versi Visual Studio yang lebih baru 2010/2012, fitur ini sudah built-in. Jadi tidak ada alasan untuk menggunakan ekstensi atau alat apa pun untuk itu.

Fitur untuk menghitung baris kode - Hitung Metrik. Dengan itu Anda dapat menghitung metrik Anda (LOC, Maintaince index, Cyclomatic index, Depth of inheritence) untuk setiap proyek atau solusi.

Cukup klik kanan pada solusi atau proyek di Solution Explorer,

masukkan deskripsi gambar di sini

dan pilih "Hitung metrik"

masukkan deskripsi gambar di sini

Data selanjutnya untuk analisis dan agregasi dapat diimpor ke Excel. Juga di Excel Anda bisa memfilter kelas yang dibuat, atau suara lain dari metrik Anda. Metrik ini termasuk Baris kode LOC dapat dikumpulkan juga selama proses pembuatan, dan dimasukkan dalam laporan pembangunan

Regfor
sumber
2
Visual Studio 2010 juga memiliki metrik ini. Sebenarnya tidak ada yang baru di VS2012 sama sekali.
Mike Chaliy
1
Yap, tetapi jawaban di sini berasal dari waktu vs 2008 dan sedikit ketinggalan zaman, mengapa menggunakan sesuatu atau menginstal beberapa ekstensi ketika itu fitur bawaan. Dan bahkan itu bukan fitur baru, banyak orang tidak mengetahuinya.
Regfor
@ MikeChaliy Mungkin kalimat pengantar kedua telah membingungkan Anda, jadi saya menulis ulang sedikit untuk menghindari kebingungan seperti itu.
Regfor
saya punya solusi n-layer tapi itu menampilkan kesalahan ini: "Pengecualian telah dilemparkan oleh target doa." Mengapa?
user197508
5
Ini bukan baris kode, tetapi Garis yang Dikompilasi (yaitu setelah diubah menjadi IL). Saya pikir Fermin sedang mencari jalur yang telah dikompilasi sebelumnya.
mikeschuld
29

Ekspresi reguler telah berubah antara VS2010 dan 2012, sehingga sebagian besar solusi ekspresi reguler di sini tidak lagi berfungsi

(^(?!(\s*//.+)))+(^(?!(#.+)))+(^(?!(\s*\{.+)))+(^(?!(\s*\}.+)))+(^(?!(\s*\r?$)))+

Akan menemukan semua baris yang tidak kosong, bukan hanya braket tunggal ('{' atau '}') dan bukan hanya #include atau preprosesor lainnya.

Gunakan Ctrl- shift- fdan pastikan ekspresi reguler diaktifkan.

Ekspresi reguler yang sesuai untuk VS 2010 dan yang lebih lama adalah

^~(:Wh@//.+)~(:Wh@\{:Wh@)~(:Wh@\}:Wh@)~(:Wh@/#).+
pengguna2711915
sumber
19

Dalam Visual Studio Team System 2008 Anda dapat melakukannya dari menu Analisis -> 'Hitung Kode Metrik untuk Solusi' dan itu akan memberi Anda jumlah baris seluruh solusi Anda (antara lain g )

Christopher Klein
sumber
12
Visual Studio Team System 2008 tidak berhasil menghitung kode yang tidak dikelola. ;)
Christian
11

Solusi sederhana adalah mencari di semua file. Ketik "*" saat menggunakan wildcard. Yang akan cocok dengan semua lini. Di akhir jendela hasil pencarian, Anda akan melihat garis semacam itu:

Matching lines: 563 Matching files: 17 Total files searched: 17

Tentu saja ini tidak terlalu baik untuk proyek-proyek besar, karena semua lini diolah dan dimuat ke dalam memori untuk dibuang di jendela hasil pencarian.

Referensi:

Sogartar
sumber
5

Saya lebih suka OxyProject Metrics VS Addin.

Selçuk Öztürk
sumber
4

Jelas alat lebih mudah, tapi saya merasa keren melakukan ini di PowerShell :)

Script ini menemukan semua referensi .csproj di file .sln, dan kemudian di dalam setiap file csproj, ia menemukan file yang disertakan untuk kompilasi. Untuk setiap file yang disertakan untuk kompilasi, ia menciptakan objek dengan properti: Solusi, Proyek, File, Baris. Ini menyimpan semua objek ini dalam daftar, dan kemudian mengelompokkan dan memproyeksikan data yang diperlukan.

#path to the solution file e.g. "D:\Code\Test.sln"
$slnFile = "D:\Code\Test.sln"


#results
$results = @()

#iterate through .csproj references in solution file
foreach($projLines in get-item $slnFile | Get-Content | Select-String '".*csproj')
{
    $projFile = [System.IO.Path]::Combine([System.IO.Path]::GetDirectoryName($slnFile), [regex]::Match($projLines,'[^"]*csproj').Value)
    $projFolder = [System.IO.Path]::GetDirectoryName($projFile)

    #from csproj file: get lines for files to compile <Compile Include="..."/>
    $includeLines = get-item $projFile | Get-Content | Select-String '<Compile Include'


    #count of all files lines in project
    $linesInProject = 0;
    foreach($fileLine in $includeLines)
    {
        $includedFilePath = [System.IO.Path]::Combine($projFolder, [Regex]::Match($fileLine, '"(?<file>.*)"').Groups["file"].Value)
        $lineCountInFile = (Get-Content $includedFilePath).Count      
        $results+=New-Object PSObject -Property @{ Solution=$slnFile ;Project=$projFile; File=$includedFilePath; Lines=$lineCountInFile }
    }
}

#filter out any files we dont need
$results = $results | ?{!($_.File -match "Designer")}


#print out:

"---------------lines per solution--------------"
$results | group Solution | %{$_.Name + ": " + ($_.Group | Measure-Object Lines -Sum).Sum}
"---------------lines per peoject--------------"
$results | group Project | %{$_.Name + ": " + ($_.Group | Measure-Object Lines -Sum).Sum}
anakic
sumber
3

Gunakan Menu-> Analisis -> opsi Hitung Kode Metrik di Visual Studio 2010 Ultimate.

sunil
sumber
3

Anda dapat menggunakan Metrik Kode Visual Studio PowerTool 10.0 . Ini adalah utilitas baris perintah yang menghitung beberapa metrik pada kode terkelola untuk Anda (termasuk baris kode). Anda bisa mendapatkan plugin VS 2010 yang membawa alat ke Visual Studio , dan membuatnya secepat memilih item menu dan mengklik "Analisis Solusi."

Travis
sumber
2

Anda dapat menggunakan alat SourceMonitor gratis

Memberikan banyak tindakan: Baris Kode, Hitungan Pernyataan, Kompleksitas, Kedalaman Blok

Memiliki keluaran grafis melalui grafik

Hovhannes Hakobyan
sumber
1

Saya datang dengan skrip PowerShell cepat dan kotor untuk menghitung baris dalam struktur folder. Ini hampir tidak memiliki fitur lengkap seperti beberapa alat lain yang dirujuk dalam jawaban lain, tapi saya pikir itu cukup baik untuk memberikan perbandingan kasar ukuran file kode relatif satu sama lain dalam proyek atau solusi.

Skrip dapat ditemukan di sini:

https://gist.github.com/1674457

Jesse Taber
sumber
0

Dalam Visual Studio 2015 pergi ke Menu Analisis dan pilih "Hitung Metrik Kode".

Atters
sumber