我有一个C#WinForms应用程序和两个程序集 - 首先包含一个接口,第二个包含实现该接口的类。
应用程序加载第二个程序集(通过MS Enterprise Library Unity - 即通过Reflection)并调用类方法。
我需要在使用以下代码之前记录这个事实
var ApplicationInfo = Assembly.GetEntryAssembly().ToString();
var InterfaceInfo = Assembly.GetCallingAssembly().ToString();
var ImplementationInfo = Assembly.GetExecutingAssembly().ToString();
前一段时间它正常工作(它分别获得了应用程序,第一次组装和第二次组装)。
但是现在由于某种原因,GetCallingAssembly()
和GetExecutingAssembly()
都返回第二个程序集(包含类实现)。
有没有办法让包含界面的程序集没有Assembly.GetCallingAssembly()
?
知道为什么GetCallingAssembly()
开始相等GetExecutingAssembly()
?
答案 0 :(得分:2)
如果在实现接口的当前程序集中有类型,则必须加载该定义。使用类型定义,您可以获得程序集引用:
var asm = typeof(IInterface).Assembly;
如果你有一个实例(例如,动态创建),那么:
var asm = theObject.GetType().Assembly;