我在某个位置有.cs
个文件。如何读取文件并仅从中提取属性?是否可以在不编译代码的情况下提取属性?我尝试使用Assembly.LoadFile()
和Assembly.LoadFrom()
课程,但没有工作!这是示例代码
using System;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.ComponentModel;
using System.Xml.Serialization;
namespace namespace1.Did
{
public class Class1
{
#region Variables
private int _property1 = 14;
private int _property2 = 16;
#endregion
#region Methods
protected override void Initialize()
{
}
protected override void OnBarUpdate()
{
// Have some code in this which uses System.Drawing and System.Drawing.Drawing2D dll's
}
#endregion
#region Properties
[Description("Demo1")]
[GridCategory("Parameters")]
public int Property1
{
get { return _property1; }
set { _property1 = Math.Max(1, value); }
}
[Description("Demo2")]
[GridCategory("Parameters")]
public int Property2
{
get { return _property2; }
set { _property2 = Math.Max(1, value); }
}
#endregion
}
}
实际上我不想编译这段代码,因为如果我使用其他一些dll,我需要动态地将引用作为参数添加到Csharpcodeprovider类。如何仅从此.cs
文件中获取属性?
答案 0 :(得分:0)
您只需要将文件作为纯文本阅读,并使用RegEx或任何适合您需要的文本解析文本。既然你提到你不能共享文件结构(听起来很荒谬),你需要自己解决和过滤属性名称的机制。
答案 1 :(得分:0)
这样的比赛:
MatchCollection matches = Regex.Matches(input, @"public\s+(?<static>static\s+)?(?!class)(?<return>\w+)\s+(?<name>\w+)\s*\{", RegexOptions.Singleline);
foreach(Match match in matches)
{
string propertyName = match.Groups["name"].Value;
string returnType = match.Groups["return"].Value;
bool isStatic = match.Groups["static"].Success;
}
在大多数情况下,这将按预期工作,但是,它还将匹配注释中的属性以及同一源文件中其他类中的属性。 您可能还需要考虑静态之外的其他修饰符,如virtual,abstract,override和volatile。 如果你还需要获取GridCategory参数和Description参数,那么你真的需要麻烦,如果你需要知道是否有get和set参数。
但祝你好运。