51

別のプロジェクトのクラスのメソッドにアクセスしようとしている ASP.Net c# プロジェクトがあります。クラスのメソッドの前半では機能しますが、最近追加したクラスのメソッドの残りの半分では機能しません。それらはコンパイルされますが、実行時にメソッドが見つからないという例外がスローされます。

私が試すことができるアイデアはありますか?私はもう試した:

  1. .slnファイルの再作成
  2. 私が知っている別のクラスライブラリプロジェクトでのサブビング。エラーは、他のプロジェクトのメソッドを呼び出すメイン プロジェクトにあるようです。
4

24 に答える 24

74

「メソッドが見つかりません」は非常に特殊なエラーです。これは、予期していた(つまり、コンパイル時に存在していた) メソッドが単に存在しないことを意味します。これは通常、展開しているファイルがあなたが思っているものとは異なることを意味します。具体的には、古いバージョンのライブラリを展開していることに賭けます (これには追加がありません)。

Web サーバーにデプロイされた dll を、本来あるべきものと比較してチェックします

于 2011-09-28T05:23:16.223 に答える
10

この種の問題に直面しましたが、解決できました。bin と debug フォルダーを空にして、プロジェクトを再度ビルドしてみました。少なくとも私にとってはうまくいきました。または、ソリューションをクリーンアップして再構築してみてください。しかしもちろん、コードの一部を投稿することは、より役立つ可能性があります。

于 2011-09-28T05:30:00.157 に答える
9

私の場合、webconfigでoptimizeCompilationsをfalseに設定すると問題が解決しました

于 2015-01-12T09:52:11.353 に答える
4

この同じ例外も発生しましたが、問題は異なりましたが、ライブラリの1つに元々次のようなメソッドがありました。

public void WriteMessage(string msg) 
{
    ...
}

いくつかの新しい変更要求があり、次のようになりました。

public void WriteMessage(string msg, int code = 100)
{
    ...
}

その後、このライブラリを使用しているプロジェクトを新しくコンパイルされたバイナリで更新したところ、この例外がスローされ始めました。

何度も試みた後、プロジェクトのクリーン、再構築、参照の削除と再追加でさえ、何も機能しませんでした。次に、プロジェクトのメソッド呼び出しを次から変更しようとしました。

...
library.WriteMessage('hello!');
...

に:

...
library.WriteMessage('hello!', 100);
...

その後、プロジェクトをコンパイルすると、問題が解決しました。その後、次のように変更しました。

...
library.WriteMessage('hello!');
...

そして今、それは魔法のようにすべてを修正しました。更新されていない何らかのキャッシュされたメタデータがどこかに残っていた可能性があります。メソッドの呼び出し方法を変更することで、メソッドのシグネチャが異なるが、それほど異なるわけではないことを明確に思い出させます。

これが、私が経験したのと同じ問題に直面している誰かの助けになることを願っています.

于 2016-05-06T09:47:56.813 に答える
3

ほら、これはこれまでで最も奇妙な原因に違いありませんが、午前中すべてを試したり、プロジェクトを最初から再構築したりした後、問題を回避できる唯一の方法は、ライブラリに別のアセンブリ名がある場合であることに気付きました。

以前のバージョンの dll を GAC にインストールしたのではないかという恐ろしい提案が心の奥底からありましたが、それは既に確認済みであり、その上、意図したものではありませんでした。しかし、その道をたどると、このdll(およびプロジェクトの他のすべてのもの)がC:\ Program Files(x86)\ Microsoft Visual Studio 10.0\Common7\IDEにインストールされていることがわかりました!!!!!!

ああああ!どういうわけかこれを台無しにしたのは私だけだと思いますが、その理由はわかりません.

于 2013-01-18T12:48:13.073 に答える
2

nuget パッケージで管理されている dll を使用してアプリケーションを実行しているときに、同じ問題が発生しました。nuget パッケージ マネージャーから dll を更新しようとすると、テスト レイヤーが更新されませんでした。参照しているdllのバージョンを確認することをお勧めします。VS で ObjectBrower に移動し、dll を確認して参照場所を確認します。最新の dll を参照していることを確認してください。

于 2016-05-12T15:21:14.067 に答える
1

私は同じ問題を抱えていたので、メソッド名を別の名前に変更し、参照を変更しました。それからそれはうまくいきました。何が問題だったのかわかりませんが、システム全体に適用されない状況でメソッド名を変更するとバグがあるようです。

于 2015-10-21T06:23:26.240 に答える
0

私の場合、コンパイル ターゲットは .NET 3.5 でしたが、.NET 3.0 PC (Windows XP) に展開しました。もっと基本的な警告がないのは本当に不思議です...

問題は、System.Runtime.Serialisation からの DataContract の使用です。

于 2014-04-17T10:47:50.877 に答える
0

私の場合、メソッドの戻り値の型を IQueryable から IEnumerable に変更しました。

メソッドを含むDLLを再コンパイルしてアップロードしましたが、メソッドを呼び出すコードを含むDLLはアップロードしませんでした。そのため、呼び出し元の DLL は、以前の戻り値の型を持つメソッドをまだ期待していたため、それを見つけることができませんでした。

于 2017-06-29T08:37:52.780 に答える
0

Nirman の回答に加えて、クリアな一時ファイルの場所を忘れないでくださいC:\Users\UserName\AppData\Local\Temp\Temporary ASP.NET Files

クラスフィールドのタイプを列挙型から文字列に変更した後、エラーが発生しました

System.MissingMethodException: メソッドが見つかりません: 'DatnesVeidi DatnesModel.get_DatnesVeids()'

Razor ビューをレンダリングするとき。ユーザーのローカル一時ファイルをクリアするだけで、以前の提案はどれも役に立ちませんでした。

于 2019-10-09T13:34:11.637 に答える