2012-02-06 3 views
0

.. 내가 하나의 이름 공간에 5 개 public 클래스를 포함하는의 App_Code에서 클래스 파일을 추가 한 나는 특히이 포함 된 모든 클래스 이름을 얻으려면문제. C#에서 GetTypes는() 내 웹 사이트에

네임 스페이스

는하여 default.aspx.cs 파일에서 내가

var q = from t in Assembly.GetExecutingAssembly().GetTypes() 
         where t.IsClass && t.Namespace == "Sample" 
         select t; 
       q.ToList().ForEach(t => Console.WriteLine(t.Name)); 

을 추가 한하지만 난 Assembly.GetExecutingAssembly().GetTypes() 어떻게 내가 위의 코드에서 'Sample' namespce에 액세스 할에 샘플 네임 스페이스를 찾을 수 없습니다?

감사하여 default.aspx.cs에서

+0

'Sample '은 전체 네임 스페이스입니까? 또한 페이지에서 찾고있는 유형 중 하나입니까? asp.net의 페이지는 종종 다른 어셈블리에서 필요에 따라 컴파일됩니다. –

답변

1

나는 문제가 여기 사실로 인해 수 있습니다 생각이 그 codebehind 파일에서 생성 된 임시 어셈블리에서 코드가 실행되고 있습니다. 예를 들어, - 단지 네임 스페이스와 클래스는 어셈블리에서 사용할 수있는 무엇을 덤프 시도

  • :

    이를 확인하려면

var q = from t in Assembly.GetExecutingAssembly().GetTypes() where t.IsClass select t; q.ToList().ForEach(t => Console.WriteLine(t.Namespace));

  • 실행중인 어셈블리 대신 공지 된 어셈블리를 이용하여 시도 - 예컨대 typeof(Sample.Class1).Assembly

또는 그냥 ... 대린의 대답 @ 읽어 ... 난 빠르게 입력하는 것을 배워야한다!

1

내가 문제의 그

을 추가 한 파일. 웹 응용 프로그램과 달리 웹 사이트가있는 경우 App_Code 안에 넣은 모든 코드는 런타임에 별도의 어셈블리로 동적으로 컴파일됩니다. 따라서 Assembly.GetExecutingAssembly()을 작성하면 App_Code에 코드가 포함 된 어셈블리와 다른 default.aspx WebForm에 대해 생성 된 어셈블리가 기본적으로 생성됩니다. 프로젝트에서 참조 된 모든 어셈블리를 루프하여 유형을 찾을 수 있습니다.

이 어셈블리 목록을 얻으려면 현재 응용 프로그램 도메인에서 GetAssemblies 메서드를 사용할 수 있습니다.

또 다른 가능성은 어셈블리를 얻기 위해 당신은 순서대로 App_Code 폴더에 포함 된 알고있는 몇 가지 알려진 유형을 사용하는 것입니다

var assembly = typeof(Some_Type_That_Is_Declared_In_App_Code).Assembly; 
var q = 
    from t in assembly.GetTypes() 
    where t.IsClass && t.Namespace == "Sample" 
    select t; 
+0

답장을 보내 주셔서 감사합니다.하지만 어떻게 Default.aspx.cs 파일의 Sample 네임 스페이스에서 모든 클래스 이름을 얻을 수 있습니까 ?? –

+0

@ ghanshyam.mirani를 사용하면 프로젝트에서 'AppDomain.CurrentDomain.GetAssemblies'를 사용하여 참조 된 모든 어셈블리를 가져온 다음 각 어셈블리에 대해 코드를 실행하여 지정된 유형을 찾을 수 있습니다. 또 다른 가능성은 App_Code에서 알려진 형식을 사용하여 어셈블리를 가져 오는 것입니다. –

관련 문제