Ответ 1
Моим первым инстинктом было бы проверить, чтобы сборки содержали классы с отсутствующим методом. Я полагаю, что возможно, что сборка не сразу обновилась?
У меня проблема с получением исключения. У меня относительно простая структура, отдельная в двух dll.
Первый содержит IEntityService, IEntity, с базовой реализацией. Второй содержит фактические реализации, а также интерфейсы. поэтому есть служба IMachine, которая реализует IEntityService и MachineService, которая реализует как IEntityService, так и EntityService. Аналогичная ситуация наблюдается для коллекции результатов (entity plus service). Кроме того, служба (машина и результат) являются частичными классами/интерфейсами, где один из классов автогенерируется.
Теперь в одном из ResultMachine я пытаюсь получить машину, и в случае, если она не существует, я создаю ее и сохраняю. Однако, когда я пытаюсь сохранить, я получил "Метод не найден" при попытке получить доступ к методу сохранения из класса EntityService. Однако, если я завершаю метод EntityService.Save в MachineService, он работает без каких-либо исключений.
Отредактировано:
Код не требуется. Резолюция заключалась в том, чтобы повторно связать ссылку. Что вводило меня в заблуждение, что моя dll не находится в GAC, это связано с VS. Более того, он не сильно подписан, единственная разница - номер версии.
Моим первым инстинктом было бы проверить, чтобы сборки содержали классы с отсутствующим методом. Я полагаю, что возможно, что сборка не сразу обновилась?
У нас есть эта ошибка несколько раз, вы можете воссоздать проблему следующим образом:
Теперь вы получите исключение метода. Причина в том, что он использует старую версию dll, которая находится в GAC и не имеет метода.
Несколько раз он использует кэшированную версию старой DLL, IISreset может помочь.
В вашем случае проверьте все старые версии dll.
Когда вы ссылаетесь на "тот же" тип из разных сборок, убедитесь, что вы загружаете все по одному и тому же пути. В противном случае идентичные типы могут обрабатываться так, как если бы они были разными.
Подробнее см. в этой статье: Контексты Fusion Loader - Невозможно использовать объект типа "Что бы ни было" для ввода "Ничего"
Это случилось со мной, когда я вошел и изменил настройки сборки для вывода в /bin/Debug, а не просто /bin в случае, когда я также использовал IIS для размещения сайта из папки dev.
Вам необходимо иметь двоичные файлы в той же папке, что и служба, в моем случае, и изменить старые версии в папке bin и поместить последующие сборки в папку /bin/Debug (и/bin/Release).
Либо сохранить настройки как есть, либо выполнить пост-сборку, чтобы скопировать бит на один уровень, иметь разные приложения IIS для отладки/выпуска или полностью установить в другую папку. Последний, вероятно, наиболее "правильный", но для моих целей я понял, что после многократного вращения, у меня были разные версии в служебной папке. НТН.
В моем случае я только что развернулся на машине с .NET 3.0 (Windows XP), а целью компиляции был .NET 3.5.
Это сообщение об ошибке действительно не помогает.
Проблема заключается в использовании DataContract из System.Runtime.Serialisation.