0

「C:\references\Utils.Varia.dll」への参照を持つ ASP.NET Web アプリケーションがあります。この dll の署名付きバージョンを使用する別の dll が参照されています (「C:\references\Utils.Varia.Signed.dll」)。

私のaspxには、次のインポートディレクティブがあります: <%@ Import Namespace="Utils.Varia" %>

このページでは、Utils.Varia.StringExtensions 拡張クラスの文字列拡張を使用しています。

しかし、実行時に次のエラーが発生します。

コンパイル エラー

説明: この要求を処理するために必要なリソースのコンパイル中にエラーが発生しました。次の特定のエラーの詳細を確認し、ソース コードを適切に変更してください。

コンパイラ エラー メッセージ: CS0121: 次のメソッドまたはプロパティの間で呼び出しがあいまいです: 'CONCENTRA.UTILS.StringExtensions.ToShortReadableString(string, int)' と 'CONCENTRA.UTILS.StringExtensions.ToShortReadableString(string, int)'

したがって、コンパイラは、拡張メソッドを署名済みの dll から取得するか、通常の dll から取得するかを認識していないと思います。

この仮定は正しいですか?もしそうなら、どうすれば正しいdllを指すことができますか?

[編集]
奇妙なことに、このコンパイラ エラーは aspx ファイル内のコードでのみ発生します。コードビハインドで同じ関数を使用すると、すべてが期待どおりに機能します。誰かがこれを説明できますか?

また、実際に署名されたバージョンを使用することは例外であり、他のすべてのコンポーネントは署名されていないバージョンを使用するため、代わりに署名されたバージョンを参照することはできません (明らかに 1 を除く)。

4

2 に答える 2

1

署名済みバージョンを参照するように Web アプリを変更します。

于 2010-10-11T15:10:23.743 に答える
0

デフォルトで .NET では簡単に回避できるのに、意図的にアプリで "DLL Hell" を復活させるために多くの苦労をしたようです。同じアセンブリの 2 つのバージョンが同じアプリケーションで参照されているのはなぜですか?

これらの参照の 1 つを削除する必要があり (ほとんどの場合、削除されるのは署名されていないものである必要があります)、そこからコードを使用するだけです。または、コードが異なるように他のものを変更します。

于 2010-10-11T15:14:10.320 に答える