2

次のようなクラス レイアウトを使用すると、非常に奇妙な動作が発生することに気付きました。

// Contents of assembly A:
public class MyParentClass
{
    public class NestedClass
    {
    }
}

// Contents of assembly B:
public class AnotherClass : List<MyParentClass.NestedClass>
{
}

アセンブリ A をアセンブリ B の依存関係として追加できます。この例ではエラー メッセージが表示されずにコンパイルされますが、たとえば、ユニット テストの参照としてアセンブリ B を読み込むと、このエラーが表示されます。単体テストをコンパイルします。

ファイルまたはアセンブリ 'AssemblyB、Version=1.0.0.0、Culture=neutral、PublicKeyToken=null' またはその依存関係の 1 つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。

このコードが生成するアセンブリは実際に機能し、Redgate Reflector を使用して生成された DLL を実行し、コードを期待どおりに表示できますが、単体テストで読み込みが拒否されます。

この問題が、別のアセンブリにあるネストされたクラスを呼び出しているという事実に関係していることはほぼ確実であり、とにかくこの設計をリファクタリングすることになるでしょうが、なぜこれが機能しないのかを本当に知りたいです期待される。この方法でクラスを使用する際に問題が発生した場合、コンパイラが例外をスローすることが予想されます。

お時間をいただきありがとうございます。

4

3 に答える 3

0

その参照に対して「ローカルにコピー」が有効になっていますか? アセンブリ B をテストするテスト プロジェクトには、アセンブリ A のコピーがないと仮定します。参照で「ローカルのコピー」を true に設定すると、アセンブリがコピーされ、テストのコンパイル (および最終的な実行) 時に正しく検出されるようになります。 .

于 2010-11-23T10:10:56.060 に答える
0

これがネストされたクラスと関係があるとは思えません..NETで表面化されている推移的な依存関係の欠如だけです.

基本的に、1 つのプロジェクトで使用する場合は、 と の両方AnotherClassの参照を明示的に追加する必要があります。そうすれば、両方を適切にコピーしてロードする必要があります。AssemblyB AssemblyA

それでも問題が解決しない場合は、Fusion Logging を有効にしてみてください。

于 2010-11-23T10:26:13.647 に答える
0

プロジェクトのターゲット フレームワークが "Framework 4 Client Profile" に設定されていて、リンクされた dll にターゲット フレームワーク "Framework 4" がある場合、Visual Studio 2010 でこのエラー メッセージが表示されます。

プロジェクト設定で確認してください。

于 2010-11-23T10:34:26.923 に答える