Como atualizar um aplicativo de área de trabalho WPF para .NET 8
Este artigo descreve como atualizar um aplicativo de área de trabalho do Windows Presentation Foundation (WPF) para .NET 8. Embora o WPF seja executado no .NET, uma tecnologia multiplataforma, o WPF ainda é uma estrutura somente para Windows. Os seguintes tipos de projeto relacionados ao WPF podem ser atualizados com o Assistente de Atualização do .NET:
- Projeto WPF
- Biblioteca de controlo
- Biblioteca .NET
Se você estiver atualizando do .NET Framework para o .NET, considere revisar o artigo Diferenças com o WPF .NET e o guia Portabilidade do .NET Framework para o .NET.
Pré-requisitos
- Sistema operacional Windows
- Visual Studio 2022 versão 17.7 ou posterior para direcionar o .NET 8
- Visual Studio 2022 versão 17.1 ou posterior para usar com o .NET 7
- extensão do Assistente de Atualização do .NET para Visual Studio
Aplicação de demonstração
Este artigo foi escrito no contexto da atualização do projeto Web Favorites Sample, que pode ser baixado do repositório .NET Samples no GitHub.
Iniciar a atualização
Se você estiver atualizando vários projetos, comece com projetos que não têm dependências. No exemplo de Favoritos da Web, o projeto
Dica
Certifique-se de ter um backup do seu código, como no controle do código-fonte ou uma cópia.
Use as seguintes etapas para atualizar um projeto no Visual Studio:
Clique com o botão direito do mouse no projeto
StarVoteControl na janelaSolution Explorer e selecione Upgrade :É aberta uma nova guia que solicita que você escolha como deseja que a atualização seja executada.
Selecione atualização de projeto no local.
Em seguida, selecione a estrutura de destino. Com base no tipo de projeto que você está atualizando, diferentes opções são apresentadas. do .NET Standard 2.0 é uma boa opção se a biblioteca não depender de uma tecnologia desktop como o WPF e puder ser usada tanto por projetos do .NET Framework como por projetos .NET. No entanto, as versões mais recentes do .NET fornecem muitos aprimoramentos de linguagem e compilador em relação ao .NET Standard.
Selecione .NET 8.0 e, em seguida, selecione Avançar.
Uma árvore é mostrada com todos os artefatos relacionados ao projeto, como arquivos de código e bibliotecas. Você pode atualizar artefatos individuais ou o projeto inteiro, que é o padrão. Selecione de seleção Atualização para iniciar a atualização.
Quando a atualização estiver concluída, os resultados serão exibidos:
Artefatos com um círculo verde sólido foram atualizados, enquanto círculos verdes vazios foram ignorados. Itens omitidos significam que o assistente de atualização não encontrou nada para atualizar.
Agora que a biblioteca de suporte do aplicativo foi atualizada, atualize o aplicativo principal.
Atualizar a aplicação
Depois que todas as bibliotecas de suporte forem atualizadas, o projeto principal do aplicativo poderá ser atualizado. Execute as seguintes etapas:
- Clique com o botão direito do mouse no projeto
WebSiteRatings na janelaSolution Explorer e selecione Upgrade : - Selecione Atualização de Projeto em-loco como o modo de atualização.
- Selecione do .NET 8.0 para a estrutura de destino e selecione Avançar.
- Deixe todos os artefatos selecionados e selecione Selecionar atualização.
Após a conclusão da atualização, os resultados são mostrados. Se um item tiver um símbolo de aviso, isso significa que há uma nota para você ler, o que você pode fazer expandindo o item.
Gere uma compilação limpa
Depois que seu projeto for atualizado, limpe-o e compile-o.
- Clique com o botão direito do rato no projeto WebSiteRatings na janela Explorador de Soluções e selecione Limpar.
- Clique com o botão direito do mouse no projeto WebSiteRatings
na janela Gerenciador de Soluções e selecione Build .
Se a sua aplicação encontrou algum erro, pode encontrá-los na janela Lista de Erros, juntamente com uma recomendação de como corrigi-los.
Etapas pós-atualização
Se o seu projeto estiver a ser atualizado do .NET Framework para o .NET, consulte as informações no artigo Modernize após a atualização do .NET Framework para o .NET.
Após a atualização, você vai querer:
Verifique seus pacotes NuGet.
O Assistente de Atualização do .NET atualizou alguns pacotes para novas versões. Com o aplicativo de exemplo fornecido neste artigo, o pacote NuGet
Microsoft.Data.Sqlite
foi atualizado de 1.0.0 para 8.0.x. No entanto, 1.0.0 depende do pacote NuGetSQLite
, mas 8.0.x remove essa dependência. O pacote NuGetSQLite
ainda é referenciado pelo projeto, embora não seja mais necessário. Os pacotesSQLite
eSQLite.Native
NuGet podem ser removidos do projeto.Limpe os pacotes NuGet antigos.
O arquivo packages.config não é mais necessário e pode ser excluído do seu projeto, pois as referências do pacote NuGet agora são declaradas no arquivo do projeto. Além disso, a pasta de cache de pacotes NuGet local, chamada Packages, está dentro da pasta ou na pasta-mãe do projeto. Esta pasta de cache local pode ser excluída. As novas referências de pacotes NuGet usam uma pasta de cache global para pacotes, disponível no diretório de perfil do usuário, chamada .nuget\packages.
Remova a biblioteca
System.Configuration
.A maioria dos aplicativos do .NET Framework faz referência à biblioteca
System.Configuration
. Após a atualização, é possível que esta biblioteca ainda esteja diretamente referenciada.A biblioteca de
System.Configuration
usa o arquivo app.config para fornecer opções de configuração em tempo de execução para seu aplicativo. Para o .NET, essa biblioteca foi substituída pelo pacote NuGetSystem.Configuration.ConfigurationManager
. Remova a referência à biblioteca e adicione o pacote NuGet ao seu projeto.Verifique se há lugares para modernizar seu aplicativo.
APIs e bibliotecas mudaram bastante desde que o .NET foi lançado. E, na maioria dos casos, o .NET Framework não tem acesso a essas melhorias. Ao atualizar para o .NET, você agora tem acesso a bibliotecas mais modernas.
As próximas seções descrevem as áreas em que você moderniza o aplicativo de exemplo usado por este artigo.
Modernizar: controle de navegador da Web
O controle de WebBrowser referenciado pelo aplicativo de exemplo WPF é baseado no Internet Explorer, que está desatualizado. WPF para .NET pode usar o WebView2 controle com base no Microsoft Edge. Conclua as seguintes etapas para atualizar para o novo controle de navegador da Web WebView2:
Adicione o pacote NuGet
Microsoft.Web.WebView2
.No arquivo de MainWindow.xaml:
Importe o controle para o wpfControls namespace no elemento raiz:
<mah:MetroWindow x:Class="WebSiteRatings.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mah="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro" xmlns:local="clr-namespace:WebSiteRatings" xmlns:vm="clr-namespace:WebSiteRatings.ViewModels" xmlns:VoteControl="clr-namespace:StarVoteControl;assembly=StarVoteControl" xmlns:wpfControls="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf" Loaded="MetroWindow_Loaded" mc:Ignorable="d" Title="My Sites" Height="650" Width="1000">
Onde o elemento
<Border>
é declarado, remova o controleWebBrowser
e substitua-o pelo controlewpfControls:WebView2
:<Border Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" BorderThickness="1" BorderBrush="Black" Margin="5"> <wpfControls:WebView2 x:Name="browser" ScrollViewer.CanContentScroll="True" /> </Border>
Edite o arquivo de código subjacente MainWindow.xaml.cs. Atualize o método
ListBox_SelectionChanged
para definir a propriedadebrowser.Source
como um Uriválido. Esse código passou anteriormente na URL do site como uma cadeia de caracteres, mas o controle WebView2 requer umUri
.private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { var siteCollection = (ViewModels.SiteCollection)DataContext; if (siteCollection.SelectedSite != null) browser.Source = new Uri(siteCollection.SelectedSite.Url); else browser.NavigateToString("<body></body>"); }
Dependendo da versão do Windows que o utilizador da sua aplicação está a executar, pode ser necessário instalar o runtime do WebView2. Para obter mais informações, consulte Introdução ao WebView2 em aplicativos WPF.
Modernizar: appsettings.json
O .NET Framework usa o arquivo App.config para carregar configurações para seu aplicativo, como cadeias de conexão e provedores de log. O .NET agora usa o arquivo appsettings.json para configurações do aplicativo.
App.config arquivos são suportados no .NET por meio do pacote NuGet System.Configuration.ConfigurationManager
e o suporte para appsettings.json é fornecido pelo pacote NuGet Microsoft.Extensions.Configuration
.
À medida que outras bibliotecas atualizam para o .NET, elas se modernizam oferecendo suporte a appsettings.json em vez de App.config. Por exemplo, os provedores de log no .NET Framework que foram atualizados para o .NET 6+ não usam mais App.config para configurações. É bom seguir a direção deles e também se afastar do uso de App.config sempre que puder.
Usar appsettings.json com o aplicativo de exemplo WPF
Como exemplo, depois de atualizar o aplicativo de exemplo WPF, use appsettings.json para a cadeia de conexão com o banco de dados local.
Remova o pacote NuGet
System.Configuration.ConfigurationManager
.Adicione o pacote NuGet
Microsoft.Extensions.Configuration.Json
.Adicione um arquivo ao projeto chamado appsettings.json.
Defina o arquivo appsettings.json a ser copiado para o diretório de saída.
Defina a cópia para a configuração de saída usando a janela Propriedades através do Visual Studio depois de selecionar o arquivo no Gerenciador de Soluções . Como alternativa, você pode editar o projeto diretamente e adicionar o seguinte
ItemGroup
:<ItemGroup> <Content Include="appsettings.json"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> </ItemGroup>
Migre as configurações no arquivo App.config para um novo arquivo appsettings.json.
No aplicativo de exemplo WPF, app.config continha apenas uma única cadeia de conexão. Edite o arquivo appsettings.json para definir a cadeia de conexão:
{ "ConnectionStrings": { "database": "DataSource=sqlite.db;" } }
Edite o arquivo App.xaml.cs, instanciando um objeto de configuração que carrega o arquivo appsettings.json, as linhas adicionadas são realçadas:
using System.Windows; using Microsoft.Extensions.Configuration; namespace WebSiteRatings { /// <summary> /// Interaction logic for App.xaml /// </summary> public partial class App : Application { public static IConfiguration Config { get; private set; } public App() { Config = new ConfigurationBuilder() .AddJsonFile("appsettings.json") .Build(); } } }
No arquivo .\Models\Database.cs
, altere o método para usar a nova propriedade . Isso requer a importação do namespace Microsoft.Extensions.Configuration
:using Microsoft.Data.Sqlite; using System.Collections.Generic; using Microsoft.Extensions.Configuration; namespace WebSiteRatings.Models { internal class Database { public static SqliteConnection OpenConnection() => new SqliteConnection(App.Config.GetConnectionString("database")); public static IEnumerable<Site> ReadSites()
GetConnectionString
é um método de extensão fornecido pelo namespaceMicrosoft.Extensions.Configuration
.
.NET Desktop feedback