新しいAppDomainの特定の "extensions"ディレクトリからすべてのDLLを読み込んで、Reflection関連の情報を取得しています。別のAppDomainからアセンブリ参照を受け取る際の例外
これは私がしようとしているものです:私はこのDLLは、私の「拡張子」の内部に存在することを確認してください
public class AssemblyProxy : MarshalByRefObject
{
public Assembly LoadFile(string assemblyPath)
{
try
{
return Assembly.LoadFile(assemblyPath);
}
catch
{
return null;
}
}
}
:
を私はこのクラスを持っている私の溶液中での新しいライブラリAssemblyProxy
を作成ディレクトリ。次に、次のコードを使用して、すべてのアセンブリを "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.
EDITを:例外が新しいのAppDomainにスローされません。 DLLは新しいAppDomainに正常に読み込まれます。アセンブリ参照がメイン/呼び出しAppDomainに返されるとすぐに例外がスローされます。メイン/呼び出し元のAppDomainは参照を受信するだけでアセンブリをロードしようとしますか?
ありがとうございました。
あなたがメインAppDomain
が、それはアセンブリがディレクトリに配置されていないので、それらのアセンブリへのアクセスがある場合にのみ動作しますので、あなたは新しい
AppDomain
から
Assembly
オブジェクトを返すべきではありません
何を試しましたか? –
['ReflectionLoadOnly'](http://msdn.microsoft.com/en-us/library/ms172331(v=vs.100).aspx)は、あなたの目的に十分ですか? –
[CreateInstanceAndUnwrap](http://msdn.microsoft.com/en-us/library/system.appdomain.createinstancefromandunwrap.aspx)の何が問題ですか? – Algirdas