Partilhar via


Notas sobre a versão de canal estável mais recente para o SDK do Aplicativo Windows

O canal estável fornece versões do SDK do Aplicativo Windows com suporte para uso por aplicativos em ambientes de produção. Os aplicativos que usam a versão estável do SDK do Aplicativo Windows também podem ser publicados no Microsoft Store.

Links importantes:

Arquivo de notas da versão de canal estável:

Downloads para o SDK do Aplicativo Windows

Observação

As extensões do Visual Studio do SDK de Aplicativo do Windows (VSIX) não são mais distribuídas como um download separado. Elas estão disponíveis no Visual Studio Marketplace dentro do Visual Studio.

Versão 1.6.1 (1.6.240923002)

Esta é uma versão de manutenção do SDK do Aplicativo Windows que inclui correções de bugs críticas para a versão 1.6.

  • Corrigida uma falha ao usar FocusVisualKind.Reveal(). Para obter mais informações, consulte o problema #9966 do GitHub.
  • Corrigidas exceções C++ ruidosas do Bcp47Langs.dll. Para obter mais informações, consulte o problema #4691 do GitHub. Observe que essa correção remove a sincronização com Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverrideo .
  • Corrigido um problema em que um evento extra Unloaded era gerado imediatamente após mostrar um ContentDialog. Para obter mais informações, consulte o problema #8402 do GitHub.
  • Corrigido um problema em que um menu CommandBar poderia ter aberto incorretamente mesmo quando havia espaço para ele abrir.
  • Corrigidos alguns problemas em que a entrada para InputNonClientPointerSource regiões não era tratada corretamente quando a janela de nível superior estava sendo executada no modo da direita para a esquerda.
  • Corrigida a verificação em tempo de compilação para a versão da estrutura do SDK do Windows para lidar com o nome da estrutura ligeiramente diferente usado para o .NET 9.

Versão 1.6

As seções a seguir descrevem recursos novos e atualizados e problemas conhecidos da versão 1.6.

Em um aplicativo SDK do Aplicativo Windows 1.5 existente, você pode atualizar seu pacote Nuget para 1.6.240829007 (consulte a seção Atualizar um pacote em Instalar e gerenciar pacotes no Visual Studio usando o Gerenciador de Pacotes NuGet).

Para visualizar o runtime atualizado e o MSIX, confira Downloads para o SDK do Aplicativo Windows.

Alterações de projeto necessárias para 1.6

Alterações no projeto C++

Ao atualizar um projeto C++ para 1.6, você precisará adicionar uma referência de projeto ao Microsoft.Web.WebView2 pacote. Se você atualizar por meio do Gerenciador de Pacotes NuGet no Visual Studio, essa dependência será adicionada para você.

Alterações no projeto C#

Na versão 1.6, SDK do Aplicativo Windows aplicativos gerenciados exigem Microsoft.Windows.SDK.NET.Ref *.*.*.38 ou posterior, que pode ser especificado por meio de WindowsSdkPackageVersion em seu csproj arquivo. Por exemplo:

<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
       <OutputType>WinExe</OutputType>
       <TargetFramework>net8.0-windows10.0.22621.0</TargetFramework>
       <TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion>
       <WindowsSdkPackageVersion>10.0.22621.38</WindowsSdkPackageVersion>
   <PropertyGroup>
   ...

Além disso, SDK do Aplicativo Windows aplicativos gerenciados devem ser atualizados para Microsoft.Windows.CsWinRT 2.1.1 (ou posterior).

Observação

Essas referências manuais não serão mais necessárias quando a próxima atualização de manutenção do SDK do .NET for lançada.

Suporte a AOT nativo

Suporte AOT nativo na versão 1.6

A propriedade do projeto .NET PublishAot agora tem suporte para compilação nativa antecipada. Para obter detalhes sobre o AOT nativo, consulte Implantação do AOT nativo. Como o AOT se baseia no suporte ao corte, muitas das diretrizes relacionadas ao corte a seguir também se aplicam ao AOT.

Para PublishAot suporte e suporte de corte, além das alterações do projeto C# descritas na seção anterior, você também precisará de uma referência de pacote para Microsoft.Windows.CsWinRT 2.1.1 (ou posterior) para habilitar o gerador de origem desse pacote até que a próxima atualização de manutenção do SDK do .NET seja lançada, quando ela não será mais necessária.

Para obter mais informações, consulte o documento de suporte ao CsWinRT Trimming/AOT e as Notas da versão do CsWinRT 2.1.1.

Como o SDK do Aplicativo Windows invoca destinos de publicação durante a implantação do F5, recomendamos habilitar PublishAot no momento da restauração do NuGet adicionando isso ao csproj arquivo:

