メソッドを使用して新しいアセンブリ ( 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 };
すると、どのフォルダーから指定することができます) - 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 に保持されます)。