Nice programing

이름으로 C # .Net 어셈블리를 얻는 방법?

nicepro 2020. 10. 11. 11:18
반응형

이름으로 C # .Net 어셈블리를 얻는 방법?


다음과 같은 것이 있습니까?

AppDomain.CurrentDomain.GetAssemblyByName("TheAssemblyName")

따라서을 반복하는 대신 AppDomain.CurrentDomain.GetAssemblies()특정 어셈블리를 직접 가져올 수 있습니다.


Assembly.Load (...) 살펴 보았습니까 ?


LINQ로 해결했습니다.

Assembly GetAssemblyByName(string name)
{
    return AppDomain.CurrentDomain.GetAssemblies().
           SingleOrDefault(assembly => assembly.GetName().Name == name);
}

달성하려는 작업에 따라 다릅니다.

어셈블리를 얻고 싶다면 System.Reflection.Assembly.Load()(이미 지적했듯이) 전화해야합니다 . .NET은 어셈블리가 이미 현재 AppDomain에로드되었는지 여부를 자동으로 확인하고로드 된 경우 다시로드하지 않기 때문입니다.

어셈블리가로드 되었는지 여부 확인 하려는 경우 (아마도 진단상의 이유로)로드 된 모든 어셈블리를 반복해야합니다.

반복 할 수있는 또 다른 이유는 어셈블리 정보 중 일부만 알고있는 경우입니다 (예 : 버전이 확실하지 않음). 즉, "볼 때 인식"할만큼 충분히 알고 있지만로드 할만큼 충분하지 않습니다. 그러나 그것은 상당히 모호하고 가능성이없는 시나리오입니다.


어셈블리의 메타 데이터 (버전 등)에 액세스해야하는 경우에는 메타 데이터 만로드 할 수있는 Assembly.ReflectionOnlyLoad (name)를 확인하여 메모리와 IO를 절약 할 수 있습니다.


System.Reflection.Assembly 클래스, 특히 Load 메서드를 살펴보십시오. MSDN


필요한 작업을 수행하는 확장 메서드를 작성할 수 있습니다.

이 메서드는로드 된 어셈블리 만 열거합니다.로드 해야하는 경우 Assembly.Load허용 된 답변에서 사용 합니다.

public static class AppDomainExtensions
{
    public static Assembly GetAssemblyByName(this AppDomain domain, string assemblyName)
    {
        return domain.GetAssemblies().FirstOrDefault(a => a.GetName().Name == assemblyName);
    }
}

그런 다음 다음과 같이 AppDomain에서이 메서드를 호출합니다.

Assembly a = AppDomain.CurrentDomain.GetAssemblyByName("SomeAssembly")

경우 SomeAssembly은 현재 응용 프로그램 도메인에로드 방법은 그렇지 않으면 반환, 반환합니다 null.

참고 URL : https://stackoverflow.com/questions/1913057/how-to-get-c-net-assembly-by-name

반응형