将现有 Windows ML 应用移植到 NuGet 包(C++)

在本教程中,我们将采用现有的 WinML 桌面应用程序并将其移植为使用 可再发行 NuGet 包

先决条件

  • WinML 应用程序。 如果要创建新应用程序,请参阅教程:创建 Windows 机器学习桌面应用程序(C++)
  • Windows 8.1 或更高版本
  • Visual Studio 2019(或 Visual Studio 2017 版本 15.7.4 或更高版本)
  • 下载 CppWinRT NuGet 包

将 NuGet 包添加到项目

在现有应用程序的 Visual Studio 项目中,导航到解决方案资源管理器,然后选择“管理解决方案的 NuGet 包”。 选择 Microsoft.AI.MachineLearning NuGet 包。 确保添加到正确的项目,然后按 安装

接下来,再次生成解决方案。 C++/WinRT 工具包将从 Microsoft.AI.MachineLearning NuGet 包分析新的标头和元数据,从而避免下一步中的混淆。

加入新标头

对于最佳做法,应添加一个控制标志,使应用能够在使用内置 Windows ML 和 NuGet 包之间来回切换。

#ifdef USE_WINML_NUGET
#include "winrt/Microsoft.AI.MachineLearning.h" 
#endif

更改命名空间

接下来,允许 Windows::AI::Machinelearning 使用控件标志切换到 Microsoft::AI::MachineLearning 命名空间。 通过进行此更改,代码将自动使用 NuGet 包(如果适用)。

#ifdef USE_WINML_NUGET 

Using namespace Microsoft::AI::MachineLearning 

#else 

Using namespace Windows::AI::MachineLearning 

#endif 

更改预处理器定义

现在,右键单击 解决方案资源管理器 中的项目,然后选择 属性。 在 属性 窗口中,选择 预处理器 页。 编辑 预处理器定义,并将其更改为 USE_WINML_NUGET:_DEBUG

保存生成配置

右键单击 解决方案资源管理器 中的解决方案,然后选择 属性。 在 属性 窗口中,选择 Configuration Manager。 打开 活动解决方案配置 的下拉菜单,然后选择“新建...”><。 输入新解决方案配置的名称,并确保选中 创建新项目配置。 现在,预处理器定义可以保存在所需的生成配置中。

生成并运行

应用程序现在已成功使用 WinML NuGet 包。