Невозможно создать несколько доменов приложений - PullRequest
0 голосов
/ 06 сентября 2018

В настоящее время я экспериментирую с размещением .NET CoreCLR в приложении C ++, чтобы реализовать какую-то систему плагинов.

Я использовал исходный код corerun в качестве основы для начала работы и для изучения того, как создать собственный хост, другие учебные пособия / документация, как правило, так или иначе терпели неудачу.
Наконец, я получил его на работу, я мог инициализировать среду выполнения, создать домен приложения и выполнить сборку .NET Core.

Следующим шагом для меня было запустить несколько сборок, поэтому я просто создал вторую тестовую сборку и попытался выполнить ее так же, как и первую.
На самом деле мое приложение делает следующее:

Initialize Runtime -> Create AppDomain1 -> Execute Assembly 1 -> Unload AppDomain 1
-> Create AppDomain2 -> Execute Assembly 2 -> Unload AppDomain2

К сожалению, я не смог даже создать второй домен приложений.
Мой код для создания AppDomain выглядит примерно так:

m_RuntimeHost->CreateAppDomainWithManager
(
    L"MyFriendlyName",
    appDomainFlags,
    nullptr,
    nullptr,
    sizeof(propertyKeys) / sizeof(wchar_t*),
    propertyKeys,
    propertyValues,
    &domainId
);

Мои appDomainFlags - это коды из corerun:

APPDOMAIN_ENABLE_PLATFORM_SPECIFIC_APPS |
APPDOMAIN_ENABLE_PINVOKE_AND_CLASSIC_COMINTEROP |
APPDOMAIN_DISABLE_TRANSPARENCY_ENFORCEMENT

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

Если я пытаюсь создать второй домен приложения, я просто получаю HRESULT 0x80131022 (Invalid operation).


Затем я приступил к проверенному созданию интерфейса среды выполнения и заменил исходные флаги запуска среды выполнения с:

STARTUP_FLAGS::STARTUP_LOADER_OPTIMIZATION_SINGLE_DOMAIN | STARTUP_FLAGS::STARTUP_SINGLE_APPDOMAIN | STARTUP_FLAGS::STARTUP_CONCURRENT_GC

до:

STARTUP_SERVER_GC | STARTUP_LOADER_OPTIMIZATION_MULTI_DOMAIN | STARTUP_LOADER_OPTIMIZATION_MULTI_DOMAIN_HOST

Это была просто игра в догадки, так как я пока не до конца понимаю, что именно делают эти флаги, но, к сожалению, это ничего не изменило.



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

...