以前工作的asp.net webforms应用程序现在抛出这个错误:

系统。MissingMethodException:方法未找到

DoThis方法在同一个类上,它应该可以工作。

我有一个通用的处理程序,这样:

public class MyHandler: IHttpHandler
{
    public void Processrequest(HttpContext context)
    {
      // throws error now System.MissingMethodException: 
      // Method not found.
      this.DoThis(); 
    }

    public void DoThis(){ ... }
}

当前回答

I had a similar scenario where I was getting this same exception being thrown. I had two projects in my web application solution, named, for sake of example, DAL and DAL.CustSpec. The DAL project had a method named Method1, but DAL.CustSpec did not. My main project had a reference to the DAL project and also a reference to another project named AnotherProj. My main project made a call to Method1. The AnotherProj project had a reference to the DAL.CustSpec project, and not the DAL project. The Build configuration had both the DAL and DAL.CustSpec projects configured to be built. After everything was built, my web application project had the AnotherProj and DAL assemblies in its Bin folder. However, when I ran the website, the Temporary ASP.NET folder for the website had the DAL.CustSpec assembly in its files and not the DAL assembly, for some reason. Of course, when I ran the part that called Method1, I received a "Method not found" error.

为了修复这个错误,我必须从DAL更改AnotherProj项目中的引用。CustSpec到只是DAL,删除了临时ASP中的所有文件。NET Files文件夹,然后重新运行网站。从那以后,一切都开始运转了。我还确保了DAL。在“生成配置”中取消选中CustSpec项目后,没有生成该项目。

我想我要分享这个,也许它能在未来帮助到其他人。

其他回答

只是为了帮助任何人,虽然这是一个老问题,我的问题有点奇怪。

我在使用Jenkins时遇到了这个错误。

最终发现系统日期被手动设置为未来日期,这导致dll使用该未来日期编译。当日期被设置回正常时,MSBuild解释为文件更新,不需要重新编译项目。

我刚刚在一个。net MVC项目中遇到了这个问题。根本原因是NuGet包的版本冲突。我有几个项目的解决方案。每个项目都有一些NuGet包。在一个项目中,我使用了企业库语义日志包的一个版本,而在另外两个项目(引用了第一个项目)中,我使用了同一包的旧版本。它编译时没有错误,但是当我尝试使用这个包时,它给出了一个神秘的“Method not found”错误。

解决办法是从两个项目中删除旧的NuGet包,这样它就只包含在真正需要它的一个项目中。(我也对整个解决方案做了一个干净的重建。)

我刚刚有这个问题,原来是因为我引用了以前版本的DLL从我的UI项目。因此,编译时它是快乐的。但在运行时,它使用的是以前版本的DLL。

在假设您需要重新构建/清理/重新部署解决方案之前,请检查所有其他项目的参考资料。

我在测试同事编写的一些代码时遇到了这个异常。以下是异常信息的摘要:

方法未找到:“System.Threading.Tasks.Task1< microsoft . entityframeworkcore . changetrackingentityentry1 <System_Canon>> . System_Canon . changetrackingentityentry1” Microsoft.EntityFrameworkCore.DbSet“1. addasync…

这是在Visual Studio 2019中针对. net Core 3.1的类库中。修复方法是在DbSet上使用Add方法而不是AddAsync。

在我的例子中,MissingMethodException是针对同一个文件中的一个方法!

然而,我刚刚添加了一个使用. net Standard2的NuGet包到我的4.7.1-targeting项目中,这导致了System.Net.Http的版本冲突(4.7.1:版本4.0.0.0,使用. net Standard2的NuGet包需要4.2.0.0)。这似乎是已知的问题,应该更好的4.7.2(见注2)。

我在所有其他项目中都使用了这样的绑定重定向,因为一旦它试图加载4.2.0.0,就会出现异常:

  <dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.0.0.0" />
  </dependentAssembly>

除了在这个项目中,它似乎只是在调用使用System.Net.Http.HttpResponseMessage作为参数或返回类型的本地函数时试图加载System.Net.Http(调试期间的参数,在没有调试器的情况下运行测试时的返回类型,这也有点奇怪)。而不是显示消息,它无法加载4.2.0.0版本的System.Net。Http,它返回这个异常。