访问器和MissingMethodException

时间:2014-06-10 08:48:07

标签: c# exception accessor 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,并确保这些是我解决方案中实际引用的那些。

有没有人有任何其他想法? 当我们在其他机器上运行完全相同的代码时(我可以看到完全相同的hw,sw,.NET和windows),我们没有遇到任何问题。这意味着什么?

2 个答案:

答案 0 :(得分:1)

Instance被声明为static。因此,当您使用实例时,它不会显示。

在引用它的代码时使用它(使用TypedValue作为样本属性):

DoorDrvrSts.Instance.TypedValue

而不是:

DoorDrvrSts.TypedValue

答案 1 :(得分:0)

帕特里克,你的答案肯定是有帮助的,但我的问题是实际使用了错误的DLL。我使用Ms process explorer来找出正在使用的DLL,然后我删除了该文件(首先不应该使用它)并在正确的位置生成一个新文件,它解决了我的问题。< / p>