wpf-to-winui3-migration

作者: microsoft

用于将 PowerToys 模块从 WPF 迁移到 WinUI 3(Windows App SDK)的指南。当被要求迁移 WPF 代码、将 WPF XAML 转换为 WinUI、替换……时使用。

npx skills add https://github.com/microsoft/powertoys --skill wpf-to-winui3-migration

WPF to WinUI 3 Migration Skill

Migrate PowerToys modules from WPF (System.Windows.*) to WinUI 3 (Microsoft.UI.Xaml.* / Windows App SDK). Based on patterns validated in the ImageResizer module migration.

When to Use This Skill

  • Migrate a PowerToys module from WPF to WinUI 3
  • Convert WPF XAML files to WinUI 3 XAML
  • Replace System.Windows namespaces with Microsoft.UI.Xaml
  • Migrate Dispatcher usage to DispatcherQueue
  • Migrate custom Observable/RelayCommand to CommunityToolkit.Mvvm source generators
  • Replace WPF-UI (Lepo) controls with native WinUI 3 controls
  • Convert imaging code from System.Windows.Media.Imaging to Windows.Graphics.Imaging
  • Handle WPF Window vs WinUI Window differences (sizing, positioning, SizeToContent)
  • Migrate resource files from .resx to .resw with ResourceLoader
  • Fix installer/build pipeline issues after WinUI 3 migration
  • Update project files, NuGet packages, and signing config

Prerequisites

  • Visual Studio 2022 17.4+
  • Windows App SDK NuGet package (Microsoft.WindowsAppSDK)
  • .NET 8+ with net8.0-windows10.0.19041.0 TFM
  • Windows 10 1803+ (April 2018 Update or newer)

Migration Strategy

Phase-by-Phase Scope

Work on bounded problems, not the entire codebase at once. Each phase should compile before moving to the next.

  1. Project file — Update TFM, NuGet packages, set <UseWinUI>true</UseWinUI>
  2. Data models and business logic — No UI dependencies, migrate first
  3. MVVM framework — Replace custom Observable/RelayCommand with CommunityToolkit.Mvvm
  4. Resource strings — Migrate .resx.resw, introduce ResourceLoaderInstance
  5. Services and utilities — Replace System.Windows types, async-ify imaging code
  6. ViewModels — Update Dispatcher usage, binding patterns
  7. Views/Pages — Starting from leaf pages with fewest dependencies
  8. Main page / shell — Last, since it depends on everything
  9. App.xaml / startup code — Merge carefully (do NOT overwrite WinUI 3 boilerplate)
  10. Installer & build pipeline — Update WiX, signing, build events
  11. Tests — Adapt for WinUI 3 runtime, async patterns

Migration Contract: Prohibited Patterns

These rules capture human judgment and must be applied consistently across every file. Do NOT deviate.

Architecture prohibitions:

  • Do NOT overwrite App.xaml / App.xaml.cs — WinUI 3 has different lifecycle boilerplate. Merge resources and init code into the generated WinUI 3 App class.
  • Do NOT create Exe→WinExe ProjectReference — Extract shared code to a Library project. Causes phantom build artifacts.
  • Do NOT instantiate services directly — Use DI and CommunityToolkit.Mvvm patterns.
  • Do NOT create a Window subclass for every dialog or sub-page — use ContentDialog for in-app dialogs and Frame/Page navigation for sub-views. Separate Window classes are reserved for distinct top-level surfaces (e.g., FancyZones editor, OOBE).
  • Do NOT omit WindowsPackageType=None and WindowsAppSDKSelfContained=true — Both are mandatory in the csproj for every WinUI 3 module in PowerToys. Without them the app crashes at startup with COMException: ClassFactory cannot supply requested class because the WinUI 3 runtime DLLs are not found.
  • Do NOT default to a bare Window, and do NOT hand-write code-behind for windowing that XAML can express — For a top-level window in a WinUI 3 module, use WinUIEx.WindowEx or an existing PowerToys base derived from it (for example, TransparentWindow for transient overlays). WindowEx restores WPF-like Window members as XAML properties (MinWidth/MinHeight, Width/Height, IsResizable, IsMaximizable/IsMinimizable, IsTitleBarVisible, IsAlwaysOnTop, IsShownInSwitchers, WindowState, SystemBackdrop) plus helpers (CenterOnScreen(), PersistenceId), so windowing is declared in XAML instead of manual AppWindow/OverlappedPresenter code-behind. This is the established PowerToys convention across ImageResizer, PowerDisplay, Peek, AdvancedPaste, MeasureTool, ShortcutGuide, Settings, Hosts, FileLocksmith, QuickAccess, and other WinUI 3 modules. Only drop to raw AppWindow/presenter code for behavior WindowEx does not expose. See Threading and Window Management → WindowEx.

