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 из сборки, которая находится в оперативной памяти, без выполнения какой-либо загрузки с жесткого диска (все будет храниться в оперативной памяти).

0 ответов

Другие вопросы по тегам