1

ご挨拶、

ライブラリが私が指定した特定のガイドラインに準拠している限り、ユーザーが作成したライブラリ (.NET DLL) をインポートできるようにするアプリケーションがあります (名前空間を使用する、メソッドを属性で装飾するなど)。各ユーザー ライブラリを内部ディレクトリにコピーし、それを独自のアプリ ドメインにロードします (必要に応じてユーザーがアンロードできるようにします)。したがって、同じ名前の 2 つのライブラリをロードできないという制限があります。

各ユーザー lib を内部ディレクトリの一意のサブディレクトリに配置せずに、この制限を削除したいと思います。内部ディレクトリにコピーするときに、ユーザー lib の名前を変更しようとしました。たとえば、ユーザーが c:\SomeLib.dll をインポートするように言い、SomeLib.dll という名前のライブラリが既に読み込まれていることを検出した場合、新しいファイルを ...\MyInternalDir\SomeLib2.dll にコピーします。ただし、これを行うと、ロードコマンドは次のようになります。

(ISomeInterface) iSomeLib = someAppDomain.CreateInstanceAndUnwrap(
                                    "SomeLib2", 
                                    "SomeNamespace.SomeClassInSomeLib");

例外をスローします:

FileLoadException: ファイルまたはアセンブリ 'MyLib2' またはその依存関係の 1 つを読み込めませんでした。見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません。(HRESULT からの例外: 0x80131040)

.NET に「コンパイル後にファイル名が変更されたという事実を無視する」ように指示する方法はありますか?

4

1 に答える 1

1

オーバーロードを試すことを検討しましたか?

someAppDomain.CreateInstanceFrom(string assemblyFile, string typeName)

新しいdll名がわかっている場合は、名前を変更したので、指定したdllからインスタンスを作成するようにAppDomainに依頼できます。そうすれば、.Netは、アセンブリ名とアセンブリファイル名が一致するかどうかを気にする必要がありません。

「実際に試したことはない」という前置きが必要でしたが、これは単なる提案です。

于 2010-01-07T21:33:24.723 に答える