次のロード アセンブリ コードを指定します。
public class LoadAssembly : MarshalByRefObject, ILoadAssembly
{
private readonly AppDomain currentDomain;
public LoadAssembly()
{
currentDomain = AppDomain.CurrentDomain;
}
public void LoadFromFile(string filePath)
{
//currentDomain has no assemblies:
Assembly.LoadFrom(filePath);
//currentDomain has assemblies:
}
}
次のテストがあるとします。
var appDomain = AppDomain.CreateDomain("test", null,
new AppDomainSetup
{
ConfigurationFile = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile,
ApplicationBase = AppDomain.CurrentDomain.BaseDirectory,
ShadowCopyFiles = "false"
});
var t = typeof(LoadAssembly);
//appDomain has no assemblies.
var loader = (ILoadAssembly)appDomain.CreateInstanceFromAndUnwrap(t.Assembly.Location, t.FullName);
loader.LoadFromFile("some path to a correct dll.");
//issue appDomain still has no assemblies.
アセンブリを新しい AppDomain に読み込もうとしています。
次に、すべてのアセンブリが新しい AppDomain に読み込まれたことをアサートします。
LoadAssembly.LoadFromFile 内で、currentDomain に読み込まれたアセンブリがあることがわかります。
ただし、LoadAssembly クラスの外部で appDomain を使用しようとすると、予期したアセンブリが読み込まれません。何か案は?
var appDomain; 手動(プロキシ)には、クラスのインスタンスの外にアセンブリがありません。