1

次のロード アセンブリ コードを指定します。

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; 手動(プロキシ)には、クラスのインスタンスの外にアセンブリがありません。

4

0 に答える 0