NOTE-如果这个答案对你没有帮助,请花点时间向下滚动浏览人们添加的其他答案.
Short answer个
如果在一个程序集中向接口添加方法,然后在另一个程序集中向实现类添加方法,但在不引用接口程序集的新版本的情况下重新生成实现程序集,则可能会发生这种情况.
在本例中,DummyItem实现来自另一个程序集的接口.SetShort方法最近被添加到接口和DummyItem中,但包含DummyItem的程序集是参照接口程序集的早期版本重建的.因此,SetShort方法是有效的,但没有将其与接口中的等效方法联系起来的魔法酱.
Long answer
如果要try 重现此内容,请try 以下操作:
创建一个类库项目:InterfaceDef,只添加一个类,然后构建:
public interface IInterface
{
string GetString(string key);
//short GetShort(string key);
}
创建第二类库项目:实现(使用单独的解决方案),复制InterfaceDef.dll到项目目录中,并添加为文件引用,只添加一个类,然后生成:
public class ImplementingClass : IInterface
{
#region IInterface Members
public string GetString(string key)
{
return "hello world";
}
//public short GetShort(string key)
//{
// return 1;
//}
#endregion
}
创建第三个控制台项目:ClientCode,将两个DLL复制到项目目录中,添加文件引用,并将以下代码添加到Main方法中:
IInterface test = new ImplementingClass();
string s = test.GetString("dummykey");
Console.WriteLine(s);
Console.ReadKey();
运行一次代码,控制台显示"hello world"
取消注释两个DLL项目中的代码并重新生成-将这两个DLL复制回ClientCode项目中,重新生成并try 再次运行.try 实例化ImplementingClass时发生TypeLoadException.