XAML prohibitions:

  • Do NOT use {DynamicResource} — Replace with {ThemeResource} (theme-reactive) or {StaticResource}.
  • Do NOT use {Binding} in Setter.Value — Not supported in WinUI 3. Use {StaticResource}.
  • Do NOT use {x:Static} — Replace with {x:Bind}, x:Uid, or code-behind.
  • Do NOT use {x:Type} — Not supported. Use x:DataType for DataTemplate, or code-behind.
  • Do NOT use clr-namespace: — Replace with using: in all xmlns declarations.
  • Do NOT use Style.Triggers / DataTrigger / EventTrigger — Replace with VisualStateManager.
  • Do NOT use MultiBinding — Replace with x:Bind function binding or computed ViewModel property.
  • Do NOT mechanically port WPF IValueConverter classes — Prefer control VisualStates, direct {x:Bind} Boolean-to-Visibility conversion, resources supplied by XamlControlsResources, or CommunityToolkit.WinUI.Converters. Reuse converter instances and invert them with ConverterParameter=True when supported; write a custom converter only for app-specific conversion logic. See Value Converter Decision Guide.
  • Do NOT use Visibility="Hidden" — WinUI only has Visible and Collapsed. Use Opacity="0" if layout must be preserved.
  • Do NOT use IsDefault / IsCancel — Use AccentButtonStyle for primary button; handle Enter/Escape in code-behind.
  • Do NOT omit BasedOn when overriding default styles — Without it, your style replaces the entire default. Always use BasedOn="{StaticResource DefaultButtonStyle}" etc.
  • Do NOT omit XamlControlsResources as first merged dictionary — It provides default Fluent styles. Without it, controls have no visual appearance.

Code-behind prohibitions:

  • Do NOT use Application.Current.Dispatcher — Store DispatcherQueue in a static field explicitly.
  • Do NOT use Window.Current — Not supported. Use a custom App.Window static property.
  • Do NOT put DataContext, Resources, or VisualStateManager on Window — WinUI 3 Window is NOT a DependencyObject. Use a root Page/UserControl/Grid.
  • Do NOT use tunneling/preview events (PreviewMouseDown, PreviewKeyDown) — WinUI has no tunneling. Use bubbling equivalents with Handled property or AddHandler(handledEventsToo: true).

Resource prohibitions:

  • Do NOT use Properties.Resources.MyString — Replace with ResourceLoaderInstance.ResourceLoader.GetString("MyString").
  • Do NOT initialize ResourceLoader-dependent values as static fields — Wrap in Lazy<T> or null-coalescing property.
  • Do NOT use pack:// URIs — Replace with ms-appx:/// scheme.

Quick Reference Tables

Namespace Mapping

WPFWinUI 3Notes
System.WindowsMicrosoft.UI.XamlRoot namespace
System.Windows.ControlsMicrosoft.UI.Xaml.ControlsCore controls
System.Windows.Controls.PrimitivesMicrosoft.UI.Xaml.Controls.PrimitivesLow-level primitives
System.Windows.MediaMicrosoft.UI.Xaml.MediaBrushes, transforms
System.Windows.Media.AnimationMicrosoft.UI.Xaml.Media.AnimationStoryboard, animations
System.Windows.Media.ImagingMicrosoft.UI.Xaml.Media.Imaging (UI) / Windows.Graphics.Imaging (processing)Split by purpose
System.Windows.Media.Media3DNo equivalentUse Win2D or Composition APIs
System.Windows.ShapesMicrosoft.UI.Xaml.ShapesRectangle, Ellipse, Path
System.Windows.InputMicrosoft.UI.Xaml.InputPointer, keyboard, focus
System.Windows.DataMicrosoft.UI.Xaml.DataBinding, IValueConverter
System.Windows.DocumentsMicrosoft.UI.Xaml.DocumentsLimited — RichTextBlock + Paragraph
System.Windows.MarkupMicrosoft.UI.Xaml.MarkupXAML parsing, markup extensions
System.Windows.AutomationMicrosoft.UI.Xaml.AutomationAccessibility / UI Automation
System.Windows.NavigationNo direct equivalentUse Frame.Navigate()
System.Windows.ThreadingMicrosoft.UI.DispatchingDispatcher → DispatcherQueue
System.Windows.InteropWinRT.Interop / Microsoft.UI.Xaml.HostingHWND interop