<PublishAot>true</PublishAot>

Resolvendo problemas de AOT

Nesta versão, o desenvolvedor é responsável por garantir que todos os tipos estejam enraizados corretamente para evitar o corte (como com destinos baseados em {Binding} reflexão). Versões posteriores aprimorarão o C#/WinRT e o Compilador XAML para automatizar o enraizamento sempre que possível, alertar os desenvolvedores sobre riscos de corte e fornecer mecanismos para resolver.

Classes parciais

O C#/WinRT também inclui PublishAot suporte na versão 2.1.1. Para habilitar uma classe para publicação AOT com C#/WinRT, ela deve primeiro ser marcada partialcomo . Isso permite que o analisador de origem AOT do C#/WinRT atribua as classes para análise estática. Somente as classes (que contêm métodos, os destinos de corte) exigem esse atributo.

Erro de código inseguro

O gerador de unsafeorigem CsWinRT pode gerar código que usa o . Se você encontrar esse erro durante a compilação ou um aviso de diagnóstico para ele (CS0227 para "Código não seguro só pode aparecer se compilar com /unsafe"), defina EnableUnsafeBlocks como true. Para obter mais informações, consulte o problema do GitHub CsWinRT #1721.

WebView2 ainda não compatível com AOT

As projeções do WebView2 na Microsoft.Web.WebView2 versão do pacote 1.0.2651.64 ainda não são compatíveis com AOT. Isso será corrigido em uma versão futura do Microsoft.Web.WebView2 pacote, que você pode referenciar em seu projeto.

Técnicas sem reflexão

Para habilitar a compatibilidade AOT, as técnicas baseadas em reflexão devem ser substituídas por serialização tipada estaticamente, AppContext.BaseDirectory, typeof() etc. Para obter detalhes, consulte Introdução aos avisos de corte.

Tipos de enraizamento

Até que o suporte completo seja {Binding} implementado, os tipos podem ser preservados do corte da seguinte maneira:

Dado o assembly A que consome o projeto P com o tipo T no namespaceN, que é referenciado apenas dinamicamente (normalmente cortado), T pode ser preservado por meio de:

P.csproj:

<ItemGroup>
    <TrimmerRootDescriptor Include="ILLink.Descriptors.xml" />
</ItemGroup>

ILLink.Descriptors.xml:

<?xml version="1.0" encoding="utf-8"?>
<linker>
    <assembly fullname="A">
        <type fullname="N.T" preserve="all" />
    </assembly>
</linker>

Para obter a sintaxe completa da expressão XML do descritor raiz, consulte Descritores raiz.

Observação

Os pacotes de dependência que ainda não adotaram o suporte AOT podem apresentar problemas de tempo de execução.

Controle de versão do WebView2 desacoplado

O SDK do Aplicativo Windows agora consome o SDK do Edge WebView2 como uma referência NuGet em vez de inserir uma versão codificada do SDK do Edge WebView2. O novo modelo permite que os aplicativos escolham uma versão mais recente do Microsoft.Web.WebView2 pacote em vez de se limitarem à versão com a qual o SDK do Aplicativo Windows foi criado. O novo modelo também permite que os aplicativos façam referência a pacotes NuGet que também fazem referência ao SDK do Edge WebView2. Para obter mais informações, consulte o problema #5689 do GitHub.

Novas APIs de implantação de pacotes

A API de Gerenciamento de Pacotes recebeu vários aprimoramentos, incluindo Is*ReadyOrNewerAvailable*(), EnsureReadyOptions.RegisterNewerIfAvailable, Is*Provisioned*(), IsPackageRegistrationPending() e várias correções de bugs. Consulte PackageManagement.md e Pull Request #4453 para obter mais detalhes.

Remoção aprimorada da guia TabView

Remoção aprimorada do TabView na versão 1.6

TabView Suporta um novo CanTearOutTabs modo que fornece uma experiência aprimorada para arrastar guias e arrastar para uma nova janela. Quando essa nova opção está ativada, arrastar a guia é muito parecido com a experiência de arrastar a guia no Edge e no Chrome, onde uma nova janela é criada imediatamente durante o arrasto, permitindo que o usuário a arraste para a borda da tela para maximizar ou ajustar a janela em um movimento suave. Essa implementação também não usa APIs de arrastar e soltar, portanto, não é afetada por nenhuma limitação nessas APIs. Notavelmente, a remoção de tabulação é suportada em processos executados com privilégios elevados como Administrador.

