System.TypeLoadException: метод 'get_xxx' не имеет реализации

Есть много вопросов с этой проблемой, и я работал над ними без радости.

Я получаю эту ошибку:

Метод 'get_UserImageCDNUrl' в типе 'App.Web.WebConfig' из сборки 'App.Web, версия =1.0.0.0, Culture= нейтральный, PublicKeyToken=null' не имеет реализации.

Что действительно странно, потому что я пытаюсь запустить Api.Web, который не имеет ссылки на App.Web, единственное, что у них общего, - это ссылки на другие проекты (Models.Domain и Models.DTO).

У меня есть интерфейс:

IResourceCompiler в сборке "Models.Domain"

У меня есть абстрактный класс, который реализует этот интерфейс в той же сборке (Models.Domain) под названием WebConfigBase

В проектах "App.Web" и "Api.Web" каждый из них имеет класс WebConfig, который наследуется от WebConfigBase, поэтому оба класса WebConfig в App и Api являются реализациями IResourceCompiler.

Я пытался добавить свойство

string UserImageCDNUrl {get;}

в IResourceCompiler и добавили свойство в WebConfigBase

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

таким образом, свойство будет доступно для Api и веб-проектов через их собственные классы WebConfig, и я получаю исключение выше.

Я часами пытался понять, почему это происходит без радости.

Я очистил свои папки Obj, очистил, перестроил, проверил все экземпляры в GAC (их нет), и я все еще застрял на этом.

Все работает нормально, пока я не попытаюсь добавить новое свойство в интерфейс (и базовый класс)

7 ответов

Решение

Хорошо, поэтому странное добавление ссылки на App.Web в Api.Web и ее повторное удаление решило проблему.

Понятия не имею почему, но это так.

Я изменил версию App.Web на 1.0.0.1, и ошибка все еще показывала 1.0.0.0, что побудило меня сделать это.

Хотелось бы, чтобы было более разумное объяснение, но его нет. Такая бешеная проблема, я просто рад с ней покончить.

Удачи всем, кто испытал это, мои мысли с вами

Для записей: в моем случае это было вызвано тем, что два проекта ссылались на разные версии одного и того же пакета. По крайней мере, исправление этого решило проблему.

Для этого может быть много причин, все предыдущие ответы представляют случай этой проблемы.

Я предлагаю сделать следующее:
пока ваша программа работает, откройте Resource Monitor -> вкладку CPU и в поле ввода дескрипторов поиска найдите сборку, которая предположительно не реализует этот метод.

В результатах поиска вы увидите путь вашей сборки, и, скорее всего, путь, который вы видите, не тот, который вы ожидаете.
Удалите сборку из этого неожиданного пути, чтобы загрузить правильную сборку.

Я просто удаляю ссылку на текущий проект (который показывает ошибку), и снова добавляю в другой проект, в проекте которого была эта сборка, и он начинает работать нормально.

надеюсь, это поможет кому-то.

Во многих случаях я становлюсь этой ошибкой. Вроде как Cached сборка и я нашел их в UserProfile.

Мое решение:

  1. Сохраните решение и закройте Visual Studio
  2. Удалить всю папку "c:\Users(пользователь)\AppData\Local\Microsoft\VisualStudio\14.0\ProjectAssemblies\"
  3. Запустить Visual Studio
  4. Работа...

Надеюсь, поможет.

Я видел эту проблему в Visual Studio 2017.

Обновление до Visual Studio 2019 решило проблему для меня.

Попробуй это

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 ;
}
Другие вопросы по тегам