我正在CLRHostHelper.dll
使用方法加载新的程序集()Assembly.Load( byte[] )
。从我正在调用的那个程序集中AppDomain.CreateDomain
- 方法抛出异常:
Exception thrown: 'System.IO.FileNotFoundException' in mscorlib.dll
Additional information: Could not load file or assembly 'CLRHostHelper, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
据我所知,只有在磁盘上实际存在 .dll 时才能进行新的 appDomain 创建(使用AppDomainSetup domainSetup = new AppDomainSetup() { ApplicationBase = inDir };
可以指定从哪个文件夹中) - 并且不能仅将其加载到 ram 中。
可以使用AppDomain.CurrentDomain.AssemblyResolve += newapp_AssemblyResolve;
- 但该事件仅适用于当前 appDomain,不适用于新创建的。
也不可能立即挂钩新 appDomain 的 AssemblyResolve - 没有这样的方法。
在 AppDomainSetup 类中 - 还存在 AppDomainManagerAssembly 和 AppDomainManagerType - 更多信息可以从这里找到: https ://blogs.msdn.microsoft.com/shawnfa/2004/11/12/the-managed-hosting-api/ 理论上我们可以创建我们自己的 AppDomainManager,并覆盖 EntryAssembly 以提供我们自己的程序集,但是:
domainSetup.AppDomainManagerAssembly = Assembly.GetExecutingAssembly().FullName;
domainSetup.AppDomainManagerType = "EchoAppDomainManager";
在这里,您再次指定程序集名称,该名称又需要从磁盘加载。
在这里 - http://andrewzak.tumblr.com/ -Small .NET desktop applications. Turning on shadow copying.
有一些关于类似问题的提及,并且可能会使用SetAppDomainManagerType
- 但没有执行此操作的实际示例。也许你能找到别的地方?
谁能推荐我如何从 ram 中的程序集创建 appDomain 而无需从硬盘执行任何加载(一切都将保存在 ram 中)。