Control Replacements (No 1:1 Mapping)

These WPF controls have no direct counterpart and require a different control or third-party package:

WPF ControlWinUI 3 ReplacementNotes
DataGridWinUI.TableViewCommunity library; the Toolkit DataGrid is no longer maintained. Legacy code may still pin v7 CommunityToolkit.WinUI.UI.Controls.DataGrid 7.1.2
RibbonCommandBar / NavigationView, or Toolkit Labs RibbonNo first-party Ribbon in WinUI; Labs component is experimental/partial
Menu / MenuItemMenuBar / MenuBarItem / MenuFlyoutMenuBar for classic menu, MenuFlyout for context
ContextMenuMenuFlyoutAssign to ContextFlyout property
ToolBar / ToolBarTrayCommandBar + AppBarButton
StatusBarCustom Grid/StackPanel or InfoBarNo StatusBar control
TabControlTabView or NavigationView (top mode)TabView for closeable tabs
DocumentViewerWebView2Render PDFs/XPS inside WebView2
FlowDocumentRichTextBlockPartial replacement only
RichTextBoxRichEditBoxRich text editing
GroupBoxExpander (built-in) or HeaderedContentControl (Toolkit)See Layout & Header Controls from CommunityToolkit.WinUI below
LabelTextBlockWPF Label is a ContentControl; use TextBlock + AccessKey
TreeViewTreeView (native)Available natively, but data binding model differs significantly
MessageBoxContentDialogMust set XamlRoot before ShowAsync()
MediaElementMediaPlayerElementDifferent API
AccessTextNot availableUse AccessKey property on target control

Layout & Header Controls from CommunityToolkit.WinUI

These WPF controls have no built-in WinUI 3 equivalent — install the corresponding CommunityToolkit package. The NuGet package id and the XAML namespace differ intentionally: package names end in .Primitives / .HeaderedControls, but the registered XAML namespace is the shorter CommunityToolkit.WinUI.Controls (confirmed in the official Microsoft Q&A).

WPF ControlWinUI 3 ReplacementNuGet PackageXAML Namespace
WrapPanelWrapPanelCommunityToolkit.WinUI.Controls.Primitivesusing:CommunityToolkit.WinUI.Controls
UniformGridUniformGridCommunityToolkit.WinUI.Controls.Primitivesusing:CommunityToolkit.WinUI.Controls
DockPanelDockPanelCommunityToolkit.WinUI.Controls.Primitivesusing:CommunityToolkit.WinUI.Controls
GroupBox (alt.)HeaderedContentControlCommunityToolkit.WinUI.Controls.HeaderedControlsusing:CommunityToolkit.WinUI.Controls

No Equivalent — Requires Architectural Rework

These WPF features have no WinUI counterpart and require redesign, not find-and-replace:

WPF FeatureWinUI 3 Replacement Strategy
Style.Triggers / DataTriggerVisualStateManager with StateTrigger — see XAML Migration
MultiBindingx:Bind function binding: {x:Bind local:Converters.Format(VM.A, VM.B), Mode=OneWay}
RoutedUICommand / CommandBindingICommand / [RelayCommand] from CommunityToolkit.Mvvm. WinUI also has StandardUICommand / XamlUICommand for platform commands.
AdornerLayer / AdornerDepends on use case: TeachingTip/InfoBar (validation), Popup (overlays), PlaceholderText (watermarks), Canvas overlay (decorations)
Visibility.HiddenOpacity="0" with Visibility="Visible" (preserves layout space)
Window.Resources / Window.DataContextMove to root Grid.Resources / root Page/UserControl — WinUI Window is NOT a DependencyObject
Tunneling events (Preview*)Use bubbling equivalents + Handled property or AddHandler(handledEventsToo: true)

Critical API Replacements

