【问题标题】:Getting the System.MissingMethodException, for extension method for sorting of a generic list获取 System.MissingMethodException,用于对通用列表进行排序的扩展方法
【发布时间】:2014-04-27 15:34:54
【问题描述】:
System.MissingMethodException: Method not found: 
  'System.Collections.Generic.List`1<!!0> 
  BusinessEntities.Helper.Sort(System.Func`2<!!0,!!0>)'

我在网站的某个页面上收到此错误。网站构建是使用 Visual Studio Web 部署项目准备的。当我在 IIS 中部署构建并运行该页面时,出现上述错误。当网站在visual studio中以调试模式运行时,它执行得很好。

背景: 我有一个引用 BusinessEntities 项目的 asp.net 4.0 网站,这是一个 .NET 3.5 类库项目。该项目包含一个公共静态 Helper 类,该类具有用于对对象的通用列表进行排序的扩展方法 Sort。 Helper 类位于 BusinessEntities 命名空间中。

如果我将 BusinessEntites 项目的版本更改为 .Net 4.0 然后构建网站,则不会出现此错误。由于一些操作限制,该项目无法升级到 4.0。

所有这一切的奇怪之处在于,通用扩展方法以及网站和项目结构已经在解决方案中使用了一年多,没有任何问题。我不明白为什么会突然弹出这个错误。

【问题讨论】:

    标签: c# asp.net .net generics web-deployment-project


    【解决方案1】:

    MissingMethodException 表示您正在加载的 dll 版本与您在构建期间引用的版本不同,并且您正在加载的实际 dll(在运行时)没有编译器找到的方法(在编译时)。

    检查您是否在项目中引用了同一 dll 的不同版本。可能是当您在调试模式下运行它时,其他一些代码会首先加载正确的 dll,但在发布时运行时,由于引用不匹配,会加载不同的 dll,或者您可能在某个地方有多个版本。

    【讨论】:

    • 该网站有一个对 BusinessEntities 项目的项目引用。我检查了 BusinessEntities.dll 的日期时间戳,它与项目的当前时间戳相匹配。我什至尝试将最新的 dll 从项目构建替换为网站构建。仍然没有工作。构建中没有其他同名的 dll。如果我从页面中注释掉排序方法,它可以正常工作。这意味着可以在构建中访问 BusinessEntites 项目中的其他类。另外,我想知道为什么当我将项目目标框架更改为 4.0 时,不会出现此问题。
    • 您是否尝试删除所有引用、dll 并重新编译? DLL 有没有可能在 GAC 中?
    • 是的,已尝试删除、清理解决方案和重建。我还没有将项目 dll 添加到 GAC。但检查了 GAC 以确保它不存在。甚至尝试过删除临时 asp.net 文件。
    • 我对解决方案进行了全面重建,错误消失了。
    【解决方案2】:

    我遇到了同样的问题,我已使用以下步骤修复... 1.清洁你的解决方案 2.手动清理bin文件夹 3.删除临时文件夹 4. 重建解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-26
      • 2013-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多