Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo descreve como atualizar um aplicativo da área de trabalho do WPF (Windows Presentation Foundation) para o .NET 8. Embora o WPF seja executado no .NET, uma tecnologia multiplataforma, o WPF ainda é uma estrutura somente do Windows. Os seguintes tipos de projeto relacionados ao WPF podem ser atualizados com o Assistente de Atualização do .NET:
- Projeto do WPF
- Biblioteca de controle
- Biblioteca .NET
Se você estiver atualizando do .NET Framework para o .NET, considere revisar o artigo Diferenças do WPF com o .NET e o guia Migrando do .NET Framework para o .NET.
Pré-requisitos
- Sistema operacional Windows
- Visual Studio 2022 versão 17.7 ou posterior para atingir o .NET 8
- Visual Studio 2022 versão 17.1 ou posterior para atingir 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 de Exemplo de Favoritos da Web , que você pode baixar no repositório GitHub de exemplos do .NET.
Iniciar a atualização
Se você estiver atualizando vários projetos, comece com projetos que não tenham dependências. No exemplo de Favoritos da Web, o projeto WebSiteRatings depende da biblioteca StarVoteControl , portanto, StarVoteControl deve ser atualizado primeiro.
Dica
Certifique-se de ter um backup do seu código, como no controle do código-fonte ou em 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 janela do Gerenciador de Soluções e selecione Atualizar:
Uma nova guia é aberta e 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, opções diferentes são apresentadas. O .NET Standard 2.0 será uma boa opção se a biblioteca não depender de uma tecnologia de área de trabalho como o WPF e puder ser usada por projetos do .NET Framework e projetos do .NET. No entanto, as versões mais recentes do .NET fornecem muitos aprimoramentos de idioma e compilador em relação ao .NET Standard.
Selecione .NET 8.0 e selecione Avançar.
Uma árvore é mostrada com todos os artefatos relacionados ao projeto, como arquivos de código e bibliotecas. É possível atualizar artefatos individuais ou o projeto inteiro, que é o padrão. Selecione Seleção de atualização para iniciar a atualização.
Quando a atualização for concluída, os resultados serão exibidos:
Artefatos com um círculo verde sólido foram atualizados, enquanto círculos verdes vazios foram ignorados. Artefatos ignorados 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 o aplicativo
Depois que todas as bibliotecas de suporte forem atualizadas, o projeto do aplicativo principal poderá ser atualizado. Execute as seguintes etapas:
- Clique com o botão direito do mouse no projeto WebSiteRatings na janela do Gerenciador de Soluções e selecione Atualizar:
- Selecione atualização de projeto in-place como o modo de atualização.
- Selecione .NET 8.0 para a estrutura de destino e selecione Avançar.
- Deixe todos os artefatos selecionados e selecione Atualizar seleçã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 anotação para você ler, o que você pode fazer expandindo o item.
Gerar uma compilação limpa
Depois que o projeto for atualizado, limpe-o e compile-o.
- Clique com o botão direito do mouse no projeto WebSiteRatings na janela do Gerenciador de Soluções e selecione Limpar.
- Clique com o botão direito do mouse no projeto WebSiteRatings na janela do Gerenciador de Soluções e selecione Compilar.
Se o aplicativo encontrou erros, você pode encontrá-los na janela Lista de Erros com uma recomendação de como corrigi-los.
Etapas de pós-atualização
Se o projeto estiver sendo atualizado do .NET Framework para o .NET, examine as informações no Modernizar após a atualização para o .NET do .NET Framework artigo.
Depois de atualizar, você desejará:
Verifique seus pacotes NuGet.
O .NET Upgrade Assistant atualizou alguns pacotes para novas versões. Com o aplicativo de exemplo fornecido neste artigo, o
Microsoft.Data.Sqlitepacote NuGet foi atualizado de 1.0.0 para 8.0.x. No entanto, 1.0.0 depende doSQLitepacote NuGet, mas 8.0.x remove essa dependência. OSQLitepacote NuGet ainda é referenciado pelo projeto, embora não seja mais necessário. Tanto o pacote NuGetSQLitequanto oSQLite.Nativepodem ser removidos do projeto.Limpe os pacotes NuGet antigos.
O arquivo packages.config não é mais necessário e pode ser excluído do projeto, pois as referências do pacote NuGet agora são declaradas no arquivo de projeto. Além disso, a pasta de cache do pacote NuGet local, chamada Pacotes, está na pasta ou na pasta pai do projeto. Essa pasta de cache local pode ser excluída. As novas referências de pacote NuGet usam uma pasta de cache global para pacotes, disponível no diretório de perfil do usuário, chamado .nuget\packages.
Remova a
System.Configurationbiblioteca.A maioria dos aplicativos do .NET Framework faz referência à
System.Configurationbiblioteca. Após a atualização, é possível que essa biblioteca ainda seja referenciada diretamente.A
System.Configurationbiblioteca usa o arquivo app.config para fornecer opções de configuração em tempo de execução para seu aplicativo. Para .NET, essa biblioteca foi substituída peloSystem.Configuration.ConfigurationManagerpacote NuGet. Remova a referência à biblioteca e adicione o pacote NuGet ao seu projeto.Verifique se há lugares para modernizar seu aplicativo.
AS 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, agora você tem acesso a bibliotecas mais modernas.
As próximas seções descrevem as áreas em que você pode modernizar o aplicativo de exemplo utilizado neste artigo.
Modernizar: controle do navegador da Web
O WebBrowser controle referenciado pelo aplicativo de exemplo do WPF é baseado no Internet Explorer, que está desatualizado. O WPF para .NET pode usar o controle WebView2 com base no Microsoft Edge. Conclua as seguintes etapas para atualizar para o novo WebView2 controle do navegador da Web:
Adicione o pacote NuGet
Microsoft.Web.WebView2.No arquivo MainWindow.xaml :
Importe o controle para o namespace wpfControls 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">No local em que o
<Border>elemento é declarado, remova oWebBrowsercontrole e substitua-o pelowpfControls:WebView2controle:<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 associado MainWindow.xaml.cs. Atualize o método
ListBox_SelectionChangedpara definir a propriedadebrowser.Sourcepara um Uri válido. Esse código passou anteriormente na URL do site como uma cadeia de caracteres, mas o WebView2 controle 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 de qual versão do Windows um usuário do seu aplicativo está em execução, talvez seja 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 de aplicativo.
App.config arquivos são suportados no .NET através do System.Configuration.ConfigurationManager pacote NuGet, e o suporte para appsettings.json é oferecido através do Microsoft.Extensions.Configuration pacote NuGet.
À medida que outras bibliotecas são atualizadas para o .NET, elas são modernizadas com suporte appsettings.json em vez de App.config. Por exemplo, os provedores de log no .NET Framework que foram atualizados para .NET 6+ não usam mais App.config para configurações. É bom seguir a direção deles e também deixar de usar App.config onde puder.
Use o appsettings.json com o aplicativo de exemplo do WPF
Por exemplo, depois de atualizar o aplicativo de exemplo do WPF, use appsettings.json para a string de conexão com o banco de dados local.
Remova o
System.Configuration.ConfigurationManagerpacote NuGet.Adicione o pacote NuGet
Microsoft.Extensions.Configuration.Json.Adicione um arquivo ao projeto chamado appsettings.json.
Defina o arquivo appsettings.json para copiar para o diretório de saída.
Defina a configuração copiar para saída no Visual Studio usando a janela Propriedades, 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 deappsettings.json .
No aplicativo de exemplo do 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
OpenConnectionmétodo para usar a novaApp.Configpropriedade. Isso requer a importação doMicrosoft.Extensions.Configurationnamespace: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 peloMicrosoft.Extensions.Configurationnamespace.
.NET Desktop feedback