Assembly.GetExportedTypes抛出异常方法没有实现

时间:2012-06-08 09:04:46

标签: c# reflection .net-assembly

我正在实现具有以下定义

的界面
public interface Math
{

 int Calculate(int a, int b)
}

public class MathImpl : Math
{
  public int Calculate(int a, int b){ return a + b; }
}

这是代码是程序集的一部分,正确构建

当我调用Assembly.GetExportedTypes()时,它抛出异常方法没有实现。

Assembly assembly = Assembly.LoadFrom(filePath);
assembly.GetExportedTypes();

如果我将方法实现更改为

int Math.Calculate( int a, int b){ return a + b; }

工作正常。

在第一种情况下它会抛出错误的原因是什么?

3 个答案:

答案 0 :(得分:0)

来自GetExportedTypes的帮助:

  

获取此程序集中定义的 public 类型,这些类型在程序集外部可见。

您的界面(导致此处出现问题)和您的课程都不公开。

答案 1 :(得分:0)

接口的默认访问说明符为Public,但您的类默认为internal。所以当你说

int Math.Calculate( int a, int b){ return a + b; }

它正在工作,因为你有公共接口。如果你为你的内部课程实现它,它将无法工作。

答案 2 :(得分:0)

我无法确切地说出发生了什么,但我很确定问题与load contexts有关。