我们的测试机器上有个很奇怪的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);
确保属性实际包含在源代码中解决了这个问题。
其他回答
FWIW,当有一个配置文件重定向到引用程序集的不存在版本时,我得到了这个。融合日志为胜利而战!
另一种情况是,有符号程序集的版本不正确。这不是这种疾病的正常症状,但这是我患病的情况
asp.net项目包含程序集A和程序集B, B是强命名的 程序集A使用Activator。CreateInstance加载程序集C(即没有对单独构建的C的引用) C是引用程序集B的较旧版本构建的
希望这能帮助到一些人,我花了很长时间才弄明白。
以下是我对这个错误的看法。
添加了一个extern方法,但我的粘贴是错误的。DllImportAttribute被放到一个注释出来的行。
/// <returns>(removed for brevity lol)</returns>[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool IsWindowVisible(IntPtr hWnd);
确保属性实际包含在源代码中解决了这个问题。
它发生在我身上,当一个接口有一个第三方dll (MWArray)的引用,“特定版本”设置为“True”,而实现的类有一个引用相同的dll,但“特定版本”设置为“False”,所以类和接口有不同的版本引用相同的dll。
将两者设置为“特定版本”:“假”或“真”(取决于你需要什么)修复了它。
作为补充:如果更新用于生成假程序集的nuget包,也会发生这种情况。假设您安装了一个nuget包的V1.0版本,并创建了一个假程序集“fakeLibrary.1.0.0.0.Fakes”。接下来,更新到nuget包的最新版本,比如v1.1,它向接口添加了一个新方法。Fakes库仍在寻找该库的1.0版本。只需移除假组装和再生它。如果这是问题所在,这可能会解决它。