DLLが1つを参照されているが、複数のバージョンがbinフォルダーに存在する場合、ASPXコンパイラが使用するDLLはどのdllになりますか
-
29-09-2019 - |
質問
'c: references utils.varia.dll'への参照があるASP.NET Webアプリケーションがあります。このDLLの署名バージョンを使用する別のDLLが参照されています( 'c: references utils.varia.signed.dll')。
今、私のASPXでは、次のインポート指令があります。
このページでは、utils.varia.stlingextensions extensionClassからの文字列拡張機能を使用しています。
しかし、実行時に次のエラーが発生します。
コンパイルエラー
説明:このリクエストのサービスに必要なリソースの編集中にエラーが発生しました。次の特定のエラーの詳細を確認し、ソースコードを適切に変更してください。
コンパイラエラーメッセージ:CS0121:コールは、次のメソッドまたはプロパティの間であいまいです: 'Concentra.utils.StringExtensions.ToshorTreadableString(String、Int)'および 'Concentra.util.stringextensions.toshortreadablestring(string、int)'
したがって、私の推測では、コンパイラは、署名されたDLLまたは通常のDLLから拡張メソッドを取得するかどうかわからないということです。
この仮定は正しいですか?もしそうなら、どのようにして正しいDLLを指すのですか?
編集
奇妙なことは、このコンパイラエラーがASPXファイル内のコードでのみ発生するということです。 CodeBehindで同じ関数を使用すると、すべてが期待どおりに機能します。誰かがこれを説明してもらえますか?
また、実際に署名されたバージョンを使用することが例外であるため、代わりに署名されたバージョンを参照することはできません。
解決
デフォルトでは避けている場合、アプリで意図的に「Dll Hell」を復活させるために多くのトラブルに陥ったようです。同じアプリケーションで参照されている同じアセンブリの2つのバージョンがあるのはなぜですか?
これらの参照のいずれかを削除する必要があります(おそらく、削除されている署名のないものでなければなりません)。そこからコードを使用するだけです。または、コードが異なるようにもう一方を変更します。
他のヒント
Webアプリを変更して、署名されたバージョンを参照してください。