2012-12-06 27 views
-1

可能重複:
Parser for C#C#讀取實體和讀取其屬性

在C#中如何將一個文件夾中從文件中讀取(或多個)實體和讀取其屬性。例如在文件夾Companies.Entites如果有三個實體的文件說

Company.cs 
Office.cs 
Contacts.cs 

那麼如何讀取每個文件並處理其屬性逐個。

+1

你嘗試去做呢?告訴我們你的嘗試。 – Zabavsky

+0

我沒有試過,因爲我不知道正確的方法。只知道它可以通過反射來完成。我只想簡單地讀一個文件找到類名,然後逐個處理每個屬性。在此先感謝 –

+0

你是什麼意思的屬性?類屬性?文件屬性? –

回答

1

閱讀你的源文件:

List<string> sources = new List<string>(); 

foreach (string file in Directory.GetFiles(path, "*.cs"))    
    sources.Add(File.ReadAllText(file)); 

創建編譯參數:

CompilerParameters parameters = new CompilerParameters(); 
parameters.GenerateExecutable = false; 
parameters.GenerateInMemory = true; 

添加對所需的庫:

parameters.ReferencedAssemblies.Add("mscorlib.dll"); 
parameters.ReferencedAssemblies.Add("System.dll"); 
// etc 

編譯源代碼在內存中的裝配:

var provider = new CSharpCodeProvider(); 
var results = provider.CompileAssemblyFromSource(parameters, sources.ToArray()); 

驗證編譯成功:

if (results.Errors.HasErrors) 
{ 
    // display results.Errors 
} 

而且使用反射來讀取編譯類型的信息:

var assembly = results.CompiledAssembly; 
var types = assembly.GetTypes(); 

foreach (Type type in types) 
{ 
    string name = type.Name; 
    var properties = type.GetProperties(); // public properties 
    // etc 
} 
+0

編譯成功了,但在線上給予了豁免var types = assembly.GetTypes();無法加載一個或多個請求的類型。檢索LoaderExceptions屬性以獲取更多信息。 –

+0

無法加載文件或程序集「SaiAdinath.Core.Entities,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null」或其某個依賴項。該系統找不到指定的文件。 融合日誌: ===預綁定狀態信息=== LOG:用戶= IMANDIASIA \ RAJESH LOG:DisplayName的= SaiAdinath.Core.Entities,版本= 1.0.0.0,文化=中性公鑰=空 (完全指定) LOG:Appbase = file:/// D:/ Data/New1/TestProject/ReadClassAndProperty/bin/Debug/ LOG:初始私有路徑= NULL 調用程序集:(未知)。 –

+1

非常感謝。該問題已解決,因爲我在bin \ debug文件夾中複製了所需的dll。再次感謝@lazyberezovsky –