如何在没有Assembly.GetCallingAssembly()的情况下获取包含接口的程序集

时间:2017-06-22 06:50:47

标签: c# .net reflection .net-assembly

我有一个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()

1 个答案:

答案 0 :(得分:2)

如果在实现接口的当前程序集中有类型,则必须加载该定义。使用类型定义,您可以获得程序集引用:

var asm = typeof(IInterface).Assembly;

如果你有一个实例(例如,动态创建),那么:

var asm = theObject.GetType().Assembly;