Bir Visual Studio çözümünde kod satırlarını nasıl sayıyorsunuz?


800

Tüm çözümdeki kod satırı sayısını bulmak mümkün müdür? MZ-Tools'u duydum ama açık kaynak eşdeğeri var mı?


24
Çok yardımcı olmadığını kabul ediyorum ama eğer yönetim bunu istiyorsa ...
Fermin

33
LoC sadece bir metriktir ve 2 durumda partikül olarak araya girmektedir: 1) kod tabanının ne kadar büyük olduğu hakkında bir fikir edinmek için, yani yeni bir takıma katıldığınızda 2) kod tabanınızı daha kompakt hale getirmeye çalışırken ilerlemenizi ölçmek için
Piotr Owsiak

191
Buradaki bazı insanlar, kod satırlarını saymanın iyi düşünmeden faydasız olduğunu söylüyor. Genellikle en aza indirilmesi gereken bir metrik olduğu için oldukça kullanışlıdır. Çözümün karmaşıklığını (verimlilik değil) ölçmenin basit bir yoludur ve sorunun basit olduğu biliniyorsa, daha fazla kod satırı, genellikle kalite düşer. Başka bir şey, insanlar sadece sorunun kötü bir soru olduğunu söylemekse yanıt vermekten rahatsız oluyorlar mı? Bir öğretmen size sorunuzu söylerse ne sorulmamalı?

77
VS2010'da tüm kod satırlarını ve diğer değerleri de sayan yerleşik bir araç vardır: Görünüm -> Diğer Windows -> Kod metrikleri sonuçlarına gidin. Köşede bir takvime benzeyen küçük bir düğme, tıklayın, araç ipucu Ruh için kod metriklerini hesapla ve VS'nin bir şey yapmasına izin vermeli.
user959631

64
Kişinin size her zaman neden kod saymak istediğini söylemesine gerek yoktur. Soru basitçe ifade edildiğinde, neden ilgisiz olduğu konusudur. Sadece sorusunu cevapla. Bundan nefret ediyorum. Neden açıkça ihtiyaç duyduğunuzu sormak için zamanlar var ve o zaman istemediğiniz zamanlar var (kişisel olarak bir ihtiyaç görmediğinizde ... ve posteri kibirle püskürttüğünüzde).
PositiveGuy

Yanıtlar:


524

Visual Studio 2010 Ultimate şu yerleşik özelliklere sahiptir:

Analiz Et → Kod Metriklerini Hesapla


12
Ultimate ve Premium, sanırım
Stefan Dragnev

39
Uyarı: Bu, yalnızca satır sayısının yanı sıra başka pek çok şey yapar. Ayrıca, "Hesaplanabilirlik Endeksi", "Siklomatik Karmaşıklık", "Kalıtım Derinliği" ve "Sınıf Bağlantısı" listeler. Bunun anlamı, kod tabanınız özellikle büyükse, saatlerce beklemiş olmanızdır. Tüm istediğiniz satır sayısı ise, orada çok daha hızlı çözümler var.
Darrel Hoffman

4
Ayrıca vs2012 ultimate =)
oCcSking

9
VS 2013 Analiz etti -> Kod metriklerini hesapla
Dinesh Rajan

42
Çok kötü, bu yerel C ++ projeleriyle çalışmaz (en azından VS2013'te çalışmaz).
Cameron

844

Powershell'i bunun için yararlı buldum . LoC'yi yine de oldukça sahte bir metrik olarak görüyorum, bu yüzden daha resmi bir şey gerekli olduğuna inanmıyorum.

Ufacık bir çözüm dizininden:

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

Bu, tüm çözümün .cs ve .xaml dosyalarındaki boş olmayan satırları sayar. Daha büyük bir proje için sadece farklı bir uzantı listesi kullandım:

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

Tek bir komut satırı bunu uyguladığında neden tüm uygulamayı kullanasınız? :)


19
(Şimdiye kadar hat sayımı vermem istendiğinde, üst yönetim, yurt içi sitemizi kapatabilmeleri için denizaşırı tüm ürünlerimizi yurtdışına taşımak için ne kadar zaman alacağını bulmaktı.)
Greg D

