ProcessStartInfo info = new ProcessStartInfo(@"D:\\ss\\Class1.cs");
我有一個這種類型的代碼,但我想「類名」例如,有多少班在我的解決方案的代碼將計算沒有階級的和通過c#中的代碼獲取名稱。如何獲得在整個解決方案類的類名稱,在c#
ProcessStartInfo info = new ProcessStartInfo(@"D:\\ss\\Class1.cs");
我有一個這種類型的代碼,但我想「類名」例如,有多少班在我的解決方案的代碼將計算沒有階級的和通過c#中的代碼獲取名稱。如何獲得在整個解決方案類的類名稱,在c#
如果我沒看錯,你要搜索所有存在於溶液中的類和獲取類的名字。
這裏是僞代碼
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;
}
}
}
}
這是一個非常天真的方法。 (1)可以有很多名字空間(2)類不必在名字空間下直接排成一行(3)並不是所有的類都是公有的(4)c#沒有考慮行,語句可以跨多個線。 – Rotem
是的你是對的。我其實在我的一個項目中採用了這種方法。我首先研究了應用程序的整個結構。有效。通過描述,他也可以使用上述技巧。 –
@Behroz我必須給出哪種類型的[FILE_NAME_HERE]? –
什麼你正在嘗試做的,不會涉及ProcessStartInfo
。有兩種方法可以解決這個問題:如果它被編譯,然後加載程序集並使用反射來檢查程序集(someAssembly.GetTypes()
將是一個好的開始)。可替代地,用於檢查源代碼(非編),則羅斯林CTP可用於加載一個項目/溶液/類文件,並檢查分析樹。
你想枚舉所有的代碼你的解決方案中的類?這與ProcessStartInfo有什麼關係? – ryadavilli
好,在炮擊的解決方案的Visual Studio爲每個類文件肯定是*不*答案... –
您需要的文件名稱或代碼中使用的類名? –