web-dev-qa-db-ja.com

System.MissingMethodException:メソッドが見つかりませんか?

かつて私のasp.net Webformsアプリで機能していたものが、このエラーをスローします。

System.MissingMethodException:メソッドが見つかりません

DoThisメソッドは同じクラスにあり、動作するはずです。

私は一般的なハンドラを持っています:

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

    public void DoThis()
    {
    //
    }
}
205
user603007

これは、古いバージョンのDLLがまだどこかに残っているときに発生する可能性がある問題です。最新のアセンブリが配置されていること、および重複する古いアセンブリが特定のフォルダに隠れていないことを確認してください。最善の策は、すべての構築済みアイテムを削除し、ソリューション全体を再構築/再展開することです。

328
Polity

正しい.NET Frameworkバージョンをサーバーにインストールすることでこの問題を解決しました。 Webサイトはバージョン4.0で実行されていて、呼び出し先のアセンブリは4.5用にコンパイルされています。 .NET Framework 4.5をインストールしてWebサイトを4.5にアップグレードした後は、すべて正常に動作します。

23
Ben Gripka

Visual Studioを再起動すると、実際にそれが修正されました。古いアセンブリファイルがまだ使用されていることが原因であると考えています。「クリーンビルド」を実行するか、またはVSを再起動すると修正されるはずです。

21
Jelani

⚠️間違ったNugetパッケージバージョン⚠️

私たちの会社の内部EF Nugetデータアクセスパッケージを引き込んでいるユニットテストプロジェクトを持っていました、そしてそのパッケージは現在のバージョンの後ろに方法であるパッケージのバージョンを使いました。

前述のパッケージのNuget設定はleast versionに設定されました。

それ故に関連したアセンブリのために静かに間違ったバージョンを得ました。


???? 解決策????

使用するNugetでパッケージを設定/更新し、最新を取得することで、問題を修正しました。

17
ΩmegaMan

私はちょうど.NET MVCプロジェクトでこれに遭遇しました。根本的な原因は、NuGetパッケージのバージョンが競合していたことです。いくつかのプロジェクトで解決策がありました。各プロジェクトにはいくつかのNuGetパッケージがありました。あるプロジェクトでは、Enterprise Library Semantic Loggingパッケージのバージョンがあり、他の2つのプロジェクト(最初のものを参照)で、同じパッケージの古いバージョンがありました。それはすべてエラーなしでコンパイルしますが、私がパッケージを使おうとしたとき、それは不思議な "Method not found"エラーを出しました。

修正プログラムは、2つのプロジェクトから古いNuGetパッケージを削除することで、実際にそれを必要とする1つのプロジェクトにのみ含まれるようにしました。 (また、私はソリューション全体をきれいに再構築しました。)

5
Mark Meuer

私はこれを別のDLLではなく、同じアセンブリで参照されているファイルで私に起こりました。プロジェクトからファイルを除外してから再度含めた場合、すべてうまくいきました。

5
Josh Noe

あなたの参照をチェックしてください!

ソリューションプロジェクト間で、一貫して同じサードパーティライブラリを参照していることを確認してください(バージョンを信頼するだけでなく、パスを調べてください)。

たとえば、あるプロジェクトでiTextSharp v.1.00.101を使用していて、他の場所でNuGetまたはiTextSharp v1.00.102を参照した場合、これらのタイプのランタイムエラーが発生し、コードに多少の誤差が生じます。

私は3つのプロジェクトすべてでiTextSharpへの参照を同じDLLを指すように変更しましたが、すべてうまくいきました。

4
Juls

あなた自身のNuGetサーバーで開発する場合は、Assemblyバージョンがすべて同じであることを確認してください。

[Assembly: AssemblyVersion("0.2.6")]
[Assembly: AssemblyFileVersion("0.2.6")]
[Assembly: AssemblyInformationalVersion("0.2.6")]
4
sennett

また、プロジェクトやソリューションを「クリーン」にして、もう一度再構築してください。

3
user384080

私はちょうどこの問題を抱えていました、そしてそれは私が私のUIプロジェクトからDLLの前のバージョンを参照していたためであることが判明しました。したがって、コンパイル時にそれは幸せでした。しかし、実行時には以前のバージョンのDLLを使用していました。

ソリューションを再構築/クリーンアップ/再展開する必要があると思う前に、他のすべてのプロジェクトの参照を確認してください。

2
Jamie Lupton

もう一度電源を入れ直してみましたか。冗談はさておき、私のコンピュータを再起動することが実際に私のためにトリックをしたことであり、他の答えのどれにも言及されていません。

1
Lee Bailey

