2014-11-10 5 views
0

위치에 .cs 파일이 있습니다. 파일을 읽고 파일에서 속성 만 추출하려면 어떻게해야합니까? 코드를 컴파일하지 않고 속성을 추출 할 수 있습니까? Assembly.LoadFile()Assembly.LoadFrom() 클래스로 시도했지만 작동하지 않습니다 !!! 여기C에서 파일에서 속성을 가져 오거나 읽는 방법

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

재산 이름 만 필요합니까? 또는 코드에서 해당 클래스의 인스턴스를 만들고 속성을 사용하려고합니까? – danish

+0

나는 내 친구에게 경고한다 : 그것은 어두운면의 길 중 하나이다! 텍스트, 주석, 매개 변수, 이름 지정 등으로 많은 문제에 직면해야하며, 결국에는 다른 케이스 또는 C#의 차세대에서는 작동하지 않을 수 있습니다! 당신이 구현할 수있는 가장 좋은 것은 기존의 C# 컴파일러가 될 것입니다. 왜 그렇게 사용하지 않고 많은 시간과 노력과 두통을 덜어 야합니까? – Alireza

+1

"C# roslyn"은 (는) 검색을 시작하기에 좋습니다 ... –

답변

0

일반 텍스트로 파일을 읽고 RegEx를 사용하여 텍스트를 구문 분석하거나 필요에 따라 구문을 분석하면됩니다. 파일 구조를 공유 할 수 없다는 말을하기 때문에 (우스운 말처럼) 당신은 혼자 속성 이름을 파싱하고 필터링하는 메커니즘을 찾아야 할 것입니다. 이 같은

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 매개 변수와 설명 매개 변수를 가져와야하는 경우 get 및 set 매개 변수가 있는지 알아야 할 경우에도 문제가 발생합니다.

하지만 행운을 빈다.

관련 문제