我只是想分享我学到的东西。这里有很多关于 TypeLoadExceptions 的帖子,但似乎都没有我需要的答案。
这个页面有一些特别好的信息,但似乎没有具体说明我所看到的以及我是如何解决它的(可能是错误的):
TypeLoadException says 'no implementation', but it is implemented
解决方案对我来说很简单:删除 Visual Studio 2010 缓存并用于生成程序集文件的所有文件。
问题背景:
这里有更多的细节。我看到了类似 TypeLoadException 的内容:
Unhandled Exception: System.TypeLoadException: Method [method name] in type [type name] from assembly [assembly name], Version=x.x.x.x, Culture=neutral, PublicKeyToken=null does not have an implementation.
我确实有一个实现......我想,直到我用 ILDASM 查看程序集。我发现我正在将旧版本的 DLL 写入我的输出文件夹,这些文件夹具有过时的接口(interface)。我的输出文件夹不是默认设置,而是项目文件夹之外的相对路径(也许 VS 不能完全处理这个??)。对项目进行清理/重建后,项目的“obj”文件夹是我的项目文件夹的所有子文件夹中唯一在 DLL 上具有正确日期戳的文件夹。由于某种原因,“bin”文件夹仍然有一个旧版本。我想这就是被复制到输出文件夹的内容。
在此之前我尝试过:
- 清理/重建
- 重新启动 Visual Studio (2010)
- 重新启动
- 删除输出文件夹 (bin\x86\debug) 中的程序集 DLL
...没有成功。
我不确定为什么 VS 没有将“obj”中的正确程序集复制到输出文件夹...引用过时程序集的项目是正确的。
最佳答案
您是否在使用某种源代码控制并进行 checkin 和 checkout ?如果是,请确保 obj 和 bin 文件夹未 checkin 源代码管理。如果是,则将它们从源代码管理中删除,检查所有内容,然后重新构建您的解决方案。
关于c# - TypeLoadException的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8527966/