2013-01-02 56 views
0
ProcessStartInfo info = new ProcessStartInfo(@"D:\\ss\\Class1.cs"); 

我有一個這種類型的代碼,但我想「類名」例如,有多少班在我的解決方案的代碼將計算沒有階級的和通過c#中的代碼獲取名稱。如何獲得在整個解決方案類的類名稱,在c#

+2

你想枚舉所有的代碼你的解決方案中的類?這與ProcessStartInfo有什麼關係? – ryadavilli

+2

好,在炮擊的解決方案的Visual Studio爲每個類文件肯定是*不*答案... –

+2

您需要的文件名稱或代碼中使用的類名? –

回答

0

如果我沒看錯,你要搜索所有存在於溶液中的類和獲取類的名字。

這裏是僞代碼

1-搜索*的.cs文件中的所有解決方案。

string[] files = System.IO.Directory.GetFiles(path, "*.txt"); 

2-遍歷所有*的.cs文件和搜索以下模式

namespace [WhatEver the name is] 
{ 
    public class [Class Name] 

這裏是你可以使用

foreach(string path in files) 
{ 
    string[] lines = System.IO.File.ReadAllLines(path); 
    for (int i=0; i < lines.Count(); i++) 
      { 
       if(lines[i].ToLower().Contains("namespace")) 
       { 
        int j = i + 2; 
        if(lines[j].ToLower().Contains("public class")) 
        { 
         string lClassname = lines[j].Replace("public class",""); 
         //Save the class name here 
         break; 
        } 
       } 
      } 
} 
+0

這是一個非常天真的方法。 (1)可以有很多名字空間(2)類不必在名字空間下直接排成一行(3)並不是所有的類都是公有的(4)c#沒有考慮行,語句可以跨多個線。 – Rotem

+0

是的你是對的。我其實在我的一個項目中採用了這種方法。我首先研究了應用程序的整個結構。有效。通過描述,他也可以使用上述技巧。 –

+0

@Behroz我必須給出哪種類型的[FILE_NAME_HERE]? –

3

什麼你正在嘗試做的,不會涉及ProcessStartInfo。有兩種方法可以解決這個問題:如果它被編譯,然後加載程序集並使用反射來檢查程序集(someAssembly.GetTypes()將是一個好的開始)。可替代地,用於檢查源代碼(非編),則羅斯林CTP可用於加載一個項目/溶液/類文件,並檢查分析樹。

相關問題