使用AppDomain.Load(byte [])而不从文件加载?

时间:2012-04-11 20:17:06

标签: reflection assemblies appdomain .net-assembly

我心烦意乱......我试图用一个程序集手动加载和卸载域:

        var domainInfo = new AppDomainSetup
                            {
                               PrivateBinPath = baseDir
                            };

        _hostedDomain = AppDomain.CreateDomain("Domain", null, domainInfo);
        _hostedDomain.UnhandledException += HostedDomainUnhandledException;
        _hostedDomain.DomainUnload += _hostedDomain_DomainUnload;

        var bytes = File.ReadAllBytes("Facade.dll"); // Loads facade from hosts location.
        _hostedDomain.Load(bytes);

        string asmName = Path.Combine(baseDir, Properties.Settings.Default.AssemblyName);
        bytes = File.ReadAllBytes(asmName);
        var entryPoint = _hostedDomain.Load(bytes); // exception here!

而我所看到的: 当我尝试加载程序集时,我看到系统从CurrentDir / assemblyname.dll加载它(并失败)。 例外:System.IO.FileNotFoundException:

无法加载文件或程序集Worker,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'或其依赖项之一。系统找不到指定的文件。

日志:此绑定在默认加载上下文中启动。 日志:使用应用程序配置文件:D:#Development!test \ trunk \ bin \ Debug \ Bootstrapper.vshost.exe.Config 日志:使用主机配置文件: 日志:使用C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ config \ machine.config中的计算机配置文件。 日志:此时策略未应用于引用(私有,自定义,部分或基于位置的程序集绑定)。 日志:尝试下载新的URL文件:/// D:/ #Development/!test / trunk / bin / Debug / Worker.DLL。 日志:尝试下载新的URL文件:/// D:/ #Development/!test / trunk / bin / Debug / Worker / Worker.DLL。 日志:尝试下载新的URL文件:/// D:/ #Development/!test / trunk / bin / Debug / Worker.EXE。 日志:尝试下载新的URL文件:/// D:/ #Development/!test / trunk / bin / Debug / Worker / Worker.EXE。

顺便说一句。由于限制,我不可能使用LoadFrom(我遇到了XML序列化的问题....)。 看看.NET在这个例程中做了什么? 为什么加载和卸载域这么难? 谢谢你的帮助!

0 个答案:

没有答案