2

同じプロジェクトで同じ名前空間を持つ 2 つの DLL を参照することが可能であると信じるに至った記事をいくつか読みました - http://blogs.msdn.com/b/ansonh/archive/2006/09/ 27/774692.aspx

ただし、これを実行しようとすると、解決できない問題がいくつか発生します。

これが私がやったことです:

  1. クラス Model.MyClass を持つ V1.Model という名前のクラス ライブラリのプロジェクトを作成します。このアセンブリに署名します。
  2. Model.MyClass クラスを持つ、Model という名前のクラス ライブラリ用の別のプロジェクトを作成します。アセンブリに署名します。
  3. 上記の 2 つのプロジェクトから作成された DLL を Versions というフォルダーにコピーし、名前を変更します (V1.Model -> V1.Model.dll、Model -> V2.Model.dll)。
  4. V1.Model.dll と V2.Model.dll を参照する Test という名前のコンソール アプリケーション プロジェクトを作成します。
  5. V1.Model への参照の「Aliases」プロパティを「V1」に変更します。
  6. V2.Model への参照の「Aliases」プロパティを「V2」に変更します。
  7. 両方のアセンブリを参照する次のコードを作成します。

    外部エイリアス V1;
    外部エイリアス V2;

    static void Main(string[] args)
    {
    var v1 = new V1::Model.MyClass();
    var v2 = 新しい V2::Model.MyClass();
    }

  8. テストをビルドして実行する

これを行うと、いくつかの問題があります。

1 つは、V1.Model.dll が bin ディレクトリにコピーされていないことです。(実際、同じ名前空間の多くのバージョンを含めると、最新バージョンの DLL のみがコピーされているように見えます)。もちろん、手動で dll を bin ディレクトリにコピーすることでこの問題を回避できますが、なぜこれが必要なのか知りたいです。また、両方の参照で「Copy Local」プロパティを true に変更したことに注意してください。

2. アプリケーションを実行すると、次のエラーが表示されます。

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

私が間違っていることはありますか?

ありがとう、エリック

4

1 に答える 1

1

システムが「Model」という名前のアセンブリを見つけようとすると、「Model.dll」という名前のファイルが検索されます。これは、アセンブリをGACすることで解決できると思います。

于 2012-11-07T20:49:14.317 に答える