TypeLoadException的解决方案

时间:2011-12-15 23:17:50

标签: c# .net typeloadexception

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

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

TypeLoadException says 'no implementation', but it is implemented

对我来说

解决方案很简单:删除Visual Studio 2010缓存并用于生成程序集文件的所有文件。


问题背景:

以下是一些更多细节。我看到了类似的TypeLoadException:

  

未处理的异常:System.TypeLoadException:方法[方法名称] in   从程序集[程序集名称]中键入[类型名称],版本= x.x.x.x,   Culture = neutral,PublicKeyToken = null没有实现。

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

在此之前我曾尝试过:

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

......没有成功。

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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