8
(Evet, bu kod oluşturulmuş dosyaları ve yorumları içerir. Hayır, bu beni rahatsız etmiyor. Tasarımcılar, gen'd kodu ve yorumların da muhafaza edilmesi gerekiyor.)
Greg D

27
çok güzel, powershell'i tamamen unuttum. cmd için varsayılan yedek olmalı
lubos hasko

4
Mükemmel! Bitiş yorumunuz gerçekten özetliyor, bu önemsiz bir görev, öyleyse neden önemsiz olmayan bir araç kullanıyorsunuz? Gerçi gerçekten VS'nin tüm sürümlerine dahil edilmesi gerektiğini düşünüyorum.
Sune Rievers

13
XAML için oluşturulan yedekleme dosyalarını hariç tutmak istiyorsanız, bir -exclude anahtarı ekleyebilirsiniz: (dir -exclude *.g.cs -include *.cs,*.xaml -recurse | select-string .).Count
EZ Hart

349

Ctrl+ Shift+ Kullandım F. Ardından, \narama kutusuna a yazın ve normal ifadeler kutusunu etkinleştirin. Daha sonra bulma sonuçlarında, ekranın sonunda aranan dosya sayısı ve kod satırları bulunur.

[^\n\s]\r\nBoş ve yalnızca boşluk içeren satırları atlamak için kullanabilirsiniz (yorumlarda Zach'e verilen krediler).


16
Bu çözüm yanlış satırlar, yorumlar, belgeler ve bölünmüş ifadeler içerir. Birçok uygulama için bunlar kod satırı olarak sayılmamalıdır.
Jay Baxter

1
Her ne kadar biraz yanlış olsa da (kodunuzda gerçekten \ n kullanıyorsanız, bu satır iki kez sayılır), 3. taraf aracı olmadan kod satırlarının ROM'una ihtiyacınız varsa yine de en iyi cevaptır
Joseph Duty

1
Ayrıca bir seçenek seçerek belirli bir dosya türü seçebilirsiniz Look at these file types:sadece feryat açılan enable regular expressions box.
Moshii

1
Çok küçük projeler için çalışır ... 100 milyon satırlık kodunuz olduğunda bu biraz zaman alacaktır.
bataklık

11
[^\n\s]\r\nboşluklar olsa bile boş satırlar atlar.
Zach Mierzejewski

219

VS2005, 2003 ve 2002 için açık kaynaklı bir hat sayacı burada mevcuttur:

http://www.wndtabs.com/

Ayrıca burada Codeproject üzerinde kod ile birlikte VS addin sayma bir çizgi oluşturma tartışması var, burada

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

Ayrıca Slick Edit Gadgets'ın güzel bir satır sayacı var, burada:

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

ve Microsoft Visual Studio Team System 2008 iyi bir satır sayacı içerir.

Yine de unutmayın:

Programlama ilerlemesini kod satırları ile ölçmek, uçak yapım ilerlemesini ağırlık olarak ölçmek gibidir. Bill Gates


1
Genellikle kod satırlarını saymak Sadece Düz Aptallıktır ve miktar kalite anlamına gelmez. Ancak, havaya 545.000 lb (545.000 lb !!) Dreamliner koyarak büyük bir ekip, garajımda tek elle inşa ettiğim ultraliti piyasaya sürmekten tamamen farklı bir başarı. Ve Windows'daki kod satırlarının sayısını düşünürseniz, belki Bay Bill bunu genellikle alındığından farklı bir şekilde kastetti ...?
Koşulsuz Olarak

18
Bunların hiçbiri Visual Studio 2010 için geçerli görünmüyor ve slickedit bağlantısı bozuk.
MGOwen

57
Visual Studio 2010 Ultimate'da LOC özelliğini "Analiz> Kod metrikleri" altında bulabilirsiniz. Umarım doğru çevirmiştim. Almanca versiyonum var. Orada "Analiz"> "Codemetriken berechnen"
OneWorld

2
Visual Studio 2012 için LoC metriği ANALYZE> Çözüm için Kod Metriklerini Hesapla
tetri

2
Ayrıca, VS2012 bu özelliği hem Ultimate hem de Premium sürümlerde (ve şimdi de Professional'da) içerir.
SWalters - Monica'yı

81

İşte "Bul" seçeneğini yapmak isteyenler için Visual Studio 2012/2013/2015 için bir güncelleme .

"Bul" kutusuna aşağıdaki RegEx girin. Lütfen "Normal İfadeleri Kullan" seçeneğini seçtiğinizden emin olun. İhtiyaçlarınıza bağlı olarak arama seçeneğini "Geçerli Proje" veya "Tüm Çözüm" olarak değiştirin. Şimdi "Tümünü Bul" u seçin. Alt kısmında Bul Sonuçları penceresinde, kod sayımı hatları "Eşleştirme Çizgiler" göreceksiniz.


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

Bu RegEx aşağıdaki öğeleri içermez:


Yorumlar

// This is a comment

Çok Satırlı yorumlar (satırların her satırın önünde * işaretiyle doğru yorumlandığı varsayılarak)

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

Intellisense için XML

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

HTML Yorumları:

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

İfadeleri kullanma:

using System;
using System.Web;

Kıvırcık parantez açma:

{

Kıvırcık parantezlerin kapatılması:

}

Not: kaşlı ayraçlar arasındaki herhangi bir şey aramaya dahil edilir, ancak bu örnekte 18 gerçek boş olmayan satır yerine yalnızca 4 satır kod sayılır:

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

Bunu önceki seçeneklerden çok daha doğru bir LOC sayımı sağlamak için yarattım ve paylaşacağımı düşündüm. Patronlar LOC sayımlarını sever, bu yüzden bir süre onunla sıkıştım. Umarım başka biri bunu faydalı bulabilir, herhangi bir sorunuz varsa veya işe koyulmak için yardıma ihtiyacınız varsa bana bildirin.


18
Yorum yapmadan downvote seviyorum. Buna izin verilmemeli. Çözümüm ne işe yaramıyor ??? Oyları bile önemsemiyorum, sadece VS2012-2013 kullanıcıları için bir güncelleme göndermek istedim.
Howard Renollet

Üretilen tüm kodu (AssemblyInfo vb.) Filtrelemek zor, bu nedenle Kod Metriklerini Analiz Et / Hesapla tercih edilmelidir.
MKesper

4
İyi iş çıkardınız, ancak Seçenekleri Bul bölümünün altındaki Normal İfadeyi Kullan onay kutusundan bahsedin . Çok daha kolay
Gogutz

@MKesper AMA C ++ İÇİN ÇALIŞMAYAN
d7samurai

XML veya HTML ... ^ (? ([^ \ R \ n]) \ s) * [^ \ s +? /] + [^ \ N] * $ ise daha basit bir sürüm.
LastBlow

80

Bu ipucu bulundu: VS ile LOC Bul ve değiştir

Aradığınız bir eklenti olsa thats ne arıyorsun.


Bunu seviyorum, ama sanırım oradaki ifadede küçük bir hata buldum. VB.Net için ^ ~ (: Wh @ ') ~ (: Wh @ \ #). + Ve C # için bence ^ ~ (: Wh @ //) ~ (: Wh @ \ {: Wh @) ~ (: Wh @ \}: Wh @) ~ (: Wh @ \ #). + Bu şekilde boş yorum satırları ve derleyici yönergeleri düzgün şekilde ele alınır. Zaten VB.NET ile benim için daha iyi çalıştı ve C # test etmedim.
user12861

^ ~ (: Wh @ //) ~ (: Wh @ \ {: Wh @) ~ (: Wh @ \}: Wh @) ~ (: Wh @ \ #) ~ (: Wh @ $). + Sona erdi C # için daha iyi çalışıyor, sadece boşluktan oluşan bazı satırlar alıyordum.
user12861

Yorum yapılan tüm satırları da saymıyor mu? Sadece CODE satırları lütfen!
HydPhani

4
İşte VS2012 (2010 itibariyle yayınlanmıştır) eskimiş olan ve sadece kod satırlarını sayar. Size sadece gerçek bir kod vermek için direktifleri, kıvırcık parantezleri, xml direktiflerini, boş satırları, vb kullanarak tüm yorumları hariç tutar: ^ (?! (\ S **)) (?! (\ S * \ - \ -?! \>)) ((\ s * \ <\ \ -! \ -?!?!)) ((\ s * \ n)) ((\ s ** \ /)) (?! (\ s * \ / *)) (?! (\ s * \ / \ / \ /)) (?! (\ s * \ / \ /)) (?! (\ s * \})) (? ! (\ s * \ {)) (?! (\ s (kullanılıyor))). * $
Howard Renollet

65

cloc , dosya biçimlerine göre gruplandırılmış boş satırları, yorum satırlarını ve kaynak kod satırlarını parçalayacak mükemmel bir komut satırı olan Perl tabanlı, Windows tarafından yürütülebilir.

Şimdi özellikle bir VS çözüm dosyasında çalışmaz, ancak dizinler aracılığıyla geri çekilebilir ve uygun gördüğünüz gibi dosya adı filtreleri ayarlayabilirsiniz.

Web sayfalarından örnek çıktı:

komut istemi> cloc perl-5.10.0.tar.gz
    4076 metin dosyaları.
    3883 benzersiz dosya.                                          
    1521 dosya yoksayıldı.

http://cloc.sourceforge.net v 1.07 T = 10.0 s (251.0 dosya / s, 84566.5 satır / s)
-------------------------------------------------- -----------------------------
Dil dosyaları boş yorum kodu ölçek 3. nesil. eşdeğ
-------------------------------------------------- -----------------------------
Perl 2052 110356 112521 309778 x 4.00 = 1239112.00
C 135 18718 22862 140483 x 0.77 = 108171.91
C / C ++ Üstbilgisi 147 7650 12093 44042 x 1.00 = 44042.00
Bourne Kabuğu 116 3402 5789 36882 x 3.81 = 140520.42
Lisp 16742242 7515 x 1,25 = 9393,75
7 498473 2044 x 2.50 = 5110.00
C ++ 10312277 2000 x 1,51 = 3020,00
XML 26231 0 1972 x 1.90 = 3746.80
yacc 2128 97 1549 x 1.51 = 2338.99
YAML 2 2 0489 x 0.90 = 440.10
DOS Toplu İş 11 85 50322 x 0.63 = 202.86
HTML 1 19 2 98 x 1,90 = 186,20
-------------------------------------------------- -----------------------------
TOPLAM: 2510 142085 156406 547174 x 2,84 = 1556285.03
-------------------------------------------------- -----------------------------

Üçüncü nesil eşdeğer ölçek, üçüncü nesil bir dilde ne kadar kod alacağının kabaca bir tahminidir . Çok yararlı değil, ama yine de ilginç.


1
Bu harika ve süper kullanımı kolaydır. Bul / Değiştir çözümlerinden çok daha kolay ve VS Kod Metrikleri seçeneğinden gerçekte ne yaptığını daha net. Sadece choco install clocve sonra cloc .sizin çözüm dir. İş bitmiş!
Rory

1
Windows EXE dosyasını CLOC web sitesinden indirdim ve Visual Studio 2017 web sitesi proje klasörümde çalıştırdım. Bir cazibe gibi çalıştı. Her dosya ve dil için satır sayısını listeleyen - by-lan-by-lang seçeneğini seviyorum.
humbad

42

Buradaki cevaplar biraz güncel değil, 2008'e kıyasla olabilir. Çünkü daha yeni Visual Studio 2010/2012 sürümlerinde, bu özellik zaten yerleşiktir. Bu nedenle, bunun için herhangi bir uzantı veya araç kullanmanın bir nedeni yoktur.

Kod satırlarını sayma özelliği - Metrikleri hesaplayın. Bununla beraber, her proje veya çözüm için metriklerinizi (LOC, Bakım endeksi, Siklomatik indeks, kalıtım derinliği) hesaplayabilirsiniz.

Solution Explorer'da çözüme veya projeye sağ tıklayın,

resim açıklamasını buraya girin

ve "Metrikleri hesapla" yı seçin

resim açıklamasını buraya girin

Daha sonra analiz ve toplama verileri Excel'e aktarılabilir. Ayrıca Excel'de, oluşturulan sınıfları veya metriklerinizdeki diğer parazitleri filtreleyebilirsiniz. LOC kod satırı da dahil olmak üzere bu metrikler derleme işlemi sırasında da toplanabilir ve derleme raporuna dahil edilebilir


2
Visual Studio 2010 da bu metriklere sahiptir. Aslında VS2012'de yeni bir şey yok.
Mike Chaliy

1
Evet, ancak burada cevaplar 2008'e kıyasla ve biraz güncel değil, neden yerleşik bir özellik olduğunda bir şey kullanmalı veya bir uzantı yüklemelisiniz. Ve bu pek çok insanın bilmediği yeni bir özellik değil.
Regfor

@MikeChaliy İkinci giriş cümlesi sizi karıştırdı, bu yüzden bu karışıklığı önlemek için biraz yeniden yazdım.
Regfor

n-katmanlı bir çözüm var ama bu hatayı görüntüler: "İstisna bir çağırma hedefi tarafından atıldı." neden?
user197508 16:12

5
Bu kod satırları değil, Derlenmiş Satırlardır (yani IL'ye dönüştürüldükten sonra). Bence Fermin önceden derlenmiş satırlar arıyordu.
mikeschuld

29

Düzenli ifadeler VS2010 ve 2012 arasında değişti, bu nedenle buradaki düzenli ifade çözümlerinin çoğu artık çalışmıyor

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

Boş olmayan tüm satırları bulur, sadece tek bir parantez ('{' veya '}') değildir, sadece #include veya başka bir önişlemci değildir.

Ctrl- shift- kullanın fve normal ifadelerin etkinleştirildiğinden emin olun.

VS 2010 ve daha eski için karşılık gelen düzenli ifade

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

19

Visual Studio Team System 2008'de Analiz -> 'Çözüm için Kod Metriklerini Hesapla' menüsünden yapabilirsiniz ve size tüm çözümünüzün bir satır sayısını verecektir (diğer şeylerin yanı sıra g )


12
Visual Studio Team System 2008 yönetilmeyen kodu saymayı başaramaz. ;)
Christian


11

Basit bir çözüm, tüm dosyalarda arama yapmaktır. Joker karakterler kullanırken "*" yazın. Hangi tüm satırları eşleşir. Sonuçları bul penceresinin sonunda bir tür çizgi görmelisiniz:

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

Tabii ki bu büyük projeler için çok iyi değildir, çünkü tüm hatlar sonuç bul penceresinde dağıtılacak şekilde işlenir ve belleğe yüklenir.

Referans:




4

Açıkçası araçlar daha kolay, ama bunu powershell'de yapmaktan hoşlanıyorum :)

Bu komut dosyası, .sln dosyasındaki tüm .csproj başvurularını bulur ve daha sonra her csproj dosyası içinde derleme için bulunan dosyaları bulur. Derleme için eklenen her dosya için şu özelliklere sahip bir nesne oluşturur: Çözüm, Proje, Dosya, Çizgiler. Tüm bu nesneleri bir listede saklar ve ardından verileri gerektiği gibi gruplandırır ve yansıtır.

#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}


3

Visual Studio 2010 Ultimate'da Menü-> Analiz Et -> Kod Metriklerini Hesapla seçeneğini kullanın.





2

SourceMonitor ücretsiz aracını kullanabilirsiniz

Çok fazla önlem verir: Kod Satırı, Bildirim Sayısı, Karmaşıklık, Blok Derinliği

Grafikler üzerinden grafik çıktıları vardır



1

Bir klasör yapısındaki satırları saymak için hızlı ve kirli bir powershell betiği ile geldim. Neredeyse diğer cevaplarda atıfta bulunulan diğer araçlar gibi tam özellikli değil, ancak bir proje veya çözümde birbirine göre kod dosyalarının boyutunun kabaca bir karşılaştırmasını sağlamak için yeterince iyi olduğunu düşünüyorum.

Komut dosyası burada bulunabilir:

https://gist.github.com/1674457



0

Visual Studio 2015'te Analiz menüsüne gidin ve "Kod Metriklerini Hesapla" yı seçin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.