Configurare l'editor note

Creare un piccolo progetto WinUI 3, quindi copiare il codice da questi argomenti. Non è necessario clonare un repository o scaricare un esempio completo. Se hai già un'app WinUI 3, adatta la configurazione seguente e mantieni l'identità, gli asset e la navigazione esistenti dell'app.

Creare il progetto

Segui la procedura di configurazione di WinUI dalla riga di comando per installare lo SDK di .NET 10 e i modelli di WinUI. Da una directory in cui si mantengono i progetti, creare un progetto denominato LocalNotes:

dotnet new winui-mvvm -n LocalNotes --dotnet-version net10.0 --target-platform-min-version 10.0.26100.0
Set-Location LocalNotes

Il modello App MVVM WinUI fornisce il manifesto dell'app, gli asset, la pagina, il modello di visualizzazione e i profili di pubblicazione specifici dell'architettura. Il nome del progetto è importante perché il codice in questo tutorial usa lo spazio dei nomi LocalNotes.

È possibile aprire il generato LocalNotes.csproj in Visual Studio 2026 o continuare nell'editor. Selezionare ARM64 in un PC Arm64 o x64 in un PC Intel o AMD. Non selezionare Qualsiasi CPU: il runtime di inferenza include librerie native specifiche dell'architettura.

Configurare il progetto

Per il nuovo progetto LocalNotes sostituire il contenuto di LocalNotes.csproj con il codice seguente. Conservare le cartelle generate dal modello Properties\PublishProfiles e Assets, app.manifest e Package.appxmanifest.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net10.0-windows10.0.26100.0</TargetFramework>
    <TargetPlatformMinVersion>10.0.26100.0</TargetPlatformMinVersion>
    <RootNamespace>LocalNotes</RootNamespace>
    <ApplicationManifest>app.manifest</ApplicationManifest>
    <Platforms>ARM64;x64</Platforms>
    <Platform Condition="'$(Platform)' == '' or '$(Platform)' == 'AnyCPU'">ARM64</Platform>
    <RuntimeIdentifiers>win-arm64;win-x64</RuntimeIdentifiers>
    <PublishProfile>win-$(Platform).pubxml</PublishProfile>
    <UseWinUI>true</UseWinUI>
    <WinUISDKReferences>false</WinUISDKReferences>
    <EnableMsixTooling>true</EnableMsixTooling>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <Content Include="Assets\SplashScreen.scale-200.png" />
    <Content Include="Assets\LockScreenLogo.scale-200.png" />
    <Content Include="Assets\Square150x150Logo.scale-200.png" />
    <Content Include="Assets\Square44x44Logo.scale-200.png" />
    <Content Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png" />
    <Content Include="Assets\Square44x44Logo.targetsize-48_altform-lightunplated.png" />
    <Content Include="Assets\StoreLogo.png" />
    <Content Include="Assets\AppIcon.ico" />
    <Content Include="Assets\Wide310x150Logo.scale-200.png" />
  </ItemGroup>

  <ItemGroup>
    <Manifest Include="$(ApplicationManifest)" />
  </ItemGroup>

  <!--
    Defining the "Msix" ProjectCapability here allows the Single-project MSIX Packaging
    Tools extension to be activated for this project even if the Windows App SDK Nuget
    package has not yet been restored.
  -->
  <ItemGroup Condition="'$(DisableMsixProjectCapabilityAddedByProject)'!='true' and '$(EnableMsixTooling)'=='true'">
    <ProjectCapability Include="Msix" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AI.Foundry.Local.WinML" Version="1.2.4" />
    <PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.28000.2705" />
    <PackageReference Include="Microsoft.WindowsAppSDK" Version="2.4.0" />
    <PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.2" />
  </ItemGroup>

  <!--
    Defining the "HasPackageAndPublishMenuAddedByProject" property here allows the Solution
    Explorer "Package and Publish" context menu entry to be enabled for this project even if
    the Windows App SDK Nuget package has not yet been restored.
  -->
  <PropertyGroup Condition="'$(DisableHasPackageAndPublishMenuAddedByProject)'!='true' and '$(EnableMsixTooling)'=='true'">
    <HasPackageAndPublishMenu>true</HasPackageAndPublishMenu>
  </PropertyGroup>

  <!-- Publish Properties -->
  <PropertyGroup>
    <PublishReadyToRun Condition="'$(Configuration)' == 'Debug'">False</PublishReadyToRun>
    <PublishReadyToRun Condition="'$(Configuration)' != 'Debug'">True</PublishReadyToRun>
    <PublishTrimmed Condition="'$(Configuration)' == 'Debug'">False</PublishTrimmed>
    <PublishTrimmed Condition="'$(Configuration)' != 'Debug'">False</PublishTrimmed>
  </PropertyGroup>

  <!-- Foundry Core 1.2.4 bundles an older copy of this DLL as well as depending
       on the WinML package. Keep the dependency's DLL once in the MSIX payload. -->
  <Target Name="RemoveDuplicateFoundryWinML" AfterTargets="ResolvePackageAssets">
    <ItemGroup>
      <NativeCopyLocalItems Remove="@(NativeCopyLocalItems)"
          Condition="'%(NativeCopyLocalItems.NuGetPackageId)' == 'Microsoft.AI.Foundry.Local.Core.WinML' and '%(NativeCopyLocalItems.Filename)%(NativeCopyLocalItems.Extension)' == 'Microsoft.Windows.AI.MachineLearning.dll'" />
    </ItemGroup>
  </Target>
