System.TypeLoadException:方法'get_xxx'没有实现

时间:2016-09-21 11:59:50

标签: c# interface typeloadexception

有很多问题浮现在这个问题上,我已经完成了他们的工作,没有任何快乐。

我收到此错误:

  

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

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

我有一个界面:

装配“Models.Domain”

中的

IResourceCompiler

我有一个抽象类,它在同一个程序集(Models.Domain)中实现这个接口,名为 WebConfigBase

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

我尝试添加属性

string UserImageCDNUrl {get;}

IResourceCompiler 并将该属性添加到 WebConfigBase

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

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

我已经花了好几个小时试着看看为什么会发生这种情况并不高兴。

我已经清除了我的Obj文件夹,清理,重建,检查了GAC中的任何实例(没有任何实例),我仍然坚持这一点。

一切正常,直到我尝试向界面(和基类)添加新属性

7 个答案:

答案 0 :(得分:2)

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

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

我将App.Web的版本更改为1.0.0.1,错误仍然显示为1.0.0.0,这促使我这样做。

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

祝其他任何体验过此事的人好运,我的想法和你在一起

答案 1 :(得分:1)

在很多情况下,我成了这个错误。 它似乎是缓存程序集,我在UserProfile中找到它们。

我的解决方案是:

  1. 保存解决方案并关闭Visual Studio
  2. 删除整个文件夹&#34; c:\ Users(用户)\ AppData \ Local \ Microsoft \ VisualStudio \ 14.0 \ ProjectAssemblies \&#34;
  3. 启动Visual Studio
  4. 工作...
  5. 希望它有所帮助。

答案 2 :(得分:1)

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

我建议做的是:
当你的程序正在运行时打开资源监视器 - &gt;在CPU选项卡和搜索句柄输入框中,搜索应该没有实现该方法的程序集。

在搜索结果中,您将看到装配的路径,并且您看到的路径很可能不是您所期望的路径。
从此意外路径中删除装配,以便正确的程序集被加载。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

试试这个

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 ;
}

答案 5 :(得分:0)

I just remove the reference of current project (which is showing error) , and add again to other project in which project this was referenced build and it start working fine.

hope this help someone.

答案 6 :(得分:0)

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

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