我遇到了一个问题,我的 UWP 应用程序在 C# 中,但它利用了同一解决方案中的 Windows 运行时组件 C++ Dll。当我在 Debug 中运行我的应用程序时,我没有发现任何问题。但是当我在 Release (x86) 中运行时,我得到以下异常(发生在 VS 调试器中):
The specified module could not be found. (Exception from HRESULT: 0x8007007E
at System.StubHelpers.StubHelpers.GetWinRTFactoryObject(IntPtr pCPCMD)
at CppFunction()
at CsharpFucntion()
at System.Threading.Tasks.Task.InnerInvoke()
at System.Threading.Tasks.Task.Execute()
我的 C++ 组件确实与 oppenssl 链接(我从 Microsoft github 页面手动构建)。我已经尝试重建 openssl 组件,看看是否是问题所在,但没有帮助。
我还验证了 DLL 和 WINMD 文件存在于 bin\x86\Release\AppX 文件夹中
最佳答案
经过几天的摸索,我终于弄明白了这个问题。我们的团队有多个我们正在构建的 UWP 应用程序,我们有一些构建 DLL 的通用解决方案,供所有应用程序使用。
其中一个常见项目是构建非 Windows 运行时 C++ DLL (Windows Universal)。在我的解决方案的 C++ Windows 运行时组件中,我们静态链接到在构建上述 DLL 时创建的 .lib 文件,然后在打包应用程序时,我们将手动包含 DLL。
出于某种原因,除了 x86/Release 目标之外,此方法似乎在大多数目标中都能正常工作。
解决方案:创建一个包含公共(public) DLL 中所有代码文件的静态库项目,并改为链接到新的静态库。
关于c# - 从 C# 加载 C++ Windows 运行时组件时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34793017/