gpt4 book ai didi

c# - TypeLoadException 说 'no implementation' ,但它已实现

转载 作者:可可西里 更新时间:2023-11-01 08:13:45 27 4
gpt4 key购买 nike

我的测试机器上有一个非常奇怪的错误。错误是:

System.TypeLoadException:程序集“ActiveViewers (...)”中类型“DummyItem”中的方法“SetShort”没有实现。

我只是不明白为什么。 SetShort 位于 DummyItem 类中,我什至重新编译了一个写入事件日志的版本,以确保这不是部署/版本控制问题。奇怪的是调用代码甚至没有调用 SetShort 方法。

最佳答案

注意 - 如果此答案对您没有帮助,请花时间向下滚动浏览此后人们添加的其他答案。

简答

如果您将方法添加到一个程序集中的接口(interface),然后添加到另一个程序集中的实现类,但您重建了实现程序集而不引用接口(interface)程序集的新版本,就会发生这种情况。

在这种情况下,DummyItem 实现来自另一个程序集的接口(interface)。 SetShort 方法最近被添加到接口(interface)和 DummyItem - 但包含 DummyItem 的程序集是引用以前版本的接口(interface)程序集重建的。所以 SetShort 方法在那里有效,但没有将它链接到接口(interface)中等效方法的神奇酱料。

长答案

如果你想尝试重现这个,请尝试以下操作:

  1. 创建一个类库项目:InterfaceDef,只添加一个类,然后构建:

    public interface IInterface
    {
    string GetString(string key);
    //short GetShort(string key);
    }
  2. 创建第二个类库项目:实现(使用单独的解决方案),将 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
    }
  3. 创建第三个控制台项目:ClientCode,将两个 dll 复制到项目目录中,添加文件引用,并将以下代码添加到 Main 方法中:

     IInterface test = new ImplementingClass();
    string s = test.GetString("dummykey");
    Console.WriteLine(s);
    Console.ReadKey();
  4. 运行一次代码,控制台显示“hello world”

  5. 取消注释两个 dll 项目中的代码并重建 - 将两个 dll 复制回 ClientCode 项目,重建并再次尝试运行。尝试实例化 ImplementingClass 时发生 TypeLoadException。

关于c# - TypeLoadException 说 'no implementation' ,但它已实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8133782/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com