如何从C#中的文件中获取或读取属性

时间:2014-11-10 05:42:33

标签: c# .net .net-assembly system.reflection

我在某个位置有.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文件中获取属性?

2 个答案:

答案 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参数。

但祝你好运。