系统类型载入异常:方法“get_xxx”没有实现。

14

这个问题已经有很多困扰人的疑问了,我仔细查看过所有相关问题,但都没有收获。

我遇到了以下错误:

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

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

我有一个接口:

IResourceCompiler,在一个叫做“Models.Domain”的程序集里。

我在同一个程序集(Models.Domain)里有一个抽象类,该抽象类实现了这个接口,名字叫做WebConfigBase

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

我尝试添加了一个属性

string UserImageCDNUrl {get;}

新增了属性到WebConfigBase,并针对IResourceCompiler进行了更新。

public string UserImageCDNUrl 
{
    get { return ""; } 
}
因此,该属性将通过它们自己的WebConfig类对Api和Web项目都可访问,并出现上述异常。
我已经寻找了数小时,试图找出为什么会出现这种情况,但没有收获。
我已清空我的Obj文件夹,清理、重建,检查GAC中的任何实例(没有任何实例),但我仍然卡在这里。
一切都很顺利,直到我尝试向接口(和基类)添加新属性。
7个回答

8

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

我不知道为什么,但是确实解决了问题。

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

我希望有一个更合理的解释,但没有。这样令人恼火的问题,我很高兴终于解决了。

祝其他遇到同样问题的人好运,我与你同在。


很奇怪,我也遇到了这个问题,但在我的情况下版本是正确的。尽管如此,重新添加引用确实解决了它。 - Pedro Rodrigues

5

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


2

这可能有很多原因,之前的回答都代表了这个问题的一种情况。

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

在搜索结果中,你会看到程序集的路径,很可能你看到的路径不是你期望的路径。
删除此意外路径下的程序集,以便加载正确的程序集。


1
我只是移除了当前项目的引用(该项目显示错误),并重新添加到另一个项目中,该项目已经构建了对此的引用,并且现在可以正常工作。
希望这能帮助到某些人。

1
指向正确方向加1分,我还必须在将引用添加回主项目之前清理主项目并重新构建引用的项目。请注意,以错误的顺序清理/重建解决方案或项目没有任何效果。 - Bizhan

1
在许多情况下,我会遇到这个错误。看起来像是缓存的程序集,我在UserProfile中找到了它们。
我的解决方案是:
  1. 保存解决方案并关闭Visual Studio
  2. 删除整个文件夹"c:\Users(user)\AppData\Local\Microsoft\VisualStudio\14.0\ProjectAssemblies\"
  3. 启动Visual Studio
  4. 工作...
希望能有所帮助。

0
我在Visual Studio 2017中遇到了这个问题。
升级到Visual Studio 2019后,问题得到了解决。

虽然这个方法可以解决问题,但对于2017年来说并没有真正解决它。 - HackSlash

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

谢谢您的回复,我尝试了您的建议(使用虚拟),但仍然没有成功。出现了相同的错误。其中有其他属性可以完全正常地工作,只是最新更改导致了问题。就像某个缓存版本没有得到更新一样,但我不知道它在哪里!真是气死人! - pieperu
另一个让我非常困惑的事情是,当我运行Api.Web时出现错误,但错误抱怨的是App.Web有问题。 Api.Web和App.Web甚至不知道彼此的存在。 - pieperu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接