Вызов удаленных методов загружает удаленную сборку в родительском домене приложения. - PullRequest
1 голос
/ 18 февраля 2012

Я думаю, что я определил, что, хотя я загружаю сборки в MarshalByRefObject в новом AppDomain, сборки также загружаются в родительский домен.

Вот моя структура Assembly (стрелки указывают на зависимость):

MainAssembly -> CommonInterfaceAssembly <- ExtensionAssembly

В родительском AppDomain я делаю это:

var loader = (ExtensionLoader)extDomain.CreateInstanceAndUnwrap (Assembly.GetExecutingAssembly().FullName, "ExtensionLoader");
loader.loadExtensions (this);

, а класс Loader:

class ExtensionLoader : MarshalByRefObject
{
    public List<IExtension> loadExtensions (ExtensionMgr mgr)
    {
        // Delegate to Addins to return the list of extensions
        AddinManager.Initialize ();
        AddinManager.Registry.Update ();
        AddinManager.GetExtensionObjects<IExtension> ();

        var extensions = new List<IExtension> (AddinManager.GetExtensionObjects<IExtension> ());
        foreach (var ext in extensions) {
            ext.Initialize (mgr);
        }
        return extensions;
    }
}

Я не знаюесли это имеет отношение к вопросу, но я использую Mono.Addins для загрузки расширений в новом домене приложений, поэтому я оставил этот код внутри. Из того, что я могу сказать, хотя все работает хорошо до того момента, когда я вызываю метод Initializeна каждом из расширений.

Таким образом, я запустил этот сценарий с ExtensionAssembly в том же каталоге, что и основной исполняемый файл, и в отдельном каталоге 'extensions'.Что мне интересно, так это то, что когда я вызываю ext.Initialize, либо ExtensionAssembly загружается в родительский AppDomain (если он существует в том же каталоге), либо я получаю трассировку стека ниже, если нет.Есть идеи почему?

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.  at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke (System.Runtime.Remoting.Proxies.RealProxy rp, IMessage msg, System.Exception& exc, System.Object[]& out_args) [0x001f0] in /home/tim/tmp/mono-2.10.8/mcs/class/corlib/System.Runtime.Remoting.Proxies/RealProxy.cs:247 

Exception rethrown at [1]: 
 ---> System.IO.FileNotFoundException: Could not load file or assembly 'Extensions, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
File name: 'Extensions, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'
  at System.AppDomain.Load (System.String assemblyString, System.Security.Policy.Evidence assemblySecurity, Boolean refonly) [0x00047] in /home/tim/tmp/mono-2.10.8/mcs/class/corlib/System/AppDomain.cs:785 
  at System.AppDomain.Load (System.String assemblyString) [0x00000] in /home/tim/tmp/mono-2.10.8/mcs/class/corlib/System/AppDomain.cs:762 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...