ijwhost.dll 加载为 /clr:netcore 编译的托管 CLI C++ 项目时出现异常

问题描述 投票:0回答:1

我的解决方案遇到了一个问题,该解决方案由调用托管 C++ (CLR) 的本机 C++ 应用程序组成,而托管 C++ (CLR) 又引用 C# 项目。 (典型的本地托管桥实现)

代码在我的开发机器上编译并成功运行。但是,一旦我将其移动到临时服务器,我就会收到以下错误:

Faulting application name: POC_MOCK.exe, version: 0.0.0.0, time stamp: 0x62c75fef
Faulting module name: ucrtbase.DLL, version: 10.0.14393.2990, time stamp: 0x5caeb859
Exception code: 0xc0000409
Fault offset: 0x000884cb
Faulting process id: 0x1c9c
Faulting application start time: 0x01d8927e8d0fe66f
Faulting application path: D:\test\POC_MOCK.exe
Faulting module path: C:\Windows\SYSTEM32\ucrtbase.DLL
Report Id: cad1e77c-fe71-11ec-80fe-000c297ddf34
Faulting package full name: 
Faulting package-relative application ID:

通过 winDBG 调查故障转储时,我发现 ijwhost.dll 导致了异常。

STACK_TEXT:  
00e2fc60 5e00c672     e06d7363 00000001 00000003 KERNELBASE!RaiseException+0x48
00e2fc90 5e001405     00e2fcb0 5e015750 00f58fe8 Ijwhost!_CxxThrowException+0x66
00e2fcdc 5e009d4c     013c0667 00000000 00f5dc20 Ijwhost!start_runtime_and_get_target_address+0x138
00e2fcf0 5e0b1fc5     c42602c1 00f5a430 00f5dc20 Ijwhost!start_runtime_thunk_stub+0xc
00e2fd10 01201041     9b12698d 73d9cf33 9b12698d CPPWrapper!CPPWrapper::CPPWrapper+0x45
00e2fd30 0120159c     00000001 00f5a430 00f58fe8 POC_MOCK!main+0x41
00e2fd78 74bd6a14     7f218000 74bd69f0 eefe366c POC_MOCK!__scrt_common_main_seh+0xfa
00e2fd8c 7712a9ff     7f218000 ed2f7874 00000000 kernel32!BaseThreadInitThunk+0x24
00e2fdd4 7712a9ca     ffffffff 7710fdc7 00000000 ntdll!__RtlUserThreadStart+0x2f
00e2fde4 00000000     01201624 7f218000 00000000 ntdll!_RtlUserThreadStart+0x1b

FAULTING_SOURCE_LINE:  D:\a\_work\1\s\src\installer\corehost\cli\ijwhost\ijwthunk.cpp
FAULTING_SOURCE_FILE:  D:\a\_work\1\s\src\installer\corehost\cli\ijwhost\ijwthunk.cpp
FAULTING_SOURCE_LINE_NUMBER:  153

FAULTING_SOURCE_CODE:  
No source found for 'D:\a\_work\1\s\src\installer\corehost\cli\ijwhost\ijwthunk.cpp'

SYMBOL_NAME:  ijwhost!start_runtime_and_get_target_address+138
MODULE_NAME: Ijwhost
IMAGE_NAME:  Ijwhost.dll
STACK_COMMAND:  .cxr 0xe2f920 ; kb
FAILURE_BUCKET_ID:  FAIL_FAST_FATAL_APP_EXIT_CPP_EXCEPTION_c0000409_Ijwhost.dll!start_runtime_and_get_target_address
OS_VERSION:  6.3.9600.18217
BUILDLAB_STR:  winblue_ltsb
OSPLATFORM_TYPE:  x86
OSNAME:  Windows 8.1
IMAGE_VERSION:  5.0.1722.21314
FAILURE_ID_HASH:  {b2047410-307d-cb83-9a4d-78b763edf2d5}
Followup:     MachineOwner

我不知道为什么 Ijwhost::start_runtime_and_get_target_address 失败。 这似乎与我通过谷歌和 StackOverflow 找到的大多数问题有点不同,所以尝试了其中的一些建议对我来说不起作用。 成功构建后,ijwhost.dll 确实存在,位于 .EXE 和 .DLL 旁边。

如上面的堆栈跟踪所示,问题是在构造 CPPWrapper 时发生的,我取出了对任何 C# 的所有引用,但仍然收到错误。

因此,仅仅尝试调用 CLR DLL 的构造函数就会出错。

非常感谢任何提示、反馈!

开发。甚至: Win 10 专业版、VS2022、VC++ v143、.NET6 和 .NetCore 3.1

舞台环境: Win Server 2012,安装了项目运行所需的软件包,并确认为 x86 和 x64 安装了 .net core 3.1 以保证安全。

c++ .net-core c++-cli
1个回答
0
投票

我在加载 C++/CLI dll 之前立即加载 ijwhost.dll(通过具有显式目录的 LoadLibrary),但可能有更好的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.