2012-12-06 31 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 –