Assembly.Load + AppDomain.CreateDomain
Я загружаю новую сборку (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.
Насколько я понимаю, создание нового appDomain может продолжаться только в том случае, если на диске физически существует.dll (используя AppDomainSetup domainSetup = new AppDomainSetup() { ApplicationBase = inDir };
можно указать из какой папки) - и загрузить его только в оперативную память невозможно.
Можно использовать AppDomain.CurrentDomain.AssemblyResolve += newapp_AssemblyResolve;
- но это событие применимо только к текущему домену приложения, а не к вновь созданному.
Также невозможно сразу подключить AssemblyResolve нового appDomain - такого метода нет.
В классе 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
- но нет практического примера выполнения этой операции. Может быть, вы можете найти где-нибудь еще?
Может кто-нибудь порекомендовать мне, как создать appDomain из сборки, которая находится в оперативной памяти, без выполнения какой-либо загрузки с жесткого диска (все будет храниться в оперативной памяти).