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.
Мое решение:
- Сохраните решение и закройте Visual Studio
- Удалить всю папку "c:\Users(пользователь)\AppData\Local\Microsoft\VisualStudio\14.0\ProjectAssemblies\"
- Запустить Visual Studio
- Работа...
Надеюсь, поможет.
Я видел эту проблему в 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 ;
}