管理 C++ 依赖项
需要进行架构审查:本文档旨在支持针对 React Native 的“旧”或“遗留”架构的开发。它可能适用也可能不适用于新架构的开发,需要审查并可能需要更新。有关 React Native Windows 中 React Native 架构的信息,请参阅新旧架构。
在使用社区模块或其他 Visual C++ 项目时需要考虑的细节。
详情
带有原生代码的应用程序,无论是用 C#
还是 C++
编写的,都可能添加对原生 Visual C++ (.vcxproj
) 项目的源依赖项。这意味着此类依赖项将作为应用程序的一部分进行构建。
从 0.68
版本开始,React Native for Windows 应用程序对原生 C++
NuGet 依赖项使用 PackageReference
恢复项目样式。主要变化是 NuGet 包直接放置在用户账户的 globalPackagesFolder
缓存中,而不是也复制到相对于 Visual Studio 解决方案位置的本地文件夹中(参见 repositoryPath
)。
这可能与使用更常见的 packages.config
项目样式的 C++ 依赖项冲突,包括针对早于 0.68 版本的社区模块。
更新你的应用
添加 React Native Windows C++ 依赖项(例如 RN Picker)
yarn add @react-native-picker/picker
packages.config
文件
在你的应用项目目录中添加一个 React Native Windows 构建系统将尝试从源代码构建依赖项。因为它使用 packages.config
恢复样式,所以它很可能期望其自己的 NuGet 依赖项恢复到 $(SolutionDir)packages\
。
node_modules\@react-native-picker\picker\windows\ReactNativePicker\ReactNativePicker.vcxproj
参见 <Import Project="$(SolutionDir)\packages\Microsoft.Windows.CppWinRT.2.0.210312.4\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('$(SolutionDir)\packages\Microsoft.Windows.CppWinRT.2.0.210312.4\build\native\Microsoft.Windows.CppWinRT.targets')" />
<Import Project="$(SolutionDir)\packages\$(WinUIPackageName).$(WinUIPackageVersion)\build\native\$(WinUIPackageName).targets" Condition="Exists('$(SolutionDir)\packages\$(WinUIPackageName).$(WinUIPackageVersion)\build\native\$(WinUIPackageName).targets')" />
windows\<C++ 或 C# 应用程序目录>\packages.config
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.Windows.CppWinRT" version="2.0.210312.4" targetFramework="native" />
<package id="Microsoft.UI.Xaml" version="2.3.191129002" targetFramework="native" />
</packages>
通过这种方式,你的 React Native Windows 应用程序会将外部 NuGet 依赖项恢复到预期位置。
使用 MSBuild.exe 构建(高级)
在 React Native Windows 项目中引入 PackageReference
会覆盖 MSBuild 引擎中的 packages.config
NuGet 恢复样式。
这意味着普通的 MSBuild.exe
将假定所有项目都使用 PackageReference
,因此,添加到你的应用程序中并使用 packages.config
的任何社区项目都不会恢复其依赖项。
要仅使用 MSBuild CLI 成功恢复和构建你的应用程序,请运行以下命令:
MSBuild.exe /t:Restore "/p:RestoreProjectStyle=PackagesConfig;RestorePackagesConfig=true" your_solution.sln
MSBuild.exe /restore your_solution.sln
第一个命令显式地将解决方案中找到的任何 packages.config
依赖项恢复到预定义的目录(通常是解决方案路径中的 packages
文件夹)。
第二个命令隐式地使用现在默认的恢复样式 PackageReference
恢复并构建解决方案,从而恢复剩余的 NuGet 依赖项。
请注意,这些步骤在 Visual Studio 中构建或使用 React Native Windows CLI 时会自动完成。