【问题标题】:System.TypeLoadException: Method 'get_xxx' does not have an implementationSystem.TypeLoadException:方法“get_xxx”没有实现
【发布时间】:2020-12-16 23:58:30
【问题描述】:

这个问题有很多问题,我已经毫无乐趣地解决了这些问题。

我收到此错误:

来自程序集的“App.Web.WebConfig”类型中的方法“get_UserImageCDNUrl” 'App.Web, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' 没有实现。

这真的很奇怪,因为我正在尝试运行没有引用 App.Web 的 Api.Web,它们唯一的共同点是对其他项目(Models.Domain 和 Models.DTO)的引用。

我有一个界面:

IResourceCompiler 在程序集“Models.Domain”中

我有一个抽象类,它在名为 WebConfigBase

的同一程序集 (Models.Domain) 中实现此接口

在“App.Web”和“Api.Web”项目中,它们都有一个名为 WebConfig 的类,它继承自 WebConfigBase,因此 WebConfig 类是 IResourceCompiler 的实现。

我尝试添加一个属性

string UserImageCDNUrl {get;}

IResourceCompiler 并将属性添加到 WebConfigBase

public string UserImageCDNUrl 
{
    get { return ""; } 
}

因此,Api 和 Web 项目都可以通过它们自己的 WebConfig 类访问该属性,我得到了上述异常。

我已经找了好几个小时来尝试看看为什么会发生这种情况,但没有任何乐趣。

我已经清除了我的 Obj 文件夹、清理、重建、检查了 GAC 中的任何实例(没有任何实例),但我仍然卡在这个问题上。

在我尝试向接口(和基类)添加新属性之前一切正常

【问题讨论】:

    标签: c# interface typeloadexception


    【解决方案1】:

    好的,奇怪的是在 Api.Web 中添加对 App.Web 的引用并再次删除它已经解决了这个问题。

    我不知道为什么,但确实如此。

    我把App.Web的版本改成了1.0.0.1,报错还是显示1.0.0.0,这就是促使我这么做的原因。

    我希望有一个更合理的解释,但没有。这样一个令人愤怒的问题,我很高兴能解决它。

    祝所有遇到这种情况的人好运,我的想法与你同在

    【讨论】:

    • 奇怪的是,我查看了这个确切的问题,并且版本在我的情况下是正确的。尽管如此,重新添加参考确实解决了它。
    【解决方案2】:

    据记录,在我的情况下,这是由两个项目引用同一包的不同版本引起的。至少解决了这个问题。

    【讨论】:

      【解决方案3】:

      这可能有很多原因,之前所有的答案都代表了这个问题的一个案例。

      我建议做的是:
      当您的程序运行时,打开资源监视器 -> CPU 选项卡并在搜索句柄输入框中,搜索据称没有实现该方法的程序集。

      在搜索结果中,您会看到程序集的路径,而且很可能您看到的路径不是您所期望的。
      从这个意外路径中删除程序集,以便获得正确的程序集已加载。

      【讨论】:

        【解决方案4】:

        在很多情况下我会变成这个错误。 好像是缓存的程序集,我在 UserProfile 中找到了它们。

        我的解决办法是:

        1. 保存解决方案并关闭 Visual Studio
        2. 删除整个文件夹“c:\Users(user)\AppData\Local\Microsoft\VisualStudio\14.0\ProjectAssemblies\”
        3. 启动 Visual Studio
        4. 工作...

        希望对你有帮助。

        【讨论】:

          【解决方案5】:

          我只是删除了当前项目的引用(显示错误),然后再次添加到其他项目中,其中引用了该项目的构建,它开始正常工作。

          希望这对某人有所帮助。

          【讨论】:

          • +1 指向正确的方向,我还必须 clean 主项目并 rebuild 引用的项目 before 再次添加对主项目的引用。请注意,以错误的顺序清理/重建解决方案或项目没有有任何效果。
          【解决方案6】:

          试试这个

          public interface IResourceCompiler
          {
              string UserImageCDNUrl {get;}
          }
          
          public abstract class WebConfigBase : IResourceCompiler
          {
              public abstract string UserImageCDNUrl {get;}
          }
          
          public class WebConfig : WebConfigBase 
          {
              public override string  UserImageCDNUrl { return "whatever you want";}
          }
          

          也可以这样:

          public interface IResourceCompiler
          {
              string UserImageCDNUrl {get;}
          }
          
          public abstract class WebConfigBase : IResourceCompiler
          {
              public virtual string UserImageCDNUrl {get { return string.empty;}}
          }
          
          public class WebConfig : WebConfigBase 
          {
              public override string  UserImageCDNUrl { return "whatever you want";} // or return base.UserImageCDNUrl ;
          }
          

          【讨论】:

          • 感谢您的回复,我尝试了您的建议(使用虚拟),但仍然不满意。同样的错误。那里还有其他属性可以正常工作,只是这个最新的更改导致了问题。就好像某处有一个没有更新的缓存版本,但我不知道它在哪里! ggrr!
          • 另一件真正让我困惑的是,当我运行Api.Web时出现错误,但错误是抱怨App.Web有问题。 Api.Web 和 App.Web 甚至互不了解
          【解决方案7】:

          我在 Visual Studio 2017 中看到了这个问题。

          升级到 Visual Studio 2019 为我解决了这个问题。

          【讨论】:

          • 虽然这确实解决了问题,但并没有真正解决 2017 年的问题。
          猜你喜欢
          • 2012-10-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-07
          • 1970-01-01
          • 2020-07-01
          • 1970-01-01
          相关资源
          最近更新 更多