当前位置: 首页 > 知识库问答 >
问题:

无法创建多个应用程序域

暴英达
2023-03-14

我目前正在试验托管。NET CoreCLR在C应用程序中基本上实现某种插件系统。

我使用corerun源代码作为基础,开始并探索如何构建本机主机—其他教程/文档通常以某种方式失败
最后我让它工作了,我可以初始化运行库,创建AppDomain并执行.NET Core程序集。

我的下一步是运行多个程序集,因此我只是创建了第二个测试程序集,并尝试以与第一个测试程序集相同的方式执行它。
实际上,我的应用程序执行以下操作:

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

不幸的是,我甚至无法创建第二个应用程序域。
我的应用程序域创建代码大致如下所示:

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

我的应用程序域标志核心运行代码中的那些:

APPDOMAIN_ENABLE_PLATFORM_SPECIFIC_APPS |
APPDOMAIN_ENABLE_PINVOKE_AND_CLASSIC_COMINTEROP |
APPDOMAIN_DISABLE_TRANSPARENCY_ENFORCEMENT

我只是假设我在这里传递的所有属性都是正确的,因为AppDomain的创建至少工作过一次。

如果我尝试创建第二个AppDomain,我只收到HRESULT 0x80131022(无效操作)

< br >

然后,我继续检查运行时接口的创建,并替换了运行时的原始启动标志:

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

这只是一个猜谜游戏,因为我还不完全明白这些旗帜到底有什么作用,但不幸的是,它没有改变任何事情。

< br>
我真的不知道更多,但我想我遗漏了一些重要的东西。< br >关于这个主题的文档和文章很少,所以我希望这里有人能帮我或者给我一些提示。

共有1个答案

山越
2023-03-14

我最近做了一些关于托管和运行多个AppDomains的研究。这是我在微软文档和GitHub网站上找到的

步骤 2 - 获取 .NET Core 承载函数 CoreClrHost 具有几个对托管 .NET Core 有用的重要方法:

    < Li > < code > core clr _ initialize :启动。NET核心运行时,并设置默认的(也是唯一的)AppDomain。 < Li > < code > core clr _ execute _ assembly :执行托管程序集。 < Li > < code > core clr _ create _ delegate :创建指向托管方法的函数指针。 < Li > < code > core clr _ shut down :关闭。NET核心运行时。 < Li > < code > coreclr_shutdown _ 2 :类似于core clr _ shut down,但也检索托管代码的退出代码。

我认为这意味着,“你只能启动一个AppDomain”

 类似资料:
  • 我正在尝试运行,但它似乎没有按应有的方式工作。我正在尝试以下命令: 创建react应用程序我的应用程序 cd我的应用程序 npm启动 如果您可以帮助此处输入图像描述,那么在尝试运行时会出现以下错误

  • 我对这个还不熟悉,我误解了Gunicorn烧瓶的工作原理。 当我用4个工人运行Gunicorn时,它会创建我的Flask应用程序的4个实例,或者它会创建4个进程来处理来自Nginx的web请求和一个Flask应用程序实例? 如果我在我的应用程序中简单地实现内存缓存(例如字典),Gunicorn会创建多个应用程序实例,从而创建多个缓存实例吗?

  • Ember CLI,Ember的命令行界面提供了一个标准的项目结构,一组开发工具和一个插件系统。这允许Ember开发人员专注于构建应用程序,而不是构建使它们运行的​​支持结构。可通过ember --help显示Ember CLI提供的命令,或通过ember help <command-name>查看特定命令的信息。 创建应用程序 $ ember new super-rentals 上述ember

  • 在gradle attemp构建项目后有一个日志(使用Pro buf) :app:GeneratedBugProto失败 失败:生成失败,出现异常。 > 错误:任务“:app:generateDebugProto”的执行失败。 协议:标准输出:。stderr:/Users//app/build/extracted protos/main:警告:目录不存在/用户//app/src/debug/pro

  • 我正试图使用Maven在Eclipse中创建一个Vaadin应用程序,但无法这样做。官方说明(https://vaadin.com/wiki/-/wiki/main/creating%20an%20Eclipse%20project)说要在Eclipse中创建一个新的Maven项目,在原型列表中创建“”vaadin-archetype-application“,我看不到这种类型的东西,然后,我添加