Outras alterações importantes

  • Adicionada uma nova ColorHelper.ToDisplayName() API, preenchendo essa lacuna da UWP.
  • Adicionada uma nova Microsoft.Windows.Globalization.ApplicationLanguages classe, que inclui um novo PrimaryLanguageOverride recurso. Para obter mais informações, consulte o problema #4523 do GitHub.
  • Não lacrado ItemsWrapGrid. Esta deve ser uma mudança compatível com versões anteriores.
  • PipsPager Suporta um novo modo em que pode ser encapsulado entre o primeiro e o último item.

Novo modo de encapsulamento do PipsPager na versão 1.6

  • RatingControl agora é mais personalizável, movendo algumas propriedades de estilo codificadas para recursos de tema. Isso permite que os aplicativos substituam esses valores para personalizar melhor a aparência do RatingControl.
Nova personalização do RatingControl na versão 1.6
  • O WinUI 3 foi alterado para o modelo tipográfico para seleção de fonte em vez do modelo herdado de peso/alongamento/estilo. O modelo tipográfico é necessário para algumas fontes mais recentes, incluindo Segoe UI Variable, e permite recursos de fonte aprimorados. Algumas fontes mais antigas que dependem do modelo de peso/esticar/estilo para seleção podem não ser encontradas com o modelo tipográfico.

Problemas conhecidos

  • Se o depurador estiver definido para interromper em todas as exceções do C++, ele será interrompido em algumas exceções barulhentas na inicialização no código BCP47 (Globalização do Windows). Para obter mais informações, consulte o problema #4691 do GitHub.
  • Os pacotes de biblioteca de componentes que fazem referência ao pacote WinAppSDK 1.6 não obterão corretamente o conteúdo do pacote WebView2 referenciado. Para obter mais informações, consulte WebView2Feedback #4743. Uma solução alternativa é adicionar uma referência direta ao Microsoft.Web.WebView2 pacote quando necessário.
  • Às vezes, os aplicativos compilados com AOT nativo podem ter um problema de travamento após a navegação na página devido a uma condição de corrida no thread GC do runtime do .NET. Para obter mais informações, consulte .NET issue #104582.
  • A versão inicial da versão 1.6.0 introduziu um problema com uma de nossas dependências que esperamos que seja resolvido em uma versão futura do SDK do .NET. Se você encontrar um erro com a versão da referência do Microsoft.Windows.SDK.NET, precisará referenciar explicitamente a versão do SDK do .NET especificada pela mensagem de erro. Por exemplo, se o erro disser que você precisa da versão 10.0.19041.38, adicione o seguinte ao seu .csproj arquivo:
    • <WindowsSdkPackageVersion>10.0.19041.38</WindowsSdkPackageVersion>.