WPFWinUI 3Notes
Dispatcher.Invoke()DispatcherQueue.TryEnqueue()Different return type (bool), async by default
Dispatcher.CheckAccess()DispatcherQueue.HasThreadAccessProperty vs method
Application.Current.DispatcherStore DispatcherQueue in static fieldSee Threading
Window.CurrentCustom App.Window static propertyNot supported in Windows App SDK
Application.Current.MainWindowCustom App.Window static propertyMust track manually
MessageBox.Show()ContentDialogMust set XamlRoot
System.Windows.ClipboardWindows.ApplicationModel.DataTransfer.ClipboardDifferent API surface
RoutedUICommand / CommandBindingICommand / [RelayCommand]Remove CommandBinding; bind ICommand directly
Properties.Resources.MyStringResourceLoaderInstance.ResourceLoader.GetString("MyString")Lazy-init pattern
DynamicResourceThemeResourceTheme-reactive only
clr-namespace:using:XAML namespace prefix
{x:Static props:Resources.Key}x:Uid or ResourceLoader.GetString().resx → .resw
DataType="{x:Type m:Foo}"x:DataType="m:Foo"x:Type not supported
SizeToContent="Height"Custom SizeToContent() via AppWindow.Resize()See Windowing
Pack URI (pack://...)ms-appx:///Resource URI scheme
Observable (custom base)ObservableObject + [ObservableProperty]CommunityToolkit.Mvvm
RelayCommand (custom)[RelayCommand] source generatorCommunityToolkit.Mvvm
JpegBitmapEncoderBitmapEncoder.CreateAsync(JpegEncoderId, stream)Async, unified API
encoder.QualityLevel = 85BitmapPropertySet { "ImageQuality", 0.85f }int 1-100 → float 0-1

Event Replacements (Mouse → Pointer)

WPF EventWinUI 3 EventNotes
MouseLeftButtonDownPointerPressedCheck IsLeftButtonPressed on args
MouseLeftButtonUpPointerReleasedCheck pointer properties
MouseRightButtonDownRightTappedOr PointerPressed with right button check
MouseMovePointerMovedMouseEventArgsPointerRoutedEventArgs
MouseWheelPointerWheelChangedDifferent event args
MouseEnter / MouseLeavePointerEntered / PointerExited
MouseDoubleClickDoubleTappedDifferent event args
PreviewMouseDownPointerPressedNo tunneling — use Handled or AddHandler
PreviewKeyDownKeyDownKeyEventArgsKeyRoutedEventArgs

Property Replacements

WPFWinUI 3Context
Visibility.HiddenVisibility.Collapsed or Opacity="0"Use Opacity="0" to preserve layout
TextWrapping.WrapWithOverflowTextWrapping.WrapWinUI doesn't distinguish
Focusable="True"IsTabStop="True"Different property name
ContextMenu=ContextFlyout=On any UIElement
MediaElementMediaPlayerElementDifferent API
SnapsToDevicePixelsNot availableWinUI handles pixel snapping internally

NuGet Package Migration

WPFWinUI 3Notes
Microsoft.Xaml.Behaviors.WpfMicrosoft.Xaml.Behaviors.WinUI.Managed
WPF-UI (Lepo)Remove — use native WinUI 3 controls
CommunityToolkit.MvvmCommunityToolkit.Mvvm (same)
Microsoft.Toolkit.Wpf.*CommunityToolkit.WinUI.*
(none)Microsoft.WindowsAppSDKRequired
(none)Microsoft.Windows.SDK.BuildToolsRequired
(none)WinUIExRecommended for top-level windows in WinUI 3 modules — add <PackageReference Include="WinUIEx" /> (the version is centrally managed), then use WindowEx or an existing PowerToys base derived from it. It exposes WPF-like window properties in XAML (size, min/max, resizable, title-bar visibility, backdrop, always-on-top) plus CenterOnScreen()/PersistenceId; prefer it over bare Window and manual AppWindow code-behind
(none)CommunityToolkit.WinUI.ConvertersOptional
(none)CommunityToolkit.WinUI.Controls.PrimitivesOptional — WrapPanel, UniformGrid, DockPanel, ConstrainedBox
(none)CommunityToolkit.WinUI.Controls.HeaderedControlsOptional — HeaderedContentControl, HeaderedItemsControl, HeaderedTreeView
(none)CommunityToolkit.WinUI.Controls.SettingsControlsOptional — SettingsCard, SettingsExpander
(none)CommunityToolkit.WinUI.Controls.SizersOptional — GridSplitter
(none)CommunityToolkit.WinUI.UI.Controls.DataGridLegacy v7 — only for migrating existing DataGrid code; prefer WinUI.TableView

XAML Syntax Changes

WPFWinUI 3Notes
xmlns:local="clr-namespace:MyApp"xmlns:local="using:MyApp"CLR → using syntax
{DynamicResource Key}{ThemeResource Key}Re-evaluates on theme change
{StaticResource Key}{StaticResource Key}Same — resolved once at load
{x:Static Type.Member}{x:Bind} or code-behind
{x:Type local:MyType}Not supportedUse x:DataType for DataTemplate
{x:Array}Not supportedCreate collections in code-behind
<Style.Triggers> / <DataTrigger>VisualStateManagerSee XAML Migration
{Binding} in Setter.ValueNot supported — use StaticResource
Content="{x:Static p:Resources.Cancel}"x:Uid="Cancel" with .Content in .resw
sys:String / sys:Int32 / etc.x:String / x:Int32 / etc.XAML intrinsic types
<ui:FluentWindow> (WPF-UI)<Window>Native + ExtendsContentIntoTitleBar
<ui:NumberBox> / <ui:ProgressRing> (WPF-UI)Native <NumberBox> / <ProgressRing>
BasedOn="{StaticResource {x:Type ui:Button}}"BasedOn="{StaticResource DefaultButtonStyle}"Named style keys
IsDefault="True" / IsCancel="True"Style="{StaticResource AccentButtonStyle}" / KeyDown
<AccessText>Not available — use AccessKey property
<behaviors:Interaction.Triggers>Code-behind or WinUI behaviors
Window.ResourcesRoot container's Resources (e.g. Grid.Resources)Window is not a DependencyObject

Binding: {Binding} vs {x:Bind}

Both work in WinUI 3. Prefer {x:Bind} for new/migrated code.

Feature{Binding}{x:Bind}
Default modeOneWayOneTime — add Mode=OneWay explicitly!
Default sourceDataContextPage/UserControl code-behind
Compile-time validationNoYes
Function bindingNoYes (replaces MultiBinding)
PerformanceReflection-basedCompiled, no reflection
MultiBinding supportNo (not in WinUI)Use function binding

Detailed Reference Docs

Read only the section relevant to your current task:

Common Pitfalls (from ImageResizer migration)

PitfallSolution
ContentDialog throws "does not have a XamlRoot"Set dialog.XamlRoot = this.Content.XamlRoot before ShowAsync()
FilePicker throws error in desktop appCall WinRT.Interop.InitializeWithWindow.Initialize(picker, hwnd)
Window.Dispatcher returns nullUse Window.DispatcherQueue instead
Resources on Window element not foundMove resources to root layout container (Grid.Resources)
VisualStateManager on Window failsUse UserControl or Page inside the Window
Satellite assembly installer errors (WIX0103)Remove .resources.dll refs from Resources.wxs; WinUI 3 uses .pri
Phantom .exe/.deps.json in root output dirAvoid Exe→WinExe ProjectReference; use Library project
ResourceLoader crash at static initWrap in Lazy<T> or null-coalescing property — see Lazy Init
SizeToContent not availableImplement manual content measurement + AppWindow.Resize() with DPI scaling
x:Bind default mode is OneTimeExplicitly set Mode=OneWay or Mode=TwoWay
DynamicResource / x:Static not compilingReplace with ThemeResource / ResourceLoader or x:Uid
IValueConverter.Convert signature mismatchLast param: CultureInfostring (language tag)
Test project can't resolve WPF typesAdd <UseWPF>true</UseWPF> temporarily; remove after imaging migration
Pixel dimension type mismatch (int vs uint)WinRT uses uint for pixel sizes — add u suffix in test assertions
$(SolutionDir) empty in standalone project buildUse $(MSBuildThisFileDirectory) with relative paths instead
JPEG quality value wrong after migrationWPF: int 1-100; WinRT: float 0.0-1.0
MSIX packaging fails in PreBuildEventMove to PostBuildEvent; artifacts not ready at PreBuild time
RC file icon path with forward slashesUse double-backslash escaping: ..\\ui\\Assets\\icon.ico
COMException: ClassFactory cannot supply requested class at startupMissing <WindowsPackageType>None</WindowsPackageType> and/or <WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained> in csproj. Without these, the app tries to locate the Windows App SDK framework package (not installed) instead of using bundled runtime DLLs. Both properties are mandatory for every WinUI 3 module in PowerToys.
CombinedGeometry not available in WinUI 3WinUI 3 UIElement.Clip only accepts RectangleGeometry. For overlay hole effects (exclude region), use a Path element with GeometryGroup FillRule="EvenOdd" containing two RectangleGeometry children — the EvenOdd rule creates a transparent hole where geometries overlap.

Troubleshooting

IssueSolution
Build fails after namespace renameCheck for lingering System.Windows usings; some types have no direct equivalent
Missing PresentationCore.dll at runtimeEnsure ALL imaging code uses Windows.Graphics.Imaging, not System.Windows.Media.Imaging
DataContext not working on WindowWinUI 3 Window is not a DependencyObject; use a root Page or UserControl
XAML designer not availableWinUI 3 does not support XAML Designer; use Hot Reload instead
NuGet restore failuresRun build-essentials.cmd after adding Microsoft.WindowsAppSDK package
Parallel.ForEach compilation errorMigrate to Parallel.ForEachAsync for async imaging operations
Signing check fails on leaked artifactsRun generateAllFileComponents.ps1; verify only WinUI3Apps\\ paths in signing config
COMException / ClassFactory error at app launchEnsure csproj has <WindowsPackageType>None</WindowsPackageType> and <WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained>. These are required for all unpackaged WinUI 3 apps in PowerToys — without them the WinUI 3 COM runtime cannot be found.

来自 microsoft 的更多技能

oss-growth
microsoft
OSS增长黑客角色
agent-framework-azure-ai-py
microsoft
使用Microsoft Agent Framework Python SDK(agent-framework-azure-ai)构建Azure AI Foundry代理。在创建使用AzureAIAgentsProvider的持久化代理、使用托管工具(代码解释器、文件搜索、网络搜索)、集成MCP服务器、管理对话线程或实现流式响应时使用。涵盖函数工具、结构化输出和多工具代理。
development
airunway-aks-setup
microsoft
在AKS上设置AI Runway——从裸集群到运行模型。涵盖集群验证、控制器安装、GPU评估、提供商设置和首次部署。适用场景:“设置AI Runway”、“接入AKS集群”、“安装AI Runway”、“airunway设置”、“将模型部署到AKS”、“在AKS上进行GPU推理”、“在AKS上配置KAITO”、“在AKS上运行LLM”、“在AKS上使用vLLM”、“在AKS上设置模型服务”、“AI Runway控制器”。
devops
appinsights-instrumentation
microsoft
使用Azure Application Insights对Web应用进行插桩的指南。提供遥测模式、SDK设置和配置参考。适用场景:如何对应用进行插桩、App Insights SDK、遥测模式、什么是App Insights、Application Insights指南、插桩示例、APM最佳实践。
devops
applicationinsights-web-ts
microsoft
使用Application Insights JavaScript SDK(@microsoft/applicationinsights-web)为浏览器/Web应用添加检测。用于真实用户监控(RUM)——页面视图、点击、AJAX/fetch依赖项、异常、自定义事件,以及与后端OpenTelemetry追踪关联的浏览器端GenAI代理追踪。涵盖SDK加载器脚本和npm设置、框架扩展(React、React Native、Angular)、点击分析、遥测初始化器,以及从浏览器发出的代理/工具/模型跨度所遵循的OTel GenAI语义约定。
devops
azure-ai-anomalydetector-java
microsoft
使用适用于 Java 的 Azure AI 异常检测器 SDK 构建异常检测应用程序。在实现单变量/多变量异常检测、时间序列分析或 AI 驱动的监控时使用。
development
azure-ai-language-conversations-py
microsoft
使用azure-ai-language-conversations Python SDK实现对话语言理解(CLU)。当使用ConversationAnalysisClient分析对话意图和实体、构建NLP功能或将语言理解集成到应用程序中时使用。
development
azure-ai-ml-py
microsoft
Azure Machine Learning SDK v2 for Python。用于机器学习工作区、作业、模型、数据集、计算资源和管道。 触发词:“azure-ai-ml”、“MLClient”、“工作区”、“模型注册表”、“训练作业”、“数据集”。
development