이름으로 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
'Nice programing' 카테고리의 다른 글
ipython 노트북에 목차를 추가하려면 어떻게해야합니까? (0) | 2020.10.11 |
---|---|
Xcode에서 빌드 타이밍을 활성화하는 방법은 무엇입니까? (0) | 2020.10.11 |
tkinter에서 두 프레임 간 전환 (0) | 2020.10.11 |
.htaccess 하위 도메인을 디렉토리에 다시 작성 (0) | 2020.10.11 |
bash echo 파일 이름없이 bash 변수에 주어진 파일 줄 수 (0) | 2020.10.11 |