我们的测试机器上有个很奇怪的bug。错误是:
系统。来自程序集“activeviewer(…)”的类型“DummyItem”中的方法“SetShort”没有实现。
我就是不明白为什么。SetShort在DummyItem类中,我甚至重新编译了一个版本,写入事件日志,只是为了确保它不是部署/版本控制问题。奇怪的是,调用代码甚至不调用SetShort方法。
我们的测试机器上有个很奇怪的bug。错误是:
系统。来自程序集“activeviewer(…)”的类型“DummyItem”中的方法“SetShort”没有实现。
我就是不明白为什么。SetShort在DummyItem类中,我甚至重新编译了一个版本,写入事件日志,只是为了确保它不是部署/版本控制问题。奇怪的是,调用代码甚至不调用SetShort方法。
当前回答
以下是我对这个错误的看法。
添加了一个extern方法,但我的粘贴是错误的。DllImportAttribute被放到一个注释出来的行。
/// <returns>(removed for brevity lol)</returns>[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool IsWindowVisible(IntPtr hWnd);
确保属性实际包含在源代码中解决了这个问题。
其他回答
另一种情况是,有符号程序集的版本不正确。这不是这种疾病的正常症状,但这是我患病的情况
asp.net项目包含程序集A和程序集B, B是强命名的 程序集A使用Activator。CreateInstance加载程序集C(即没有对单独构建的C的引用) C是引用程序集B的较旧版本构建的
希望这能帮助到一些人,我花了很长时间才弄明白。
我得到了一个“钻石”形的项目依赖:
项目A使用项目B和项目D 项目B使用项目D
我重新编译了项目A而不是项目B,这允许项目B“注入”旧版本的项目D dll
另一种可能是在依赖关系中混合发布和调试构建。例如,程序集A依赖于程序集B, A是在调试模式下构建的,而GAC中的B副本是在发布模式下构建的,反之亦然。
当我的应用程序没有对另一个程序集的引用时,我得到了这个,该程序集定义了错误消息中的方法使用的类。运行PEVerify会给出更有用的错误:“系统无法找到指定的文件。”
我在Visual Studio Pro 2008中看到了这一点,当时两个项目构建了具有相同名称的程序集,一个是类库SDF.dll,另一个是使用程序集名称sdf.exe引用程序库。 当我更改引用程序集的名称时,异常消失了