Аксессоры и MissingMethodException

Я ссылаюсь на автоматически сгенерированную DLL в своем коде, которую я не могу контролировать.

Этот файл содержит множество определений классов, как показано ниже:

namespace _Outputs.CEEM
{
    public sealed class DoorDrvrSts : SystemVariableBase, ITypedRuntimeValue<int>, IRuntimeValue
    {
        public const int Clsd_DoorDrvrSts = 2;
        public const int Opend_DoorDrvrSts = 1;
        public const int Ukwn_DoorDrvrSts = 0;

        public static DoorDrvrSts Instance { get; }
        public int TypedValue { get; set; }
        public static int Value { get; set; }

        protected override void DoInvalidateInstance();

        public delegate void ValueChanged();
    }
}

Вот как я пытаюсь использовать вышеуказанный класс:

_Outputs.CEEM.DoorDrvrSts.Value = _Outputs.CEEM.DoorDrvrSts.Ukwn_DoorDrvrSts;

Но затем я получаю следующее исключение:

A .NET exception (MissingMethodException) occured in the module PowerManagement
Error message: Method not found: 'Void _Outputs.CEEM.DoorDrvrSts.set_Value(Int32)'.
Throwing method: PowerManagement.DoTest

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

У кого-нибудь есть другая идея? Когда мы запускаем точно такой же код на других машинах (точно такие же аппаратное обеспечение, программное обеспечение, .NET и окна, как я вижу), у нас не возникает проблем. Что это может означать?


person theAlse    schedule 10.06.2014    source источник


Ответы (2)


Instance объявляется как static. Таким образом, он не будет отображаться при использовании экземпляра.

Вместо этого попробуйте это при ссылке на его код (используется TypedValue в качестве примера свойства):

DoorDrvrSts.Instance.TypedValue

вместо:

DoorDrvrSts.TypedValue
person Patrick Hofman    schedule 10.06.2014
comment
Это автоматически сгенерированный код в виде DLL, который я не могу изменить. Я могу только изменить то, как я его использую. - person theAlse; 10.06.2014
comment
@theAlse: Нужна дополнительная помощь? Надеюсь, этого ответа было достаточно. - person Patrick Hofman; 10.06.2014
comment
Спасибо за ваш ответ. Можете ли вы объяснить еще кое-что? Я не понимаю, зачем мне нужен доступ к этому классу через его экземпляр. Пожалуйста, смотрите обновленную часть вопроса. Спасибо - person theAlse; 10.06.2014
comment
Потому что это типичная реализация шаблона проектирования singleton. Я предполагаю, что должен быть только один экземпляр этого класса, и именно поэтому они реализовали синглтон. - person Patrick Hofman; 10.06.2014
comment
а не означает ли эта строка, что public static int Value { get; set; } значение можно установить и получить? и почему он работает на других машинах? - person theAlse; 10.06.2014
comment
DoorDrvrSts.Instance.TypedValue должно быть установлено с помощью экземпляра, DoorDrvrSts.Value с помощью свойства static. - person Patrick Hofman; 10.06.2014
comment
Давайте продолжим это обсуждение в чате. - person theAlse; 10.06.2014

Патрик, ваш ответ, безусловно, был полезен, но моя проблема заключалась в том, что на самом деле использовалась неправильная DLL. Я использовал Ms process explorer, чтобы узнать, какая DLL используется, затем я удалил этот файл (который не должен был использоваться в первую очередь) и создал новый в нужном месте, и это решило мои проблемы.

person theAlse    schedule 04.07.2014