Correções de bugs

  • Corrigida uma falha ao definir InfoBar.IsOpen em .xaml. Para obter mais informações, consulte o problema #8391 do GitHub.
  • Corrigido um problema em que os elementos HTML perdiam a captura do ponteiro quando o mouse se movia para fora dos WebView2 limites. Para obter mais informações, consulte o problema #8677 do GitHub.
  • Corrigido um problema em que arrastar e soltar em um submenu com ShouldConstrainToRootBounds=false não funcionava. Para obter mais informações, consulte o problema #9276 do GitHub.
  • Corrigido um problema em que ms-appx:// as referências não funcionavam quando PublishSingleFile ativado. Para obter mais informações, consulte o problema #9468 do GitHub.
  • Corrigido um problema em que os símbolos do depurador não funcionavam corretamente para alguns binários. Para obter mais informações, consulte o problema #4633 do GitHub.
  • Corrigido um possível travamento ao subclassificar NavigationView.
  • Corrigido um problema em que as bordas da tabela em um RichEditBox não eram apagadas corretamente ao rolar ou reduzir o tamanho da tabela.
  • Corrigido um problema em que os submenus tinham um plano de MediaTransportControls fundo totalmente transparente.
  • Corrigido um problema em que arrastar para um WebView2 falhava ou soltava no local errado em fatores de escala de exibição diferentes de 100% ou quando o dimensionamento de texto do sistema estava habilitado.
  • Corrigido um problema em que TextBox/RichEditBox não anunciava às ferramentas de acessibilidade quando a entrada era bloqueada devido a estar no MaxLength limite.
  • Corrigidos alguns problemas relacionados ao manuseio de cenários personalizados da barra de título. Para obter mais informações, consulte os problemas do GitHub #7629, #9670, #9709 e #8431.
  • Corrigido um problema em que InfoBadge o ícone não estava visível. Para obter mais informações, consulte o problema #8176 do GitHub.
  • Corrigido um problema com ícones às vezes exibidos na posição errada em CommandBarFlyout. Para obter mais informações, confira o issue n.º 9409 do GitHub.
  • Corrigido um problema com o foco do teclado nos menus ao abrir ou fechar um submenu. Para obter mais informações, consulte o problema #9519 do GitHub.
  • Corrigido um problema com TreeView o uso do estado incorreto IsExpanded ao reciclar itens. Para obter mais informações, consulte o problema #9549 do GitHub.
  • Corrigido um problema ao usar uma associação ElementName em um ItemsRepeater.ItemTemplate. Para obter mais informações, consulte o problema #9715 do GitHub.
  • Corrigido um problema com o primeiro item às ItemsRepeater vezes com uma posição incorreta. Para obter mais informações, consulte o problema #9743 do GitHub.
  • Corrigido um problema com InputNonClientPointerSource às vezes interrompendo a entrada nos botões min/max/close. Para obter mais informações, consulte o problema #9749 do GitHub.
  • Corrigido um erro de compilação ao usar Microsoft.UI.Interop.h com clang-cl. Para obter mais informações, consulte o problema #9771 do GitHub.
  • Corrigido um problema em que o CharacterReceived evento não funcionava no/ComboBoxTextBox . Para obter mais informações, consulte o problema #9786 do GitHub.
  • Corrigido um problema em que eventos duplicados KeyUp eram gerados para teclas de seta e tab. Para obter mais informações, consulte o problema #9399 do GitHub.
  • Corrigido um problema em que o PowerManager.SystemSuspendStatusChanged evento era inutilizável para obter o SystemSuspendStatus. Para obter mais informações, consulte o problema #2833 do GitHub.
  • Corrigido um problema em que o foco inicial do teclado não era dado corretamente a um WebView2 quando esse era o único controle na janela.
  • Corrigido um problema ao usar ExtendsContentIntoTitleBar=true em que os botões Mín/Máx/Fechar não apareciam corretamente na Automação da Interface do Usuário, o que impedia o Acesso por Voz de mostrar números para esses botões.
  • Corrigido um problema em que um aplicativo pode falhar em uma verificação de bloqueio devido a uma reentrância inesperada.
  • Corrigido um problema em que Hyperlink as cores não eram atualizadas corretamente ao alternar para um tema de alto contraste.
  • Corrigido um problema em que alterar a coleção de a ListView em uma janela de plano de fundo poderia mover incorretamente essa janela para o primeiro plano e obter o foco.
  • Corrigido um problema em que chamar ItemsRepeater.StartBringIntoView às vezes fazia com que os itens desaparecessem.
  • Corrigido um problema em que tocar e arrastar em um Button em a ScrollViewer o deixava em um estado pressionado.
  • Atualização do IntelliSense, que estava faltando informações para muitos tipos e membros mais recentes.
  • Corrigido um problema em que clicar em uma área vazia de um ScrollViewer sempre movia o foco para o primeiro controle focalizável no ScrollViewer e rolava esse controle para exibição. Para obter mais informações, consulte o problema #597 do GitHub.
  • Corrigido um problema em que o evento às vezes disparava Window.Activated várias vezes. Para obter mais informações, consulte o problema #7343 do GitHub.
  • Corrigido um problema em que definir a NavigationViewItem.IsSelected propriedade impedia true que seus filhos fossem exibidos quando expandidos. Para obter mais informações, consulte o problema #7930 do GitHub.
  • Corrigido um problema em que MediaPlayerElement não exibia corretamente legendas com None ou DropShadow efeitos de borda. Para obter mais informações, consulte o problema #7981 do GitHub.
  • Corrigido um problema em que a Flyout.ShowMode propriedade não era usada ao mostrar o submenu. Para obter mais informações, consulte o problema #7987 do GitHub.
  • Corrigido um problema em que NumberBox às vezes havia erros de arredondamento. Para obter mais informações, consulte o problema #8780 do GitHub.
  • Corrigido um problema em que o uso de uma biblioteca compilada em uma versão mais antiga do WinAppSDK poderia ocorrer um erro ao tentar localizar um tipo ou propriedade. Para obter mais informações, consulte o problema #8810 do GitHub.
  • Corrigido um problema em que o foco inicial do teclado não era definido ao iniciar uma janela. Para obter mais informações, consulte o problema #8816 do GitHub.
  • Corrigido um problema em que FlyoutShowMode.TransientWithDismissOnPointerMoveAway não funcionava após a primeira vez que era mostrado. Para obter mais informações, consulte o problema #8896 do GitHub.
  • Corrigido um problema em que alguns controles não associavam e propriedades de modelo Foreground Background corretamente. Para obter mais informações, consulte os problemas #7070, #9020, #9029, #9083 e #9102 do GitHub.
  • Corrigido um problema em que ThemeResources usados em VisualStateManager setters não eram atualizados na mudança de tema. Isso geralmente afetava os controles em submenus. Para obter mais informações, consulte o problema #9198 do GitHub.
  • Corrigido um problema em que WebView perdia o foco principal, resultando em eventos extras de desfoque/foco e outros problemas. Para obter mais informações, consulte o problema #9288 do GitHub.
  • Corrigido um problema em que NavigationView poderia mostrar um erro de associação na saída de depuração. Para obter mais informações, consulte o problema #9384 do GitHub.
  • Corrigido um problema em que os arquivos SVG que definiam uma caixa de visualização negativa não eram mais renderizados. Para obter mais informações, consulte o problema #9415 do GitHub.
  • Corrigido um problema em que alterar ItemsView.Layout a orientação fazia com que um item fosse removido. Para obter mais informações, consulte o problema #9422 do GitHub.
  • Corrigido um problema em que a ScrollView rolagem gerava muita saída de depuração. Para obter mais informações, consulte o problema #9434 do GitHub.
  • Corrigido um problema em que MapContorl.InteractiveControlsVisible não funcionava corretamente. Para obter mais informações, consulte o problema #9486 do GitHub.
  • Corrigido um problema em que MapControl.MapElementClick o evento não era acionado corretamente. Para obter mais informações, consulte o problema #9487 do GitHub.
  • Corrigido um problema em que x:Bind não verificava se havia nulo antes de usar uma referência fraca, o que poderia resultar em uma falha. Para obter mais informações, consulte o problema #9551 do GitHub.
  • Corrigido um problema em que a alteração da TeachingTip.Target propriedade não atualizava corretamente sua posição. Para obter mais informações, consulte o problema #9553 do GitHub.
  • Corrigido um problema em que as listas suspensas não respondiam no WebView2. Para obter mais informações, consulte o problema #9566 do GitHub.
  • Corrigido um vazamento de memória ao usar GeometryGroup. Para obter mais informações, consulte o problema #9578 do GitHub.
  • Corrigido um problema em que rolar por um número muito grande de itens de um ItemRepeater em um ScrollView poderia causar quadros de renderização em branco. Para obter mais informações, consulte o problema #9643 do GitHub.
  • Corrigido um problema em que SceneVisual não estava funcionando.

