0

最近、自分の Web サイトでスローダウンが発生しましたが、原因はすでに見つかりました。背後にある理由は、DA レイヤーのメソッドに IQueryable ではなく IEnumerable パラメーターがあるためです。DA のパラメーターは既にリファクタリングされており、ソリューションは正常にビルドされました。しかし、本番でDAのdllを差し替えたところ、BL層でメソッドが見つからないというエラーが発生しました。探していたメソッドは、IEnumerable パラメーターを持つ以前のメソッドでした。ソリューションで必ずコードをビルドしたときに、これが発生するのはなぜですか?

注: DA 以外の dll は置き換えていません。

4

1 に答える 1

1

ソリューションで必ずコードをビルドしたときに、これが発生するのはなぜですか?

おそらく、BLプロジェクトも再構築しているためです。それは問題ありません - メソッドはまだnameで存在し、新しいパラメータの型は渡された引数とおそらく互換性があるので、ソースはコンパイルされます。

しかし、DA アセンブリだけを置き換えようとすると、BL アセンブリ コードが実行されるときに、IEnumerableパラメータを持つメソッドが引き続き検索されますが、そのメソッドはもう存在しないため、例外が発生します。

簡単に言えば、メソッド パラメーターの型の変更は、バイナリ互換性の点で下位互換性のある変更ではありません。

プロジェクト全体を再構築し、DA アセンブリに依存するすべてのものと DA アセンブリ自体を置き換えるだけです。理想的には、ビルドするすべてのものを完全に置き換えます。これにより、アセンブリの一貫したセットがあることがわかります。

于 2016-10-20T15:04:01.027 に答える