2

メソッドを使用して新しいアセンブリ ( 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 に保持されます)。

4

0 に答える 0