2012-03-06 5 views
2

리플렉션을 사용하여 어셈블리를 검색하면 어셈블리를 찾아 캐시합니다. 어셈블리를 찾지 못하면 올바른 위치에 추가 한 후에도 어셈블리를 찾을 수 없으므로이를 알 수 있습니다. 어셈블리를 찾고 제거하면 어셈블리가 발견되어 캐시 된 어셈블리를 계속 사용합니다..NET의 리플렉션 캐시를 지우려면 어떻게해야합니까?

나는이 문제를 가지고있는 유일한 사람이 아니에요 알고 Clear .Net Reflection cache

내가 어셈블리를 얻기 위해 사용하고 코드는 다음과 같다 - 나는이 호출 할 때마다 (나 자신을 캐시하지 않음)합니다

내가 알고 싶은 것은 프로세스를 다시 시작하지 않고 리플렉션 캐시를 지울 수있는 방법이 있는지입니다. 어떤 도움이라도 대단히 감사하겠습니다.

미리 감사드립니다.

+0

'Assembly.LoadFrom'을 사용 하시겠습니까? –

+0

Assembly.Load에 무엇을 전달하고 있습니까? 끈? 바이트 배열? AssemblyName 인스턴스? – Fernando

+0

@Fernando - "ClassLibrary1, Version = 1.0.0.0, Culture = Neutral, PublicKeyToken = d48aa85d4ceaf047" – zimdanen

답변

4

.Net에서 어셈블리를 언로드 할 수는 없지만 어셈블리가로드되는 앱 도메인을 종료 할 수는 있습니다.

+3

전적으로 맞지 않습니다. 언로드 할 수있는 특별한 종류의 어셈블리가 있습니다. 그러나 파일에서로드 된 어셈블리는 언로드 할 수 없습니다. http://msdn.microsoft.com/en-us/library/dd554932.aspx AppDomains간에 공유되는 방식으로 어셈블리를로드 할 수도 있으며, 어셈블리 중 하나를 언로드했기 때문에 언로드되지 않을 수도 있습니다. – CodesInChaos

+0

"어셈블리로드 리플렉션 방출은 수집 가능한 어셈블리를로드하는 데 지원되는 유일한 메커니즘입니다. 다른 형태의 어셈블리로드로로드 된 어셈블리는 언로드 할 수 없습니다." 링크 된 기사에서. 따라서 언로드하려면 어셈블리를 동적으로 생성해야합니다. 두 분 모두에게 감사드립니다. 제가하려는 것은 불가능합니다. – zimdanen

+0

언로드 개념은로드되지 않은로드 개념과는 조금 다릅니다. 캐시가 한 번 실패하면 다시 캐시하려고 시도하지 않습니다. (아마도 같은 개념의 부분 일 것이다 - 그것이 무엇인지 상관없이 결과를 유지할 것이다.) – zimdanen

관련 문제