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.
Se você estiver migrando um aplicativo do .NET Framework para as versões do .NET Core 1.0 a 3.1, as mudanças disruptivas listadas neste artigo poderão afetá-lo. As mudanças disruptivas são agrupadas por categoria, e dentro dessas categorias, pela versão do .NET Core em que foram introduzidas.
Observação
Este artigo não é uma lista completa de alterações significativas entre o .NET Framework e o .NET Core. As alterações significativas mais importantes são adicionadas aqui à medida que nos tornamos cientes delas.
Bibliotecas principais do .NET
- Alteração no valor padrão de UseShellExecute
- API IDispatchImplAttribute é removida
- Exceção de acesso não autorizado lançada por FileSystemInfo.Attributes
- Não há suporte para o tratamento de exceções de estado de processo corrompido
- As propriedades do UriBuilder não acrescentam mais caracteres à esquerda
- Process.StartInfo lança InvalidOperationException para processos que você não iniciou
.NET 8
API IDispatchImplAttribute é removida
.NET Core 2.1
Alteração no valor padrão de UseShellExecute
ProcessStartInfo.UseShellExecute tem um valor padrão de false no .NET Core. No .NET Framework, seu valor padrão é true.
Descrição da alteração
Process.Start permite que você inicie um aplicativo diretamente, por exemplo, com código como Process.Start("mspaint.exe") o que inicia o Paint. Ele também permite que você indiretamente inicie um aplicativo associado se ProcessStartInfo.UseShellExecute estiver definido como true. No .NET Framework, o valor padrão para ProcessStartInfo.UseShellExecute é true, o que significa que códigos como Process.Start("mytextfile.txt") iniciariam o Bloco de Notas, se você tiver associado arquivos .txt a esse editor. Para impedir a inicialização indireta de um aplicativo no .NET Framework, você deve definir ProcessStartInfo.UseShellExecute explicitamente como false. No .NET Core, o valor ProcessStartInfo.UseShellExecute padrão é false. Isso significa que, por padrão, os aplicativos associados não são iniciados quando você chama Process.Start.
As propriedades em System.Diagnostics.ProcessStartInfo funcionam apenas quando ProcessStartInfo.UseShellExecute é true.
- ProcessStartInfo.CreateNoWindow
- ProcessStartInfo.ErrorDialog
- ProcessStartInfo.Verb
- ProcessStartInfo.WindowStyle
Essa alteração foi introduzida no .NET Core por motivos de desempenho. Normalmente, Process.Start é usado para iniciar um aplicativo diretamente. Iniciar um aplicativo diretamente não precisa envolver o shell do Windows e incorrer no custo de desempenho associado. Para tornar esse caso padrão mais rápido, o .NET Core altera o valor padrão de ProcessStartInfo.UseShellExecute para false. Você pode optar pelo caminho mais lento se precisar dele.
Versão introduzida
2.1
Observação
Em versões anteriores do .NET Core, UseShellExecute não foi implementado para o Windows.
Ação recomendada
Se seu aplicativo depender do comportamento antigo, chame Process.Start(ProcessStartInfo) com UseShellExecute definido para true no objeto ProcessStartInfo.
Categoria
Bibliotecas principais do .NET
APIs afetadas
.NET Core 1.0
UnauthorizedAccessException gerada por FileSystemInfo.Attributes
No .NET Core, um UnauthorizedAccessException é gerado quando o chamador tenta definir um valor de atributo de arquivo, mas não tem permissão de gravação.
Descrição da alteração
No .NET Framework, um ArgumentException é gerado quando o chamador tenta definir um valor de atributo de arquivo em FileSystemInfo.Attributes, mas não tem permissão de gravação. No .NET Core, um UnauthorizedAccessException é lançado em vez disso. (No .NET Core, um ArgumentException ainda será gerado se o chamador tentar definir um atributo de arquivo inválido.)
Versão introduzida
1,0
Ação recomendada
Modifique as instruções catch para capturar um UnauthorizedAccessException, em vez de ArgumentException ou além dele, conforme o necessário.
Categoria
Bibliotecas principais do .NET
APIs afetadas
Não há suporte para o tratamento de exceções de estado corrompido
Não há suporte para o tratamento de exceções de estado de processo corrompido no .NET Core.
Descrição da alteração
Anteriormente, exceções de estado de processo corrompido podiam ser capturadas e manipuladas por manipuladores de exceção de código gerenciado, por exemplo, usando uma instrução try-catch em C#.
A partir do .NET Core 1.0, exceções de estado de processo corrompido não podem ser tratadas pelo código gerenciado. O common language runtime não oferece exceções de estado de processo corrompido ao código gerenciado.
Versão introduzida
1,0
Ação recomendada
Evite a necessidade de lidar com exceções de estado de processo corrompido resolvendo as situações que as causam. Se for absolutamente necessário lidar com exceções de estado de processo corrompido, escreva o manipulador de exceção no código C ou C++.
Categoria
Bibliotecas principais do .NET
APIs afetadas
- System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute
- Elemento legacyCorruptedStateExceptionsPolicy
As propriedades do UriBuilder não acrescentam mais caracteres à esquerda
UriBuilder.Fragment não adiciona mais um caractere inicial # e UriBuilder.Query não adiciona mais um caractere inicial ? quando um já está presente.
Descrição da alteração
No .NET Framework, as propriedades UriBuilder.Fragment e UriBuilder.Query sempre acrescentam um caractere # ou ?, respectivamente, ao valor que está sendo armazenado. Esse comportamento pode resultar em múltiplos caracteres # ou ? no valor armazenado se a cadeia de caracteres já contiver um desses caracteres iniciais. Por exemplo, o valor de UriBuilder.Fragment pode se tornar ##main.
A partir do .NET Core 1.0, essas propriedades não pré-anexam os caracteres # ou ? ao valor armazenado se já estiverem presentes no início da string.
Versão introduzida
1,0
Ação recomendada
Você não precisa mais remover explicitamente nenhum desses caracteres principais ao definir os valores da propriedade. Isso é especialmente útil quando você está acrescentando valores, porque você não precisa mais remover o caractere de início # ou ? cada vez que acrescenta.
Por exemplo, o snippet de código a seguir mostra a diferença de comportamento entre o .NET Framework e o .NET Core.
var builder = new UriBuilder();
builder.Query = "one=1";
builder.Query += "&two=2";
builder.Query += "&three=3";
builder.Query += "&four=4";
Console.WriteLine(builder.Query);
- No .NET Framework, a saída é
????one=1&two=2&three=3&four=4. - No .NET Core, a saída é
?one=1&two=2&three=3&four=4.
Categoria
Bibliotecas principais do .NET
APIs afetadas
Process.StartInfo lança InvalidOperationException para processos que você não iniciou
A leitura da propriedade Process.StartInfo em processos que o código não iniciou gera uma InvalidOperationException.
Descrição da alteração
No .NET Framework, acessar a Process.StartInfo propriedade para processos que seu código não iniciou retorna um objeto fictício ProcessStartInfo . O objeto fictício contém valores padrão para todas as suas propriedades, exceto EnvironmentVariables.
Do .NET Core 1.0 em diante, se você ler a propriedade Process.StartInfo de um processo que não iniciou (ou seja, chamando Process.Start), será gerada uma InvalidOperationException.
Versão introduzida
1,0
Ação recomendada
Não acesse a Process.StartInfo propriedade para processos que seu código não iniciou. Por exemplo, não leia essa propriedade para processos retornados por Process.GetProcesses.
Categoria
Bibliotecas principais do .NET
APIs afetadas
Criptografia
.NET Core 2.1
Parâmetro booliano de SignedCms.ComputeSignature é respeitado
No .NET Core, o parâmetro booliano silent do SignedCms.ComputeSignature(CmsSigner, Boolean) método é respeitado. Um prompt de PIN não será mostrado se esse parâmetro for definido como true.
Descrição da alteração
No .NET Framework, o silent parâmetro do SignedCms.ComputeSignature(CmsSigner, Boolean) método é ignorado e um prompt de PIN sempre é mostrado se necessário pelo provedor. No .NET Core, o silent parâmetro é respeitado e, se definido como true, um prompt pin nunca é mostrado, mesmo que seja exigido pelo provedor.
O suporte para mensagens CMS/PKCS nº 7 foi introduzido no .NET Core na versão 2.1.
Versão introduzida
2.1
Ação recomendada
Para garantir que um prompt de PIN apareça se necessário, os aplicativos da área de trabalho devem chamar SignedCms.ComputeSignature(CmsSigner, Boolean) e definir o parâmetro booleano como false. O comportamento resultante é o mesmo que no .NET Framework, independentemente de o contexto silencioso ser desabilitado lá.
Categoria
Criptografia
APIs afetadas
MSBuild
.NET Core 3.0
Alteração do nome do arquivo de manifesto do recurso
Do .NET Core 3.0 em diante, no caso padrão, o MSBuild gera um nome de arquivo de manifesto diferente para arquivos de recursos.
Versão introduzida
3.0
Descrição da alteração
Antes do .NET Core 3.0, se o metadado LogicalName, ManifestResourceName ou DependentUpon não fosse especificado para um item EmbeddedResource no arquivo de projeto, o MSBuild gerava um nome de arquivo de manifesto no padrão <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources. Se RootNamespace não estava definido no arquivo de projeto, ele era assumido como o nome do projeto. Por exemplo, o nome do manifesto gerado para um arquivo de recurso chamado Form1.resx no diretório raiz do projeto era MyProject.Form1.resources.
Do .NET Core 3.0 em diante, se um arquivo de recurso estiver no mesmo local que um arquivo de origem com o mesmo nome (por exemplo, Form1.resx e Form1.cs), o MSBuild usará as informações de tipo do arquivo de origem para gerar o nome do arquivo de manifesto no padrão <Namespace>.<ClassName>.resources. O namespace e o nome de classe são extraídos do primeiro tipo no arquivo de origem no mesmo local. Por exemplo, o nome do manifesto gerado para um arquivo de recurso chamado Form1.resx que está no mesmo local que um arquivo de origem chamado Form1.cs é MyNamespace.Form1.resources. É importante observar que a primeira parte do nome do arquivo é diferente das versões anteriores do .NET Core (MyNamespace em vez de MyProject).
Observação
Se o metadado LogicalName, ManifestResourceName ou DependentUpon estiver especificado em um item EmbeddedResource no arquivo de projeto, essa alteração não afetará esse arquivo de recurso.
Essa alteração interruptiva foi introduzida com a adição da propriedade EmbeddedResourceUseDependentUponConvention aos projetos do .NET Core. Por padrão, os arquivos de recursos não são listados explicitamente em um arquivo de projeto do .NET Core, portanto, eles não têm metadados DependentUpon para especificar como nomear o arquivo .resources gerado. Quando EmbeddedResourceUseDependentUponConvention é definido como true, que é o padrão, o MSBuild procura um arquivo de origem no mesmo local e extrai um namespace e um nome de classe desse arquivo. Se você definir EmbeddedResourceUseDependentUponConvention como false, o MSBuild vai gerar o nome do manifesto de acordo com o comportamento anterior, que combina RootNamespace e o caminho do arquivo relativo.
Ação recomendada
Na maioria dos casos, nenhuma ação é necessária por parte do desenvolvedor e o aplicativo deve continuar funcionando. Mas se essa alteração interromper o aplicativo, você poderá:
Alterar o código para esperar o novo nome do manifesto.
Recusar a nova convenção de nomenclatura definindo
EmbeddedResourceUseDependentUponConventioncomofalseno arquivo de projeto.<PropertyGroup> <EmbeddedResourceUseDependentUponConvention>false</EmbeddedResourceUseDependentUponConvention> </PropertyGroup>
Categoria
MSBuild
APIs afetadas
Não aplicável
Rede
.NET Core 2.0
WebClient.CancelAsync nem sempre cancela imediatamente
A partir do .NET Core 2.0, a chamada WebClient.CancelAsync() não cancela imediatamente a solicitação se a resposta já começou a ser obtida.
Descrição da alteração
Anteriormente, a chamada WebClient.CancelAsync() cancelava a solicitação imediatamente. A partir do .NET Core 2.0, a chamada a WebClient.CancelAsync() só cancela a solicitação imediatamente se a busca da resposta tiver sido iniciada. Se a busca da resposta tiver sido iniciada, a solicitação só será cancelada após a leitura de uma resposta completa.
Essa alteração foi implementada porque a WebClient API foi preterida em favor de HttpClient.
Versão introduzida
2.0
Ação recomendada
Use a System.Net.Http.HttpClient classe em vez de System.Net.WebClient, que foi preterida.
Categoria
Rede
APIs afetadas
Windows Forms
O suporte do Windows Forms foi adicionado ao .NET Core na versão 3.0. Se você estiver migrando um aplicativo do Windows Forms do .NET Framework para o .NET Core, as alterações significativas listadas aqui poderão afetar seu aplicativo.
- Controles removidos
- O evento CellFormatting não é gerado quando a dica de ferramenta é mostrada
- Control.DefaultFont foi alterado para Segoe UI 9 pt
- Modernização do FolderBrowserDialog
- O atributo SerializableAttribute foi removido de alguns tipos do Windows Forms
- Não há suporte para a opção de compatibilidade AllowUpdateChildControlIndexForTabControls
- Não há suporte para a opção de compatibilidade DomainUpDown.UseLegacyScrolling
- Não há suporte para a opção de compatibilidade DoNotLoadLatestRichEditControl
- Não há suporte para a opção de compatibilidade DoNotSupportSelectAllShortcutInMultilineTextBox
- A alternativa de compatibilidade DontSupportReentrantFilterMessage não é suportada
- Não há suporte para a opção de compatibilidade EnableVisualStyleValidation
- Não há suporte para a opção de compatibilidade UseLegacyContextMenuStripSourceControlValue
- Não há suporte para a opção de compatibilidade UseLegacyImages
- Os modelos About e SplashScreen estão defeituosos para o Visual Basic
- Tipos do namespace Microsoft.VisualBasic.ApplicationServices não estão disponíveis
- Tipos no namespace Microsoft.VisualBasic.Devices não disponíveis
- Tipos no namespace Microsoft.VisualBasic.MyServices não estão disponíveis
.NET Core 3.1
Controles removidos
A partir do .NET Core 3.1, alguns controles do Windows Forms não estão mais disponíveis.
Descrição da alteração
A partir do .NET Core 3.1, vários controles do Windows Forms não estão mais disponíveis. Controles de substituição que têm melhor design e suporte foram introduzidos no .NET Framework 2.0. Os controles preteridos foram removidos anteriormente das caixas de ferramentas do designer, mas ainda estavam disponíveis para serem usados.
Os seguintes tipos não estão mais disponíveis:
- ContextMenu
- DataGrid
- DataGrid.HitTestType
- DataGrid.HitTestInfo
- DataGridBoolColumn
- DataGridCell
- DataGridColumnStyle
- DataGridColumnStyle.DataGridColumnHeaderAccessibleObject
- DataGridColumnStyle.CompModSwitches
- DataGridLineStyle
- DataGridParentRowsLabelStyle
- DataGridPreferredColumnWidthTypeConverter
- DataGridTableStyle
- DataGridTextBox
- DataGridTextBoxColumn
- GridColumnStylesCollection
- GridTablesFactory
- GridTableStylesCollection
- IDataGridEditingService
- IMenuEditorService
- MainMenu
- Menu
- Menu.MenuItemCollection
- MenuItem
- ToolBar
- ToolBarAppearance
- ToolBarButton
- ToolBar.ToolBarButtonCollection
- ToolBarButtonClickEventArgs
- ToolBarButtonStyle
- ToolBarTextAlign
Versão introduzida
3.1
Ação recomendada
Cada controle removido tem um controle de substituição recomendado. Consulte a tabela a seguir:
| Controle removido (API) | Substituição recomendada | APIs associadas que são removidas |
|---|---|---|
| Menu de Contexto | Menu de Contexto (ContextMenuStrip) | |
| DataGrid | DataGridView | DataGridCell, DataGridRow, DataGridTableCollection, DataGridColumnCollection, DataGridTableStyle, DataGridColumnStyle, DataGridLineStyle, DataGridParentRowsLabel, DataGridParentRowsLabelStyle, DataGridBoolColumn, DataGridTextBox, GridColumnStylesCollection, GridTableStylesCollection, HitTestType |
| MenuPrincipal | MenuStrip | |
| Menu | ToolStripDropDown, ToolStripDropDownMenu | MenuItemCollection |
| MenuItem | ToolStripMenuItem | |
| Barra de Ferramentas | ToolStrip | Aparência da Barra de Ferramentas |
| ToolBarButton | ToolStripButton | ToolBarButtonClickEventArgs, ToolBarButtonClickEventHandler, ToolBarButtonStyle, ToolBarTextAlign |
Categoria
Windows Forms
APIs afetadas
- System.Windows.Forms.ContextMenu
- System.Windows.Forms.GridColumnStylesCollection
- System.Windows.Forms.GridTablesFactory
- System.Windows.Forms.GridTableStylesCollection
- System.Windows.Forms.IDataGridEditingService
- System.Windows.Forms.MainMenu
- System.Windows.Forms.Menu
- System.Windows.Forms.Menu.MenuItemCollection
- System.Windows.Forms.MenuItem
- System.Windows.Forms.ToolBar
- System.Windows.Forms.ToolBar.ToolBarButtonCollection
- System.Windows.Forms.ToolBarAppearance
- System.Windows.Forms.ToolBarButton
- System.Windows.Forms.ToolBarButtonClickEventArgs
- System.Windows.Forms.ToolBarButtonStyle
- System.Windows.Forms.ToolBarTextAlign
- System.Windows.Forms.DataGrid
- System.Windows.Forms.DataGrid.HitTestType
- System.Windows.Forms.DataGridBoolColumn
- System.Windows.Forms.DataGridCell
- System.Windows.Forms.DataGridColumnStyle
- System.Windows.Forms.DataGridLineStyle
- System.Windows.Forms.DataGridParentRowsLabelStyle
- System.Windows.Forms.DataGridPreferredColumnWidthTypeConverter
- System.Windows.Forms.DataGridTableStyle
- System.Windows.Forms.DataGridTextBox
- System.Windows.Forms.DataGridTextBoxColumn
- System.Windows.Forms.Design.IMenuEditorService
O evento CellFormatting não é gerado quando a dica de ferramenta é mostrada
Um DataGridView agora mostra as dicas de texto e de erro de uma célula quando focalizado por um mouse e quando selecionado por meio do teclado. Se uma dica de ferramenta for mostrada, o evento DataGridView.CellFormatting não será gerado.
Descrição da alteração
Antes do .NET Core 3.1, um DataGridView que tinha a propriedade ShowCellToolTips definida como true mostrava uma dica de ferramenta para o texto e os erros da célula quando ela era focalizada por um mouse. As dicas de ferramenta não eram mostradas quando uma célula era selecionada por meio do teclado (por exemplo, usando a tecla Tab, teclas de atalho ou a navegação com as setas). Se o usuário editou uma célula e, enquanto ainda DataGridView estava no modo de edição, passou o mouse sobre uma célula que não tinha a ToolTipText propriedade definida, um CellFormatting evento foi gerado para formatar o texto da célula para exibição na célula.
Para atender aos padrões de acessibilidade, começando no .NET Core 3.1, um DataGridView que tem a propriedade ShowCellToolTips definida como true mostra as dicas de ferramentas do texto e os erros de uma célula não apenas quando a célula é focalizada, mas também quando ela é selecionada por meio do teclado. Como consequência dessa alteração, o evento CellFormatting não é gerado quando células que não têm o conjunto de propriedades ToolTipText são focalizadas enquanto DataGridView está no modo de edição. O evento não é gerado porque o conteúdo da célula focalizada é mostrado como uma dica de ferramenta em vez de ser exibido na célula.
Versão introduzida
3.1
Ação recomendada
Refatorar qualquer código que dependa do evento CellFormatting enquanto DataGridView estiver no modo de edição.
Categoria
Windows Forms
APIs afetadas
Nenhum
.NET Core 3.0
Fonte de controle padrão alterada para Segoe UI 9 pt
Descrição da alteração
No .NET Framework, a Control.DefaultFont propriedade foi definida como Microsoft Sans Serif 8.25 pt. A imagem a seguir mostra uma janela que usa a fonte padrão.
A partir do .NET Core 3.0, a fonte padrão é definida como Segoe UI 9 pt, a mesma fonte que SystemFonts.MessageBoxFont. Como resultado dessa alteração, os formulários e controles são dimensionados cerca de 27% maiores para considerar o tamanho maior da nova fonte padrão. Por exemplo:
Essa alteração foi feita para se alinhar às diretrizes de experiência do usuário (UX) do Windows.
Versão introduzida
3.0
Ação recomendada
Devido à alteração no tamanho dos formulários e controles, verifique se o aplicativo é renderizado corretamente.
Para manter a fonte original para um único formulário, defina sua fonte padrão como Microsoft Sans Serif 8.25 pt. Por exemplo:
public MyForm()
{
InitializeComponent();
Font = new Font(new FontFamily("Microsoft Sans Serif"), 8.25f);
}
Ou você pode alterar a fonte padrão de um aplicativo inteiro de qualquer uma das seguintes maneiras:
Definindo a
ApplicationDefaultFontpropriedade MSBuild como "Microsoft Sans Serif, 8.25pt". Essa é a técnica preferida porque permite que o Visual Studio use as novas configurações no designer.<PropertyGroup> <ApplicationDefaultFont>Microsoft Sans Serif, 8.25pt</ApplicationDefaultFont> </PropertyGroup>Chamando Application.SetDefaultFont(Font).
class Program { [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.SetHighDpiMode(HighDpiMode.SystemAware); Application.SetDefaultFont(new Font(new FontFamily("Microsoft Sans Serif"), 8.25f)); Application.Run(new Form1()); } }
Categoria
- Windows Forms
APIs afetadas
Nenhum.
Modernização do FolderBrowserDialog
O componente de controle FolderBrowserDialog foi modificado nos aplicativos Windows Forms para .NET Core.
Descrição da alteração
No .NET Framework, o Windows Forms usa a seguinte caixa de diálogo para o controle FolderBrowserDialog:
No .NET Core 3.0, o Windows Forms usa um controle baseado em COM mais recente que foi introduzido no Windows Vista:
Versão introduzida
3.0
Ação recomendada
A caixa de diálogo será atualizada automaticamente.
Se você quiser manter a caixa de diálogo original, defina a FolderBrowserDialog.AutoUpgradeEnabled propriedade para false antes de mostrar a caixa de diálogo, conforme ilustrado pelo seguinte fragmento de código:
var dialog = new FolderBrowserDialog();
dialog.AutoUpgradeEnabled = false;
dialog.ShowDialog();
Categoria
Windows Forms
APIs afetadas
SerializableAttribute removido de alguns tipos do Windows Forms
Foi SerializableAttribute removido de algumas classes do Windows Forms que não têm cenários de serialização binária conhecidos.
Descrição da alteração
Os seguintes tipos são decorados com o SerializableAttribute no .NET Framework, mas o atributo foi removido no .NET Core.
System.InvariantComparer- System.ComponentModel.Design.ExceptionCollection
- System.ComponentModel.Design.Serialization.CodeDomSerializerException
System.ComponentModel.Design.Serialization.CodeDomComponentSerializationService.CodeDomSerializationStore- System.Drawing.Design.ToolboxItem
System.Resources.ResXNullRefSystem.Resources.ResXDataNodeSystem.Resources.ResXFileRef- System.Windows.Forms.Cursor
System.Windows.Forms.NativeMethods.MSOCRINFOSTRUCTSystem.Windows.Forms.NativeMethods.MSG
Historicamente, esse mecanismo de serialização tem tido sérias preocupações de manutenção e segurança. Manter SerializableAttribute em tipos significa que esses tipos devem ser testados para alterações de serialização de versão para versão e, potencialmente, de plataforma para plataforma. Isso dificulta a evolução desses tipos e pode ser caro de manter. Esses tipos não têm cenários conhecidos de serialização binária, o que minimiza o impacto da remoção do atributo.
Para obter mais informações, consulte Serialização binária.
Versão introduzida
3.0
Ação recomendada
Atualize qualquer código que possa depender desses tipos serem marcados como serializáveis.
Categoria
Windows Forms
APIs afetadas
- Nenhum
Não há suporte para a opção de compatibilidade AllowUpdateChildControlIndexForTabControls
Há suporte para a opção de compatibilidade Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls no Windows Forms no .NET Framework 4.6 e nas versões posteriores, mas não no .NET Core nem no .NET 5.0 e posteriores.
Descrição da alteração
No .NET Framework 4.6 e versões posteriores, a seleção de uma guia reordena sua coleção de controles. A Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls opção de compatibilidade permite que um aplicativo ignore essa reordenação quando esse comportamento é indesejável.
No .NET Core, bem como no .NET 5.0 e versões posteriores, a opção Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls não é suportada.
Versão introduzida
3.0
Ação recomendada
Remova o interruptor. Não há suporte para a opção e nenhuma funcionalidade alternativa está disponível.
Categoria
Windows Forms
APIs afetadas
- Nenhum
O switch de compatibilidade DomainUpDown.UseLegacyScrolling não é suportado
A opção de compatibilidade Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling, que foi introduzida no .NET Framework 4.7.1, não é compatível com o Windows Forms no .NET Core nem no .NET 5.0 e posteriores.
Descrição da alteração
A partir do .NET Framework 4.7.1, a opção de compatibilidade Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling permitiu aos desenvolvedores optar por não usar ações independentes DomainUpDown.DownButton() e DomainUpDown.UpButton(). A opção restaurou o comportamento herdado, no qual o DomainUpDown.UpButton() é ignorado se o texto de contexto está presente e o desenvolvedor é obrigado a usar a ação DomainUpDown.DownButton() no controle antes da ação DomainUpDown.UpButton(). Para obter mais informações, consulte <o elemento AppContextSwitchOverrides>.
No .NET Core, bem como no .NET 5.0 e versões posteriores, a opção Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling não é suportada.
Versão introduzida
3.0
Ação recomendada
Remova o interruptor. Não há suporte para a opção e nenhuma funcionalidade alternativa está disponível.
Categoria
Windows Forms
APIs afetadas
Não há suporte para a opção de compatibilidade DoNotLoadLatestRichEditControl
A opção de compatibilidade Switch.System.Windows.Forms.UseLegacyImages, que foi introduzida no .NET Framework 4.7.1, não é compatível com o Windows Forms no .NET Core nem no .NET 5.0 e posteriores.
Descrição da alteração
No .NET Framework 4.6.2 e nas versões anteriores, o RichTextBox controle cria uma instância do controle Win32 RichEdit v3.0 e, para aplicativos destinados ao .NET Framework 4.7.1, o RichTextBox controle cria uma instância do RichEdit v4.1 (em msftedit.dll). A Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl opção de compatibilidade foi introduzida para permitir que os aplicativos destinados ao .NET Framework 4.7.1 e versões posteriores escolham não usar o novo controle RichEdit v4.1 e utilizem o antigo controle RichEdit v3.
No .NET Core e no .NET 5.0 e versões posteriores, não há suporte para a opção Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl . Há suporte apenas para novas versões do RichTextBox controle.
Versão introduzida
3.0
Ação recomendada
Remova o interruptor. Não há suporte para a opção e nenhuma funcionalidade alternativa está disponível.
Categoria
Windows Forms
APIs afetadas
Não há suporte para a opção de compatibilidade DoNotSupportSelectAllShortcutInMultilineTextBox
A opção de compatibilidade Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox, que foi introduzida no .NET Framework 4.6.1, não é compatível com o Windows Forms no .NET Core nem no .NET 5.0 e posteriores.
Descrição da alteração
A partir do .NET Framework 4.6.1, a seleção da tecla de atalho Ctrl + A em um TextBox controle selecionou todo o texto. No .NET Framework 4.6 e nas versões anteriores, a seleção da tecla de atalho Ctrl + A não conseguiu selecionar todo o texto se o Textbox.ShortcutsEnabled e TextBox.Multiline as propriedades foram definidas como true. A Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox opção de compatibilidade foi introduzida no .NET Framework 4.6.1 para manter o comportamento original. Para obter mais informações, consulte TextBox.ProcessCmdKey.
No .NET Core e no .NET 5.0 e versões posteriores, não há suporte para a opção Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox .
Versão introduzida
3.0
Ação recomendada
Remova o interruptor. Não há suporte para a opção e nenhuma funcionalidade alternativa está disponível.
Categoria
Windows Forms
APIs afetadas
- Nenhum
Não há suporte para a opção de compatibilidade DontSupportReentrantFilterMessage
A opção de compatibilidade Switch.System.Windows.Forms.DontSupportReentrantFilterMessage, que foi introduzida no .NET Framework 4.6.1, não é compatível com o Windows Forms no .NET Core nem no .NET 5.0 e posteriores.
Descrição da alteração
Do .NET Framework 4.6.1 em diante, a opção de compatibilidade Switch.System.Windows.Forms.DontSupportReentrantFilterMessage trata possíveis exceções de IndexOutOfRangeException quando a mensagem Application.FilterMessage é chamada com uma implementação personalizada de IMessageFilter.PreFilterMessage. Para obter mais informações, consulte Mitigação: Implementações personalizadas de IMessageFilter.PreFilterMessage.
No .NET Core, bem como no .NET 5.0 e versões posteriores, a opção Switch.System.Windows.Forms.DontSupportReentrantFilterMessage não é suportada.
Versão introduzida
3.0
Ação recomendada
Remova o interruptor. Não há suporte para a opção e nenhuma funcionalidade alternativa está disponível.
Categoria
Windows Forms
APIs afetadas
Não há suporte para a opção de compatibilidade EnableVisualStyleValidation
Não há suporte para a opção de compatibilidade Switch.System.Windows.Forms.EnableVisualStyleValidation no Windows Forms no .NET Core nem no .NET 5.0 e posteriores.
Descrição da alteração
No .NET Framework, a opção Switch.System.Windows.Forms.EnableVisualStyleValidation de compatibilidade permitiu que um aplicativo recusasse a validação dos estilos visuais fornecidos em um formulário numérico.
No .NET Core, bem como no .NET 5.0 e versões posteriores, a opção Switch.System.Windows.Forms.EnableVisualStyleValidation não é suportada.
Versão introduzida
3.0
Ação recomendada
Remova o interruptor. Não há suporte para a opção e nenhuma funcionalidade alternativa está disponível.
Categoria
Windows Forms
APIs afetadas
- Nenhum
Não há suporte para a opção de compatibilidade UseLegacyContextMenuStripSourceControlValue
A opção de compatibilidade Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue, que foi introduzida no .NET Framework 4.7.2, não é compatível com o Windows Forms no .NET Core nem no .NET 5.0 e posteriores.
Descrição da alteração
A partir do .NET Framework 4.7.2, a opção Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue de compatibilidade permite que o desenvolvedor opte por não usar o novo comportamento da ContextMenuStrip.SourceControl propriedade, que agora retorna uma referência ao controle do código-fonte. O comportamento anterior da propriedade retornava null. Para obter mais informações, consulte <o elemento AppContextSwitchOverrides>.
No .NET Core, bem como no .NET 5.0 e versões posteriores, a opção Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue não é suportada.
Versão introduzida
3.0
Ação recomendada
Remova o interruptor. Não há suporte para a opção e nenhuma funcionalidade alternativa está disponível.
Categoria
Windows Forms
APIs afetadas
Alternador de compatibilidade UseLegacyImages não é suportado
A opção de compatibilidade Switch.System.Windows.Forms.UseLegacyImages, introduzida no .NET Framework 4.8, não é suportada nos Windows Forms em .NET Core ou .NET 5.0 e posterior.
Descrição da alteração
Do .NET Framework 4.8, a opção de compatibilidade Switch.System.Windows.Forms.UseLegacyImages resolvia possíveis problemas de dimensionamento de imagem em cenários ClickOnce em ambientes de DPI alta. Quando definida como true, a opção permite que o usuário restaure o dimensionamento de imagem herdado em exibições de DPI alta cuja escala é definida como maior que 100%. Para obter mais informações, consulte as Notas de Lançamento do .NET Framework 4.8 no GitHub.
No .NET Core, bem como no .NET 5.0 e versões posteriores, a opção Switch.System.Windows.Forms.UseLegacyImages não é suportada.
Versão introduzida
3.0
Ação recomendada
Remova o interruptor. Não há suporte para a opção e nenhuma funcionalidade alternativa está disponível.
Categoria
Windows Forms
APIs afetadas
- Nenhum
Os modelos About e SplashScreen são interrompidos
Os About.vb arquivos e os SplashScreen.vb arquivos gerados pelo Visual Studio contêm referências a tipos no My namespace que não estão disponíveis no .NET Core 3.0 e 3.1.
Versão introduzida
3.0
Descrição da alteração
O .NET Core 3.0 e o 3.1 não contêm suporte completo ao Visual Basic My . Os modelos de formulário About e SplashScreen nos aplicativos do Visual Studio para Visual Basic Windows Forms fazem referência a propriedades no My.Application.Info tipo que não estão disponíveis.
Ação recomendada
O suporte ao Visual Basic My foi aprimorado no .NET 5, atualize seu projeto para o .NET 5 ou posterior.
- ou -
Corrija os erros do compilador nos tipos About e SplashScreen em seu aplicativo. Use a System.Reflection.Assembly classe para obter as informações fornecidas pelo My.Application.Info tipo. Uma porta reta de ambos os formulários está disponível aqui.
Dica
Este é um código de exemplo e não otimizado. A lista de atributos deve ser armazenada em cache para reduzir o tempo de carregamento do formulário.
Sobre
Imports System.Reflection
Public NotInheritable Class About
Private Sub about_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Set the title of the form.
Dim applicationTitle As String = Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyTitleAttribute)()?.Title
If String.IsNullOrEmpty(applicationTitle) Then
applicationTitle = System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().GetName().Name)
End If
Me.Text = String.Format("About {0}", applicationTitle)
' Initialize all of the text displayed on the About Box.
' TODO: Customize the application's assembly information in the "Application" pane of the project
' properties dialog (under the "Project" menu).
Me.LabelProductName.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyProductAttribute)()?.Product, "")
Me.LabelVersion.Text = String.Format("Version {0}", Assembly.GetExecutingAssembly().GetName().Version)
Me.LabelCopyright.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyCopyrightAttribute)()?.Copyright, "")
Me.LabelCompanyName.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyCompanyAttribute)()?.Company, "")
Me.TextBoxDescription.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyDescriptionAttribute)()?.Description, "")
End Sub
Private Sub OKButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OKButton.Click
Me.Close()
End Sub
End Class
SplashScreen
Imports System.Reflection
Public NotInheritable Class SplashScreen
Private Sub SplashScreen1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'Set up the dialog text at runtime according to the application's assembly information.
'TODO: Customize the application's assembly information in the "Application" pane of the project
' properties dialog (under the "Project" menu).
'Application title
Dim appTitle As String = Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyTitleAttribute)()?.Title
If String.IsNullOrEmpty(appTitle) Then
appTitle = System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().GetName().Name)
End If
ApplicationTitle.Text = appTitle
Dim versionValue = Assembly.GetExecutingAssembly().GetName().Version
'Format the version information using the text set into the Version control at design time as the
' formatting string. This allows for effective localization if desired.
' Build and revision information could be included by using the following code and changing the
' Version control's designtime text to "Version {0}.{1:00}.{2}.{3}" or something similar. See
' String.Format() in Help for more information.
'
' Version.Text = System.String.Format(Version.Text, versionValue.Major, versionValue.Minor, versionValue.Build, versionValue.Revision)
Version.Text = System.String.Format(Version.Text, versionValue.Major, versionValue.Minor)
'Copyright info
Copyright.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyCopyrightAttribute)()?.Copyright, "")
End Sub
End Class
Categoria
Visual Basic Windows Forms
APIs afetadas
Nenhum
Tipos no namespace Microsoft.VisualBasic.ApplicationServices não estão disponíveis
Os tipos no Microsoft.VisualBasic.ApplicationServices namespace não estão disponíveis.
Versão introduzida
.NET Core 3.0
Descrição da alteração
Os tipos no Microsoft.VisualBasic.ApplicationServices namespace estavam disponíveis no .NET Framework. Eles não estão disponíveis no .NET Core 3.0 – 3.1.
Os tipos foram removidos para evitar dependências de assembly desnecessárias ou alterações interruptivas nas versões subsequentes.
Ação recomendada
Esse namespace foi adicionado ao .NET 5, atualize seu projeto para o .NET 5 ou posterior.
- ou -
Se o código depender do uso de Microsoft.VisualBasic.ApplicationServices tipos e seus membros, você poderá usar um tipo ou membro correspondente na biblioteca de classes do .NET. Por exemplo, alguns membros de System.Environment e de System.Security.Principal.WindowsIdentity fornecem funcionalidade equivalente às propriedades da classe Microsoft.VisualBasic.ApplicationServices.User.
Categoria
Visual Basic
APIs afetadas
Tipos no namespace Microsoft.VisualBasic.Devices não disponíveis
Os tipos no Microsoft.VisualBasic.Devices namespace não estão disponíveis.
Versão introduzida
.NET Core 3.0
Descrição da alteração
Os tipos no Microsoft.VisualBasic.Devices namespace estavam disponíveis no .NET Framework. Eles não estão disponíveis no .NET Core 3.0 – 3.1.
Os tipos foram removidos para evitar dependências de assembly desnecessárias ou alterações interruptivas nas versões subsequentes.
Ação recomendada
Esse namespace foi adicionado ao .NET 5, atualize seu projeto para o .NET 5 ou posterior.
- ou -
Se o código depender do uso de Microsoft.VisualBasic.Devices tipos e seus membros, você poderá usar um tipo ou membro correspondente na biblioteca de classes do .NET. Por exemplo, a funcionalidade equivalente à classe Microsoft.VisualBasic.Devices.Clock é fornecida pelos tipos System.DateTime e System.Environment, e a funcionalidade equivalente à classe Microsoft.VisualBasic.Devices.Ports é fornecida por tipos no namespace System.IO.Ports.
Categoria
Visual Basic
APIs afetadas
Os tipos no namespace Microsoft.VisualBasic.MyServices não estão disponíveis
Os tipos no Microsoft.VisualBasic.MyServices namespace não estão disponíveis.
Versão introduzida
.NET Core 3.0
Descrição da alteração
Os tipos no Microsoft.VisualBasic.MyServices namespace estavam disponíveis no .NET Framework. Eles não estão disponíveis no .NET Core 3.0 – 3.1.
Os tipos foram removidos para evitar dependências de assembly desnecessárias ou alterações interruptivas nas versões subsequentes.
Ação recomendada
Esse namespace foi adicionado ao .NET 5, atualize seu projeto para o .NET 5 ou posterior.
- ou -
Se o código depender do uso dos tipos Microsoft.VisualBasic.MyServices e seus membros , haverá tipos e membros correspondentes na biblioteca de classes do .NET. A seguir está o mapeamento dos tipos Microsoft.VisualBasic.MyServices para seus tipos de biblioteca de classes .NET equivalentes.
| Tipo Microsoft.VisualBasic.MyServices | Tipo de biblioteca de classes do .NET |
|---|---|
| ClipboardProxy | System.Windows.Clipboard para aplicativos WPF, System.Windows.Forms.Clipboard para aplicativos do Windows Forms |
| FileSystemProxy | Tipos no namespace System.IO |
| RegistryProxy | Tipos relacionados ao registro no namespace Microsoft.Win32 |
| SpecialDirectoriesProxy | Environment.GetFolderPath |
Categoria
Visual Basic