Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Cuando estés listo para distribuir tu aplicación de C# o C++ que usa Windows ML, tendrás que seguir algunos pasos adicionales para asegurarte de que Windows ML Runtime se implemente en los dispositivos de los usuarios. Al implementar la aplicación en su propio dispositivo, el paquete NuGet lo configura automáticamente en su propio dispositivo.
Importante
Las API de Windows ML son actualmente experimentales y no se admiten para su uso en entornos de producción. Las aplicaciones que prueban estas API no deben publicarse en Microsoft Store.
Nota:
Las aplicaciones de Python no necesitan realizar ningún paso de distribución adicional. Los elementos iniciales pip install
y import
descritos en la página ejecutar modelos ONNX incluyen todo lo necesario para distribuir tu aplicación.
Estructura de paquetes MSIX
El paquete NuGet incluye paquetes MSIX que contienen el entorno de ejecución de Windows ML. Debe implementar estos paquetes como parte del proceso de instalación de la aplicación.
Puede indicar al paquete NuGet que copie estos archivos en el directorio de salida estableciendo el WinMLDeployMSIXToOutput
en true
.
<PropertyGroup>
<!-- Copy architecture-specific MSIX files to output directory -->
<WinMLDeployMSIXToOutput>true</WinMLDeployMSIXToOutput>
<!-- Installers should not enable auto-initialization -->
<WinMLBootstrapAutoInitializeDisabled>true</WinMLBootstrapAutoInitializeDisabled>
</PropertyGroup>
Los paquetes MSIX se copiarán en tu directorio de salida con esta estructura...
msix/
├── win-x64/
│ └── Microsoft.Windows.AI.MachineLearning.msix
└── win-arm64/
└── Microsoft.Windows.AI.MachineLearning.msix
Detección de arquitectura de hardware
Importante
Debe instalar el paquete MSIX que coincida con la plataforma de hardware, no la arquitectura de la aplicación. En el caso del hardware ARM64, use el paquete ARM64, incluso si la aplicación es x64 (que se ejecuta con emulación). Para hardware x64, use el paquete x64.
using Microsoft.Windows.AI.MachineLearning.Bootstrap;
// Deploy the package.
// Auto-detects hardware architecture, and uses the appropriate MSIX.
int hr = NativeMethods.WinMLDeployMainPackage();
if (hr < 0)
{
// Handle deployment failure.
}
Importante
La función de implementación MSIX está diseñada específicamente para escenarios de instalación. Busca automáticamente el archivo MSIX en el msix/win-{arch}
subdirectorio relativo al ejecutable de la aplicación.
WinMLBootstrapAutoInitializeDisabled
debe establecerse true
en el proyecto del instalador para asegurarse de que el código de inicialización automática no se ejecute antes de implementar el paquete principal.
Implementación personalizada
Si necesita más control sobre el proceso de implementación, puede usar la clase Windows.Management.Deployment.PackageManager directamente.
Funcionalidad de Bootstrap
El paquete incluye la funcionalidad de arranque para proyectos de C# y C++, que se configuran automáticamente al instalar el paquete NuGet. Esto proporciona la inicialización en tiempo de ejecución y la administración de dependencias sin ninguna configuración adicional.
Para los proyectos de C#, el paquete actúa automáticamente.
- Copia el
WinMLBootstrap.dll
en su directorio de salida. - Incluye código de inicialización automática.
Opciones de configuración
La funcionalidad de Bootstrap se incluye por defecto, pero puede configurar su comportamiento con estas propiedades del proyecto:
<PropertyGroup>
<!-- Disable auto-initialization completely -->
<WinMLBootstrapAutoInitializeDisabled>true</WinMLBootstrapAutoInitializeDisabled>
<!-- Allow execution to continue even if initialization fails (default: false) -->
<WinMLContinueOnInitFailure>true</WinMLContinueOnInitFailure>
</PropertyGroup>
1. Deshabilitar la inicialización automática
Cuando WinMLBootstrapAutoInitializeDisabled
se establece en true
, el código de inicialización automática no se incluye en el proyecto. En este caso, deberá inicializar y desinicializar manualmente el tiempo de ejecución, como se muestra a continuación.
2. Continuar a pesar del fallo de inicialización
Cuando WinMLContinueOnInitFailure
se establece en true
, la aplicación seguirá ejecutándose incluso si se produce un error en la inicialización. Puede comprobar el estado de inicialización mediante los métodos que se muestran en los ejemplos de inicialización manual.
Inicialización manual
Cuando la inicialización automática está deshabilitada, debe inicializar y desinicializar manualmente.
using Microsoft.Windows.AI.MachineLearning.Bootstrap;
// Initialize
int hr = NativeMethods.WinMLInitialize();
if (hr < 0)
{
// Handle initialization failure...
}
// Execution provider download and registration should use the WinRT API.
// Get the initialization status at any point.
int status = NativeMethods.WinMLGetInitializationStatus();
// Later, uninitialize before application exit.
NativeMethods.WinMLUninitialize();