2010-08-05 3 views
1

내 콘솔 앱에서 참조 된 어셈블리를 반복하려고합니다. 다른 프로젝트에서 BuildManager.GetReferencedAssemblies를 사용하여이 작업을 수행했지만 콘솔 응용 프로그램에서 InvalidOperationException이 발생합니다.이 메서드는 응용 프로그램의 시작 전 초기화 단계에서 호출 할 수 없습니다..net console app lifecycle - BuildManager.GetReferencedAssemblies에서 시작 전 초기화 오류가 발생하는 경우

제 생각에 콘솔 앱에서 실행을 지연시킬 방법이 없습니다. 당신은 정적 보이드 Main에서 그것을 수행하거나, 전혀하지 않습니다 ... 누구든지 이것을 피하는 방법에 대한 제안이 있습니까?

답변

0

AppDomain.CurrentDomain.GetAssemblies()가 트릭을 제대로 수행하지 못했습니다. 비록 그들이 참조되었지만 포함되지 않은 일부 어셈블리가있었습니다. 내가 한 일은이었다이 :

allAssemblies = (from name in Assembly.GetEntryAssembly().GetReferencedAssemblies() 
     select Assembly.Load(name)).ToList(); 

이 AppDomain.CurrentDomain.GetAssemblies()만큼 어셈블리를 반환하지 않은,하지만 내가 필요로하는 사람들을 돌려 보냈다. 불일치가 있었던 이유를 모르겠습니다. Cerebrate, 답장을 보내 주셔서 감사합니다. 너는 내가 필요한 궤적에서 나를 붙 잡았고 나는 너의 대답을지지했다.

+0

이 대답은 다음과 같은 이유로 나에게 도움이되지 않습니다. http://stackoverflow.com/a/2479400/178143 – Ted

6

System.Web.Compilation 네임 스페이스의 BuildManager.GetReferencedAssemblies()?

내가 알고있는 한, ASP.NET 전용이므로 콘솔 앱에서는 작동하지 않습니다. (또는 Windows 응용 프로그램에서도 마찬가지입니다.)

그래서 첫 번째 하위 질문은 BuildManager.GetReferencedAssemblies의 특수 기능이 필요한지 여부, 즉 BuildManager.GetReferencedAssemblies의 특수 기능이 필요한지 아닌지입니다. ASP.NET 특정 어셈블리를 참조하는 방법 -뿐만 아니라 모든 어셈블리 응용 프로그램 참조를하지만,이 참조하는 모든 어셈블리, 경우 당신이 무슨 말을 하려는지 등 등

(Difference between AppDomain.GetAssemblies and BuildManager.GetReferencedAssemblies 참조) 할 일은 .exe가 직접 참조하는 어셈블리의 목록만으로도 잘 작동합니다 (플러스 또는 동적으로로드 된 코드) itly) 자체를 참조하는 참조 된 어셈블리로 호출하여, 가장 쉬운 방법은 바로 이것이다 :

// Get all currently loaded assemblies. 
var assemblies = AppDomain.CurrentDomain.GetAssemblies(); 

그렇지 않다면에서 간단한 방법이 없기 때문에 당신을 위해 복잡 것 곳이 있습니다. NET을 사용하여 앱이 간접적으로 참조하는 모든 어셈블리의 목록을 가져옵니다. 이론적으로, Assembly.GetReferencedAssembly()에서 Assembly.GetReferencedAssembly()를 재귀 적으로 호출하는 코드를 작성한 다음이 코드에서 얻은 모든 결과에 대해 작성한 다음, 중복 결과를 버리는 모든 결과에 대해 결국 무한 루프에 빠지게되고 앱에 의해 직접 또는 간접적으로 정적으로 참조되는 모든 어셈블리로 끝날 것입니다.

(만약 당신이 동적으로 어셈블리를 참조하는 경우, AppDomain.Load() 또는 일부 등으로 말한다, 그것은 그들을 나열하지 않습니다.하지만, 나도 BuildManager.GetReferencedAssemblies()를하지 생각하지 않는다.)

+0

때로는 DLL이 처음부터로드되지 않습니다.이 대답은 입니다. http://stackoverflow.com/a/2479400/178143 따라서 BuildManager와 같은 것이 때때로 필요합니다. – Ted