때때로 작성한 메서드를 과연 어디서 호출하는지 알고 싶을 때가 있습니다.
동일한 어셈블리 내에서의 호출일 수 도 있겠지만, public으로 노출된 메서드라면 현재 어셈블리 외의 외부에서도 호출이 가능합니다.
이럴 때 현재 메서드를 어느 어셈블리에서 호출하였는지를 알 수 있는 방법이 있습니다.
이미 알고 계시는지는 모르겠지만, Assembly 클래스의 정적메서드인 GetCallingAssembly 메서드가 이 방법을 제공하고 있습니다.
아래와 같이 솔루션이 구성되어 있을 때
MethodCallAssembly 프로젝트에서 CalledAssembly의 CalledClass내의 메서드를 호출한다고 할 때,
public class CalledClass
{
public void CalledMethod()
{
// 현재 메서드를 호출한 어셈블리 정보를 가져옵니다.
Assembly assembly = System.Reflection.Assembly.GetCallingAssembly();
// 어셈블리의 정보를 출력합니다.
Console.WriteLine("FullName: " + assembly.FullName);
Console.WriteLine("CodeBase: " + assembly.CodeBase);
Console.WriteLine("Location: " + assembly.Location);
Console.WriteLine("GAC: " + assembly.GlobalAssemblyCache.ToString());
Console.WriteLine("Runtime Version: " + assembly.ImageRuntimeVersion.ToString());
}
}
위와 같은 코드를 이용하면 호출한 어셈블리의 정보를 얻어 올 수 있으며,
Assembly 클래스의 인스턴스를 얻을 수 있으므로 Reflection을 이용한 핸들링이 가능해집니다.
결과는 아래와 같이 출력됩니다.