私の場合は、パスが明示的に指定されていたにもかかわらずパスが明示的に指定されていたため、同じ名前の古いDLLが同じ名前のフォルダーに含まれていたため、同じDLLの複数のバージョンが競合していました。

私は私のASP.NET Webサイトで同じ状況に出くわしました。私は公開されたファイルを削除し、VSを再起動し、再度プロジェクトを整理して再構築しました。次回の公開後、エラーはなくなりました...

1
Irshu

問題がパラメータまたは戻り値の型で欠落していると報告されている可能性もあります。 "missing"メソッド自体は問題ありません。

それが私の場合に起こっていたことです、そして誤解を招くメッセージは問題を解明するのにはるかに時間がかかりました。パラメータの型のアセンブリはGACで古いバージョンを持っていましたが、使用されているバージョン番号付け方式が変更されたため、実際には古いバージョンの方が高いバージョン番号を持っていました。 GACからその古い/より高いバージョンを削除することで問題は解決しました。

1
Jimmy

私は自分の変更を加えたシェルブセットを作り、私のワークスペースでTFS Power Toolsを 'scorch'することでこの問題を解決しました( https://visualstudiogallery.msdn.Microsoft.com/f017b10c-02b4-4d6d- 9845-58a06545627f )それから私は変更を却下し、プロジェクトを再コンパイルしました。このようにして、あなたはあなたのワークスペースの周りにあるかもしれない「ぶら下がっているパーティー」をきれいにして、そして新しいもので始動するでしょう。これには、もちろん、TFSを使用している必要があります。

1
fbastian

私の場合、それはコピー&ペーストの問題でした。私はどういうわけか私のマッピングプロファイルのためのPRIVATEコンストラクタになった:

using AutoMapper;

namespace Your.Namespace
{
    public class MappingProfile : Profile
    {
        MappingProfile()
        {
            CreateMap<Animal, AnimalDto>();
        }
    }
}

(ctorの前に「public」がないことに注意してください)

これは完璧にコンパイルできましたが、AutoMapperがプロファイルをインスタンス化しようとすると(もちろん!)コンストラクタが見つかりません

1
DaBeSoft

問題が GAC のアセンブリの古いバージョンによって引き起こされている場合。
これは役に立ちます。 方法:グローバルアセンブリキャッシュからアセンブリを削除する

1
Ymagine First

私は私がこれと同じ例外が投げられるのを得ていたという同様のシナリオを持っていました。私のWebアプリケーションソリューションには、例としてDALとDAL.CustSpecという2つのプロジェクトがありました。 DALプロジェクトにはMethod1という名前のメソッドがありましたが、DAL.CustSpecにはありませんでした。私のメインプロジェクトはDALプロジェクトへの参照と、AnotherProjという名前の別のプロジェクトへの参照も持っていました。私のメインプロジェクトはMethod1を呼び出しました。 AnotherProjプロジェクトはDALプロジェクトではなく、DAL.CustSpecプロジェクトへの参照を持っていました。ビルド構成では、DALプロジェクトとDAL.CustSpecプロジェクトの両方をビルドするように構成しました。すべてが構築された後、私のWebアプリケーションプロジェクトは、BinフォルダにAnotherProjとDALアセンブリを持っていました。ただし、Webサイトを実行したときに、WebサイトのTemporary ASP.NETフォルダのファイルにDALアセンブリではなく、DALアセンブリのファイルが含まれていました。もちろん、Method1という名前の部分を実行したときに、「Method not found」というエラーが表示されました。

このエラーを修正するためにしなければならなかったのは、AnotherProjプロジェクトの参照をDAL.CustSpecから単なるDALに変更し、Temporary ASP.NET Filesフォルダ内のすべてのファイルを削除してから、Webサイトを再実行することでした。その後、すべてが機能し始めました。私はまた、DAL.CustSpecプロジェクトがビルド構成でそれをオフにしてビルドされていないことを確認しました。

将来他の誰かに役立つ場合はこれを共有すると思いました。

1
Ron Kanagy

Costura.Fody 1.6と2.0を使う:
これと同じ種類のエラーを調べても解決できない他のすべての解決策を探すとき、古いバージョンのDLLが同じディレクトリにあることがわかりました。から新しくコンパイルした.exeを実行していました。どうやらそれは最初に同じディレクトリでローカルファイルを探し、それからその組み込みライブラリの内側を見ます。古いDLLを削除するとうまくいきました。

明らかに、私の参照が古いDLLを指しているのではなく、古いDLLのコピーが、私のアプリケーションをテストしていたのとは別のシステム上のディレクトリにあるということでしたそれはコンパイルされました。

1
grep65535

万が一のために念のために、それは古い問題ですが、私の問題は少し奇妙だった。

Jenkinsを使用中にこのエラーが発生しました。

最終的にはシステムの日付が手動で未来の日付に設定されていることがわかりました。日付が通常の日付に設定されたとき、MSBuildはファイルがより新しく、プロジェクトの再コンパイルを必要としないと解釈しました。

0

私はこの問題に遭遇しました、そしてそれが私のためにだったのはExample.Sensors名前空間にあったListを使用していたそしてもう一つのタイプがISensorInfoインターフェースを実装していたことでした。 Type1SensorInfoクラス。ただし、このクラスは、Example.Sensors.Type1のネームスペースの1つ上の階層です。 Type1SensorInfoをリストに逆シリアル化しようとすると、例外がスローされました。 Example.Sensors.Type1を使用してISensorInfoインターフェイスに追加しても、これ以上例外はありません。

namespace Example
{
    public class ConfigFile
    {
        public ConfigFile()
        {
            Sensors = new List<ISensorInfo<Int32>>();
        }
        public List<ISensorInfo<Int32>> Sensors { get; set; }
     }
   }
}

