TypeLoadException的解决方案

我只是想分享一些我学到的东西。 这里有很多关于TypeLoadExceptions的post,但是它们似乎都没有我需要的答案。

这个页面有一些特别好的信息,但似乎没有具体解决我所看到的以及我如何解决它(可能是错误的):

TypeLoadException表示“没有实现”,但它已实现

解决方案对我来说很简单:删除Visual Studio 2010缓存的任何文件并用于生成程序集文件。


问题背景:

这里有一些更多的细节。 我看到一个TypeLoadException,如:

未处理的exception:System.TypeLoadException:类型[类型名称]中的方法[方法名称]来自程序集[程序集名称],Version = xxxx,Culture = neutral,PublicKeyToken = null没有实现。

我确实有一个实现……我想,直到我用ILDASM查看程序集。 我发现我正在将旧版本的DLL写入我的ouput文件夹,该文件夹已经过时了。 我的输出文件夹不是默认设置,而是项目文件夹之外的相对路径(也许VS无法完全处理这个问题)。 在对项目执行清理/重建之后,项目的“obj”文件夹是我的项目文件夹的所有子文件夹中唯一具有DLL上正确日期戳的文件夹。 由于某种原因,“bin”文件夹仍然有旧版本。 而且我想这就是被复制到输出文件夹的内容。

在此之前我尝试过:

  • 清洁/重建
  • 重启Visual Studio(2010)
  • 重启
  • 删除输出文件夹中的汇编DLL(bin \ x86 \ debug)

……没有成功

我不确定为什么VS没有将“obj”中的正确程序集复制到输出文件夹…引用过时程序集的项目是正确的

您是否正在使用某种源代码控制并进行检入和检查? 如果是,请确保未将obj和bin文件夹签入源控件。 如果他们从源代码管理中删除它们,请检查所有内容,然后重新构建解决方案。

我在Visual Studio 2015中遇到过这种问题,并通过使用NuGet包管理器解决了这个问题,重新安装了以某种方式安装在不同版本中的软件包。