原生模块故障排除
需要进行架构审查:本文档旨在支持针对 React Native 的“旧”或“遗留”架构的开发。它可能适用也可能不适用于新架构的开发,需要审查并可能需要更新。有关 React Native Windows 中 React Native 架构的信息,请参阅新旧架构。
有关 Windows 上原生开发的最新信息,请参阅原生平台:概述。
你添加了一个新的原生模块或模块的新方法,但它不工作,现在该怎么办?!
常见问题
我的原生方法没有在 VS 调试器中被命中
方法未被调用的一个可能原因是你的方法接受/返回的预期类型与实际类型不匹配。
要调试是什么原因导致调用被拒绝,请在 facebook::react::CxxNativeModule::invoke
中设置一个断点。这个断点会经常被命中(每次调用原生方法时),所以我们想确保只在我们感兴趣的方法涉及时才中断。
右键单击断点以添加条件。假设你感兴趣的捕获方法名为 getString
。条件断点条件应比较方法名称与该字符串:strcmp(method.name._Mypair._Myval2._Bx._Ptr, "getString")==0
编译错误 'XamlMetaDataProvider': 不是 'winrt::MyModuleName' 的成员
Error C2039 'XamlMetaDataProvider': is not a member of 'winrt::MyModuleName'
Error C2039 'MyModuleName_XamlTypeInfo': is not a member of 'winrt::MyModuleName'
如果你的模块包含一些 XAML 标记,并且你没有从 C++ 应用程序中引用 XAML 类型信息,则可能会发生这种情况。要解决此问题,请将以下内容添加到你的 C++ 应用程序的 pch.h
文件中
#include <winrt/MyModuleName.MyNamespaceName_XamlTypeInfo.h>
(通常 MyModuleName
和 MyNamespaceName
将相同,你可以在 C# 项目的属性窗格中根命名空间下检查)。
应用程序在尝试加载 C# 组件或实例化其类型之一时崩溃
错误 0x80131040 "已定位程序集的清单定义与程序集引用不匹配"
使用 C# 编写的原生模块的 C++ 应用程序需要特别注意。C# 和 C++ 之间的互操作性存在一个错误:https://github.com/microsoft/dotnet/issues/1196。
症状是应用程序构建正常,但 C++ 应用程序在运行时尝试加载 C# 模块时会崩溃,并出现错误 0x80131040 : 已定位程序集的清单定义与程序集引用不匹配。
可以在此处找到问题的详细说明。
截至 RNW 0.62,你可以在 C++ 应用程序中启用 ConsumeCSharpModules
属性来解决此问题
- 在你的 .vcxproj 文件中,在
<PropertyGroup Label="ReactNativeWindowsProps">
中设置此属性
<PropertyGroup Label="ReactNativeWindowsProps">
<ReactNativeWindowsDir Condition="'$(ReactNativeWindowsDir)' == ''">$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), 'node_modules\react-native-windows\package.json'))\node_modules\react-native-windows\</ReactNativeWindowsDir>
+ <ConsumeCSharpModules>true</ConsumeCSharpModules>
</PropertyGroup>
如果上述解决方法不起作用,你可以尝试另外两种(较旧的)解决方法
- 将你的 C# 组件的目标 Windows 版本设置为 Windows 10 版本 1703 (Build 15063) 或更低。
- 在你的 C++ 应用程序中引用 .NET Native NuGet 包
- 右键单击应用程序的 .vcxproj 文件 → 管理 NuGet 包。
- 搜索
Microsoft.Net.Native.Compiler
,并安装它。 - 然后将以下属性添加到 .vcxproj 文件中
<PropertyGroup> <UseDotNetNativeToolchain Condition="'$(Configuration)'=='Release'">true</UseDotNetNativeToolchain> <DotNetNativeVersion>2.2.3</DotNetNativeVersion> </PropertyGroup>
其他资源
有关更多信息和故障排除说明,请参阅以下文章