Novas APIs na versão 1.6.0

A versão 1.6.0 inclui as seguintes novas APIs em comparação com a versão estável 1.5:

Microsoft.UI

    ColorHelper
        ToDisplayName
Microsoft.UI.Input

    EnteredMoveSizeEventArgs
    EnteringMoveSizeEventArgs
    ExitedMoveSizeEventArgs
    InputNonClientPointerSource
        EnteredMoveSize
        EnteringMoveSize
        ExitedMoveSize
        WindowRectChanged
        WindowRectChanging

    MoveSizeOperation
    WindowRectChangedEventArgs
    WindowRectChangingEventArgs
Microsoft.UI.Xaml

    XamlRoot
        CoordinateConverter
Microsoft.UI.Xaml.Automation.Peers

    ScrollPresenterAutomationPeer
Microsoft.UI.Xaml.Controls

    PipsPager
        WrapMode
        WrapModeProperty

    PipsPagerWrapMode
    TabView
        CanTearOutTabs
        CanTearOutTabsProperty
        ExternalTornOutTabsDropped
        ExternalTornOutTabsDropping
        TabTearOutRequested
        TabTearOutWindowRequested

    TabViewExternalTornOutTabsDroppedEventArgs
    TabViewExternalTornOutTabsDroppingEventArgs
    TabViewTabTearOutRequestedEventArgs
    TabViewTabTearOutWindowRequestedEventArgs
Microsoft.Windows.Globalization

    ApplicationLanguages
Microsoft.Windows.Management.Deployment

    EnsureReadyOptions
        RegisterNewerIfAvailable

    PackageDeploymentFeature
    PackageDeploymentManager
        IsPackageDeploymentFeatureSupported
        IsPackageProvisioned
        IsPackageProvisionedByUri
        IsPackageReadyOrNewerAvailable
        IsPackageReadyOrNewerAvailableByUri
        IsPackageSetProvisioned
        IsPackageSetReadyOrNewerAvailable

    PackageReadyOrNewerAvailableStatus
Microsoft.Windows.Storage

    ApplicationData
    ApplicationDataContainer
    ApplicationDataContract
    ApplicationDataCreateDisposition
    ApplicationDataLocality