新しい AppDomain の特定の「拡張機能」ディレクトリからすべての DLL をロードして、そこからリフレクション関連の情報を取得しています。
これは私がしようとしているものです:
AssemblyProxy
このクラスだけを持つソリューションに新しいライブラリを作成しました。
public class AssemblyProxy : MarshalByRefObject
{
public Assembly LoadFile( string assemblyPath )
{
try
{
return Assembly.LoadFile( assemblyPath );
}
catch
{
return null;
}
}
}
この DLL が "extensions" ディレクトリ内にあることを確認します。次に、次のコードを使用して、すべてのアセンブリを「extensions」ディレクトリから新しいAppDomain
.
foreach( string extensionFile in Directory.GetFiles( ExtensionsDirectory, "*.dll" ) )
{
Type type = typeof( AssemblyProxy.AssemblyProxy );
var value = (AssemblyProxy.AssemblyProxy) Domain.CreateInstanceAndUnwrap(
type.Assembly.FullName,
type.FullName );
var extensionAssembly = value.LoadFile( extensionFile );
types.AddRange( extensionAssembly.GetTypes() );
}
一部の DLL は正常にロードされますが、一部の DLL では次のように例外がスローされます。
Could not load file or assembly 'Drivers, Version=2.3.0.77, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
編集: 新しい AppDomain では例外はスローされません。DLL が新しい AppDomain に正常に読み込まれます。アセンブリ参照がメイン/呼び出し元の AppDomain に返されるとすぐに、例外がスローされます。メイン/呼び出し元の AppDomain は、参照を受け取るだけでアセンブリを独自に読み込もうとしますか?
ありがとう。