**using Example.Sensors.Type1; // Added this to not throw the exception**
using System;

namespace Example.Sensors
{
    public interface ISensorInfo<T>
    {
        String SensorName { get; }
    }
}

using Example.Sensors;

namespace Example.Sensors.Type1
{
    public class Type1SensorInfo<T> : ISensorInfo<T>
    {
        public Type1SensorInfo() 
    }
}
0
Steven Koxlien

メソッドが指定していないパラメータを必要としたときにこの問題が発生しました

0
R2D2

私の場合、私のプロジェクトはMicrosoft.Net.Compilers.2.10.0を参照していました。 Microsoft.Net.Compilers.2.7.0に切り替えたとき、エラーは消えました。このようなさまざまな原因によるなんらかの不思議な誤りです。

0
jaycer

マイクロソフトからの参照バグでなければなりません。

私はきれいにし、私のすべてのライブラリで再構築しましたが、それでも同じ問題を抱えていてこれを解決できませんでした。

私がしたのは、Visual Studioアプリケーションを閉じて再度開くだけでした。それがトリックでした。

そのような単純な問題は、修正するのに長い時間がかかる可能性があることを非常に失望させます。

0
JayJay Barnard

私の場合、コードはまったく変更されておらず、突然1つのサーバーがこの例外と唯一の例外を取得し始めました(すべてのサーバーに同じコードがありますが、問題があるのは1つだけです)。

System.MissingMethodException: Method not found: '?'.

スタック:

Server stack trace: 
   at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
   at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(iMessage message)

Exception rethrown at [0]: 
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(iMessage reqMsg, iMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at myAccountSearch.AccountSearch.searchtPhone(searchtPhoneRequest request)
   at myAccountSearch.AccountSearchClient.myAccountSearch.AccountSearch.searchtPhone(searchtPhoneRequest request)
   at myAccountSearch.AccountSearchClient.searchtPhone(String ID, String HashID, searchtPhone Phone1)
   at WS.MyValidation(String AccountNumber, String PhoneNumber)

私が考えている問題はAppPoolが破損していた - 私たちは毎日午前3時にAppPoolのリサイクルを開始し、問題は午前3時に始まり、翌日の午前3時にそれ自身で終わりました。

0
George

私の場合、spotify.exeは私のWeb APIプロジェクトが開発マシン上で使用したいのと同じポートを使用していました。ポート番号は4381でした。

私はSpotifyを終了し、すべてがまたうまくいった:)

0
Arda Basoglu

バックグラウンドでMSBuildプロセスがいくつか実行されていて、それらが実質的にクラッシュした(古いバージョンのコードへの参照があった)場合も、同じことが起こります。私はVSを閉じ、プロセスエクスプローラですべてのMSBuildプロセスを終了させて​​から再コンパイルしました。

0
bytedev

私はそれぞれが同じDLLの(異なる場所にある)異なるバージョンを参照する2つの他のプロジェクトを参照するテストプロジェクトを持っていました。これはコンパイラを混乱させました。

0
nuander

これはMVC4を使用している私に起こりました、そして私はエラーを投げていたオブジェクトの名前を変更するためにこのスレッドを読んだ後に決めました。

私はきれいにそして再構築しました、そしてそれが2つのプロジェクトをスキップしていたことに注意しました。そのうちの1つを再構築したときに、関数を開始しても終了しないというエラーがありました。

それで、VSは私がそれをしたいかどうか私に尋ねないで書き直されたモデルを参照していました。

0
TheWizardOfTN