</Project>

Le versioni convalidate vengono Microsoft. Intelligenza artificiale. Foundry.Local.WinML 1.2.4, Microsoft. WindowsAppSDK 2.4.0 e CommunityToolkit.Mvvm 8.4.2. Usare le versioni illustrate di seguito anziché aggiornare i pacchetti durante la procedura dettagliata.

Note

Con queste versioni del pacchetto, sia il pacchetto Foundry Core sia la relativa dipendenza da Windows ML forniscono Microsoft.Windows.AI.MachineLearning.dll. Il RemoveDuplicateFoundryWinML target rimuove solo la copia ridondante di Foundry nelle risorse del pacchetto, conservando quella della dipendenza. Senza di esso, una compilazione in pacchetto può non riuscire con APPX1101. Riesamina questo target specifico della versione quando aggiorni le dipendenze.

Mantieni Package.appxmanifest e la configurazione di avvio inclusa nel pacchetto. Il comando di creazione del progetto imposta la versione minima Windows per la build 26100. Non è necessaria la systemAIModels funzionalità o un token di accesso Phi Silica per questa funzionalità locale di Foundry.

Compilare e aprire l'app

In Visual Studio selezionare il profilo di avvio LocalNotes (Pacchetto) e premere F5. Se utilizzi un terminale con l'SDK .NET 10 e winapp installato, compila e avvia per la tua architettura:

dotnet build LocalNotes.csproj -c Debug -p:Platform=ARM64
winapp run .\bin\ARM64\Debug\net10.0-windows10.0.26100.0\win-arm64 --detach --json

In un PC x64 sostituire ARM64 con x64 e win-arm64 con win-x64. winapp run avvia l'app con l'identità del pacchetto; non avviare direttamente il file eseguibile compilato. Si tratta di comandi di sviluppo locali, non istruzioni per la produzione di un MSIX distribuibile firmato.

In questo checkpoint, l'app visualizza ancora la pagina iniziale del modello. Verificare che venga aperto, quindi chiuderlo prima di modificare i file nell'argomento successivo. Non è ancora stato aggiunto l'editor delle note o i controlli di configurazione del modello e non deve essere eseguito alcun download del modello.

Note

Il ripristino di NuGet scarica le dipendenze dell'applicazione durante la compilazione. L'azione di configurazione del modello separata nell'app in esecuzione scarica i file del modello. Questi sono download diversi con scopi diversi.

Aggiungere la dipendenza a un'app esistente

Se stai adattando un'app esistente invece di creare LocalNotes, compila ed esegui la tua app senza intelligenza artificiale. Quindi, dalla directory contenente il progetto C#, aggiungere l'SDK specifico di Windows:

dotnet add package Microsoft.AI.Foundry.Local.WinML

Il tutorial usa MVVM Toolkit per le proprietà osservabili e i comandi asincroni. Aggiungerlo se il progetto non vi fa già riferimento:

dotnet add package CommunityToolkit.Mvvm

Confrontare la configurazione del progetto precedente con il framework di destinazione dell'app, la versione supportata Windows e i riferimenti ai pacchetti. Unire le impostazioni pertinenti anziché sostituire l'identità, gli asset, le impostazioni di firma o la navigazione del progetto esistente.

I comandi senza versione selezionano i pacchetti stabili correnti. Per riprodurre esattamente questa procedura dettagliata, usare invece le versioni del pacchetto nel codice XML precedente. Quando si utilizza Foundry Local WinML 1.2.4 in un'app pacchettizzata, mantenere anche il target duplicato per gli asset con ambito ristretto mostrato sopra.

Questa esercitazione usa l'SDK in-process nativo. Non devi installare Foundry Local CLI, avviarne il servizio, scegliere una porta localhost né configurare un endpoint cloud di OpenAI. I tipi di messaggio Betalgo.Ranul.OpenAI utilizzati nel servizio vengono forniti come dipendenza transitiva dell'SDK; il loro spazio dei nomi non significa che l'esempio effettui chiamate a un servizio cloud. Per altre opzioni di integrazione, vedere le informazioni di riferimento su Foundry Local SDK.

Identificare il limite di funzionalità

La nota è l'input; il riepilogo è un output separato. La configurazione del modello viene eseguita dopo un'azione dell'utente e la generazione viene eseguita solo dopo l'esito positivo dell'installazione. L'app funziona ancora come editor di testo se il modello non è pronto.

Nel passaggio successivo si crea il servizio e si sostituisce il modello di visualizzazione iniziale e la pagina. Ogni blocco di codice include il contenuto completo del file corrispondente, inclusi i namespace e le direttive using. Copiare tutti i file prima di compilare di nuovo in modo che la pagina, i comandi e la durata della finestra siano connessi.