특정 닷넷 프레임워크 버전 이후부터 제공되는 타입을 사용해야 한다면?
예를 들어 System.Diagnostics.Eventing.EventProvider의 경우,
EventProvider Class
; https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.eventing.eventprovider
.NET 3.5부터 System.Core.dll 어셈블리에 구현되어 있습니다. 그런데, 일반적인 라이브러리 개발자라면 .NET 2.0/4.0으로 나눠서 어셈블리를 빌드하게 되는데 이 과정에서 .NET 3.5부터 제공되는 기능을 라이브러리에 포함하려면 역시 Reflection을 사용하는 것이 최선입니다.
제 경우에는 다음과 같은 식으로 처리를 해봤습니다.
AssemblyName asmName = typeof(string).Assembly.GetName(); // mscorlib.dll을 기준삼아.
string systemCore = null;
// .NET 2.0 기반
systemCore = asmName.FullName.Replace(asmName.Name, "System.Core").Replace("2.0.0.0", "3.5.0.0");
// .NET 4.0 기반
// systemCore = asmName.FullName.Replace(asmName.Name, "System.Core");
Assembly coreAssembly = null;
try
{
coreAssembly = AppDomain.CurrentDomain.Load(systemCore);
if (coreAssembly == null)
{
return;
}
Type eventProviderType = coreAssembly.GetType("System.Diagnostics.Eventing.EventProvider");
// ... Reflection으로 객체 생성/사용
}
catch
{
return;
}
혹시 관련해서 자신만의 팁이 있는 분들은 공유 좀 부탁드립니다. ^^
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]