Udostępnij za pośrednictwem


Istotne zmiany dotyczące migracji z programu .NET Framework do platformy .NET Core

Jeśli migrujesz aplikację z programu .NET Framework do platformy .NET Core w wersji 1.0 do 3.1, zmiany powodujące niezgodność wymienione w tym artykule mogą mieć wpływ na Ciebie. Zmiany powodujące niezgodność są grupowane według kategorii i w ramach tych kategorii według wersji platformy .NET Core, w której zostały wprowadzone.

Uwaga

Ten artykuł nie jest pełną listą zmian powodujących niezgodność między programem .NET Framework i platformą .NET Core. Najważniejsze zmiany powodujące niezgodność są tu dodawane, ponieważ zdajemy sobie sprawę z nich.

Podstawowe biblioteki platformy .NET

.NET 8

Interfejs API IDispatchImplAttribute został usunięty

.NET Core 2.1

Zmień wartość domyślną polecenia UseShellExecute

ProcessStartInfo.UseShellExecute ma wartość false domyślną na platformie .NET Core. W programie .NET Framework jego wartością domyślną jest true.

Opis zmiany

Process.Start umożliwia uruchamianie aplikacji bezpośrednio, na przykład za pomocą kodu, takiego jak Process.Start("mspaint.exe") uruchomienie programu Paint. Umożliwia również pośrednio uruchomienie skojarzonej aplikacji, jeśli ProcessStartInfo.UseShellExecute jest ustawiona na truewartość . W programie .NET Framework wartość domyślna to ProcessStartInfo.UseShellExecute true, co oznacza, że kod, taki jak Process.Start("mytextfile.txt") Notatnik, jeśli skojarzysz .txt pliki z tym edytorem. Aby zapobiec pośrednio uruchamianiu aplikacji na platformie .NET Framework, należy jawnie ustawić wartość ProcessStartInfo.UseShellExecute false. Na platformie .NET Core domyślną wartością parametru ProcessStartInfo.UseShellExecute jest false. Oznacza to, że domyślnie skojarzone aplikacje nie są uruchamiane podczas wywoływania metody Process.Start.

Następujące właściwości w systemie System.Diagnostics.ProcessStartInfo działają tylko wtedy, gdy ProcessStartInfo.UseShellExecute to true:

Ta zmiana została wprowadzona na platformie .NET Core ze względu na wydajność. Process.Start Zazwyczaj służy do bezpośredniego uruchamiania aplikacji. Bezpośrednie uruchamianie aplikacji nie wymaga zaangażowania powłoki systemu Windows i ponoszenia powiązanych kosztów wydajności. Aby przyspieszyć ten domyślny przypadek, platforma .NET Core zmienia wartość domyślną na ProcessStartInfo.UseShellExecute false. Jeśli jest to potrzebne, możesz wyrazić zgodę na wolniejsze ścieżki.

Wprowadzona wersja

2.1

Uwaga

We wcześniejszych wersjach platformy .NET Core UseShellExecute nie zaimplementowano dla systemu Windows.

Jeśli aplikacja opiera się na starym zachowaniu, wywołaj metodę Process.Start(ProcessStartInfo) z ustawioną wartością UseShellExecute true ProcessStartInfo na obiekt .

Kategoria

Podstawowe biblioteki platformy .NET

Dotyczy interfejsów API


.NET Core 1.0

Brak autoryzacjiAccessWyrażenie zgłaszane przez fileSystemInfo.Attributes

W programie .NET Core obiekt jest zgłaszany, gdy obiekt wywołujący próbuje ustawić wartość atrybutu pliku, UnauthorizedAccessException ale nie ma uprawnień do zapisu.

Opis zmiany

W programie .NET Framework obiekt jest zgłaszany, ArgumentException gdy obiekt wywołujący próbuje ustawić wartość atrybutu pliku, FileSystemInfo.Attributes ale nie ma uprawnień do zapisu. W programie .NET Core zamiast tego jest zgłaszany element UnauthorizedAccessException . (W programie .NET Core obiekt jest nadal zgłaszany, ArgumentException jeśli obiekt wywołujący próbuje ustawić nieprawidłowy atrybut pliku).

Wprowadzona wersja

1.0

Zmodyfikuj dowolne catch instrukcje, aby przechwycić UnauthorizedAccessException zamiast lub oprócz ArgumentExceptionelementu , w razie potrzeby.

Kategoria

Podstawowe biblioteki platformy .NET

Dotyczy interfejsów API


Obsługa uszkodzonych wyjątków stanu nie jest obsługiwana

Obsługa uszkodzonych wyjątków stanu procesu na platformie .NET Core nie jest obsługiwana.

Opis zmiany

Wcześniej wyjątki uszkodzonego stanu procesu mogą być przechwytywane i obsługiwane przez programy obsługi wyjątków kodu zarządzanego, na przykład przy użyciu instrukcji try-catch w języku C#.

Począwszy od programu .NET Core 1.0, wyjątki stanu uszkodzonego procesu nie mogą być obsługiwane przez kod zarządzany. Środowisko uruchomieniowe języka wspólnego nie dostarcza uszkodzonych wyjątków stanu procesu do kodu zarządzanego.

Wprowadzona wersja

1.0

Unikaj konieczności obsługi uszkodzonych wyjątków stanu procesu, zwracając się do sytuacji, które zamiast tego prowadzą do nich. Jeśli jest to absolutnie konieczne do obsługi wyjątków uszkodzonego stanu procesu, napisz procedurę obsługi wyjątków w kodzie C lub C++.

Kategoria

Podstawowe biblioteki platformy .NET

Dotyczy interfejsów API


Właściwości UriBuilder nie poprzedzają już znaków wiodących

UriBuilder.Fragmentnie poprzedza już znaku wiodącego # ? i UriBuilder.Query nie poprzedza już wiodącego znaku, gdy jest już obecny.

Opis zmiany

W programie .NET Framework UriBuilder.Fragment właściwości i UriBuilder.Query zawsze poprzedzają # odpowiednio znak lub ? do przechowywanej wartości. To zachowanie może spowodować powstanie wielu # znaków lub ? znaków w przechowywanej wartości, jeśli ciąg zawiera już jeden z tych znaków wiodących. Na przykład wartość może stać się wartością UriBuilder.Fragment ##main.

Począwszy od platformy .NET Core 1.0, te właściwości nie poprzedzają # już wartości przechowywanej ani ? znaków, jeśli są one już obecne na początku ciągu.

Wprowadzona wersja

1.0

Nie trzeba już jawnie usuwać żadnego z tych znaków wiodących podczas ustawiania wartości właściwości. Jest to szczególnie przydatne w przypadku dołączania wartości, ponieważ nie trzeba już usuwać elementów wiodących # lub ? za każdym razem, gdy dołączasz.

Na przykład poniższy fragment kodu przedstawia różnicę zachowania między programem .NET Framework i platformą .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);
  • W programie .NET Framework dane wyjściowe to ????one=1&two=2&three=3&four=4.
  • W programie .NET Core dane wyjściowe to ?one=1&two=2&three=3&four=4.

Kategoria

Podstawowe biblioteki platformy .NET

Dotyczy interfejsów API


Process.StartInfo zgłasza wyjątek InvalidOperationException dla procesów, których nie uruchomiono

Odczytywanie Process.StartInfo właściwości dla procesów, których kod nie rozpoczął, zgłasza błąd InvalidOperationException.

Opis zmiany

W programie .NET Framework uzyskiwanie Process.StartInfo dostępu do właściwości procesów, których kod nie rozpoczął, zwraca fikcyjny ProcessStartInfo obiekt. Fikcyjny obiekt zawiera wartości domyślne dla wszystkich jego właściwości z wyjątkiem EnvironmentVariables.

Począwszy od platformy .NET Core 1.0, jeśli odczytujesz Process.StartInfo właściwość dla procesu, który nie został uruchomiony (czyli przez wywołanie metody Process.Start), InvalidOperationException jest zgłaszany.

Wprowadzona wersja

1.0

Nie należy uzyskiwać Process.StartInfo dostępu do właściwości dla procesów, których kod nie został uruchomiony. Na przykład nie odczytuj tej właściwości dla procesów zwracanych przez Process.GetProcesses.

Kategoria

Podstawowe biblioteki platformy .NET

Dotyczy interfejsów API


Kryptografia

.NET Core 2.1

Parametr logiczny signedCms.ComputeSignature jest przestrzegany

W programie .NET Core jest uwzględniany parametr SignedCms.ComputeSignature(CmsSigner, Boolean) logiczny silent metody. Monit o podanie numeru PIN nie jest wyświetlany, jeśli ten parametr jest ustawiony na truewartość .

Opis zmiany

W programie .NET Framework silent parametr SignedCms.ComputeSignature(CmsSigner, Boolean) metody jest ignorowany, a monit o podanie numeru PIN jest zawsze wyświetlany, jeśli jest to wymagane przez dostawcę. W programie .NET Core silent parametr jest przestrzegany, a jeśli ustawiono truewartość , monit o podanie numeru PIN nigdy nie jest wyświetlany, nawet jeśli jest wymagany przez dostawcę.

Obsługa komunikatów CMS/PKCS #7 została wprowadzona do platformy .NET Core w wersji 2.1.

Wprowadzona wersja

2.1

Aby upewnić się, że w razie potrzeby zostanie wyświetlony monit o podanie numeru PIN, aplikacje klasyczne powinny wywoływać SignedCms.ComputeSignature(CmsSigner, Boolean) i ustawiać parametr logiczny na falsewartość . Wynikowe zachowanie jest takie samo jak w programie .NET Framework niezależnie od tego, czy kontekst dyskretny jest tam wyłączony.

Kategoria

Kryptografia

Dotyczy interfejsów API


MSBuild

.NET Core 3.0

Zmiana nazwy pliku manifestu zasobu

Począwszy od platformy .NET Core 3.0, w domyślnym przypadku program MSBuild generuje inną nazwę pliku manifestu dla plików zasobów.

Wprowadzona wersja

3.0

Opis zmiany

Przed programem .NET Core 3.0, jeśli dla elementu w pliku projektu nie LogicalNameokreślono EmbeddedResource żadnych metadanych lub DependentUpon , ManifestResourceNameprogram MSBuild wygenerował nazwę pliku manifestu we wzorcu <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources. Jeśli RootNamespace plik projektu nie jest zdefiniowany, wartość domyślna to nazwa projektu. Na przykład wygenerowana nazwa manifestu dla pliku zasobu o nazwie Form1.resx w katalogu głównym projektu to MyProject.Form1.resources.

Począwszy od platformy .NET Core 3.0, jeśli plik zasobu jest kolokowany z plikiem źródłowym o tej samej nazwie (na przykład Form1.resx i Form1.cs), program MSBuild używa informacji o typie z pliku źródłowego w celu wygenerowania nazwy pliku manifestu we wzorcu <Namespace>.<ClassName>.resources. Przestrzeń nazw i nazwa klasy są wyodrębniane z pierwszego typu w kolokowanym pliku źródłowym. Na przykład wygenerowana nazwa manifestu dla pliku zasobu o nazwie Form1.resx , który jest współlokowany z plikiem źródłowym o nazwie Form1.cs to MyNamespace.Form1.resources. Należy pamiętać, że pierwsza część nazwy pliku różni się od wcześniejszych wersji platformy .NET Core (MyNamespace zamiast MyProject).

Uwaga

Jeśli masz LogicalNamemetadane , ManifestResourceNamelub DependentUpon określone w elemencie EmbeddedResource w pliku projektu, ta zmiana nie ma wpływu na ten plik zasobu.

Ta zmiana powodująca niezgodność została wprowadzona wraz z dodatkami EmbeddedResourceUseDependentUponConvention właściwości do projektów platformy .NET Core. Domyślnie pliki zasobów nie są jawnie wyświetlane w pliku projektu platformy .NET Core, dlatego nie DependentUpon mają żadnych metadanych, aby określić, jak nazwać wygenerowany plik resources . Gdy EmbeddedResourceUseDependentUponConvention jest ustawiona wartość true, która jest wartością domyślną, program MSBuild wyszukuje kolokowany plik źródłowy i wyodrębnia przestrzeń nazw i nazwę klasy z tego pliku. Jeśli ustawiono EmbeddedResourceUseDependentUponConvention falsewartość , program MSBuild generuje nazwę manifestu zgodnie z poprzednim zachowaniem, które łączy RootNamespace i względną ścieżkę pliku.

W większości przypadków nie jest wymagana żadna akcja ze strony dewelopera, a aplikacja powinna nadal działać. Jeśli jednak ta zmiana ulegnie awarii aplikacji, możesz wykonać następujące czynności:

  • Zmień kod, aby oczekiwał nowej nazwy manifestu.

  • Zrezygnuj z nowej konwencji nazewnictwa, ustawiając wartość EmbeddedResourceUseDependentUponConvention na false w pliku projektu.

    <PropertyGroup>
      <EmbeddedResourceUseDependentUponConvention>false</EmbeddedResourceUseDependentUponConvention>
    </PropertyGroup>
    

Kategoria

MSBuild

Dotyczy interfejsów API

Nie dotyczy


Sieć

.NET Core 2.0

Program WebClient.CancelAsync nie zawsze anuluje natychmiast

Począwszy od platformy .NET Core 2.0, wywołanie WebClient.CancelAsync() nie anuluje żądania natychmiast, jeśli odpowiedź zaczęła pobierać.

Opis zmiany

Wcześniej wywołanie WebClient.CancelAsync() anulowało żądanie natychmiast. Począwszy od platformy .NET Core 2.0, wywołanie WebClient.CancelAsync() metody anuluje żądanie natychmiast tylko wtedy, gdy odpowiedź nie została uruchomiona do pobrania. Jeśli odpowiedź została uruchomiona do pobrania, żądanie zostanie anulowane dopiero po przeczytaniu pełnej odpowiedzi.

Ta zmiana została zaimplementowana, ponieważ WebClient interfejs API jest przestarzały na rzecz .HttpClient

Wprowadzona wersja

2.0

System.Net.Http.HttpClient Użyj klasy zamiast System.Net.WebClient, która jest przestarzała.

Kategoria

Sieć

Dotyczy interfejsów API


Windows Forms

Obsługa formularzy systemu Windows została dodana do platformy .NET Core w wersji 3.0. Jeśli migrujesz aplikację Windows Forms z programu .NET Framework do platformy .NET Core, zmiany powodujące niezgodność wymienione tutaj mogą mieć wpływ na twoją aplikację.

.NET Core 3.1

Usunięte kontrolki

Począwszy od platformy .NET Core 3.1, niektóre kontrolki windows Forms nie są już dostępne.

Opis zmiany

Począwszy od platformy .NET Core 3.1, różne kontrolki windows Forms nie są już dostępne. Kontrolki zastępcze, które mają lepszy projekt i obsługę, zostały wprowadzone w programie .NET Framework 2.0. Przestarzałe kontrolki zostały wcześniej usunięte z przybornika projektanta, ale nadal były dostępne do użycia.

Następujące typy nie są już dostępne:

Wprowadzona wersja

3.1

Każda usunięta kontrolka ma zalecaną kontrolkę zastępczą. Zapoznaj się z następującą tabelą:

Usunięto kontrolkę (API) Zalecane zastąpienie Skojarzone interfejsy API, które są usuwane
ContextMenu ContextMenuStrip
DataGrid Datagridview DataGridCell, DataGridRow, DataGridTableCollection, DataGridColumnCollection, DataGridTableStyle, DataGridColumnStyle, DataGridLineStyle, DataGridParentRowsLabel, DataGridParentRowsLabelStyle, DataGridBoolColumn, DataGridTextBox, GridColumnStylesCollection, GridTableStylesCollection, HitTestType
Mainmenu MenuStrip
Menu ToolStripDropDown, ToolStripDropDownMenu Menuitemcollection
MenuItem Toolstripmenuitem
ToolBar ToolStrip ToolBarAppearance
Toolbarbutton Toolstripbutton ToolBarButtonClickEventArgs, ToolBarButtonClickEventHandler, ToolBarButtonStyle, ToolBarTextAlign

Kategoria

Windows Forms

Dotyczy interfejsów API


Zdarzenie formatowania komórek nie jest zgłaszane, jeśli jest wyświetlana etykietka narzędzia

Element DataGridView zawiera teraz tekst komórki i etykietki narzędzi błędów po umieszczeniu wskaźnika myszy i wybraniu za pomocą klawiatury. Jeśli zostanie wyświetlona etykietka narzędzia, DataGridView.CellFormatting zdarzenie nie zostanie zgłoszone.

Opis zmiany

Przed platformą .NET Core 3.1 właściwość, DataGridView która miała ShowCellToolTips ustawioną właściwość, wyświetlała true etykietkę narzędzia dla tekstu komórki i błędy, gdy komórka została zatrzymana myszą. Etykietki narzędzi nie były wyświetlane, gdy komórka została wybrana za pomocą klawiatury (na przykład za pomocą klawisza Tab, klawiszy skrótów lub nawigacji strzałką). Jeśli użytkownik edytował komórkę, a następnie, gdy DataGridView był nadal w trybie edycji, zatrzymał wskaźnik myszy na komórce, która nie ma ToolTipText zestawu właściwości, CellFormatting zdarzenie zostało zgłoszone w celu sformatowania tekstu komórki do wyświetlenia w komórce.

Aby spełnić standardy ułatwień dostępu, począwszy od platformy .NET Core 3.1, właściwość, która ma ShowCellToolTips ustawioną właściwość , wyświetla true etykietki narzędzi dla tekstu komórki i błędy nie tylko wtedy, DataGridView gdy komórka zostanie zatrzymana, ale także po jej wybraniu za pomocą klawiatury. W wyniku tej zmiany zdarzenie nie jest wywoływane, CellFormatting gdy komórki, które nie mają ToolTipText zestawu właściwości, są najechane, gdy DataGridView obiekt jest w trybie edycji. Zdarzenie nie jest wywoływane, ponieważ zawartość zatrzymanej komórki jest wyświetlana jako etykietka narzędzia, a nie wyświetlana w komórce.

Wprowadzona wersja

3.1

Refaktoryzuj dowolny kod, który zależy od CellFormatting zdarzenia, gdy DataGridView element jest w trybie edycji.

Kategoria

Windows Forms

Dotyczy interfejsów API

Brak


.NET Core 3.0

Domyślna czcionka kontrolki została zmieniona na Segoe UI 9 pkt

Opis zmiany

W programie .NET Framework właściwość została ustawiona Control.DefaultFont na Microsoft Sans Serif 8.25 pt. Na poniższej ilustracji przedstawiono okno, które używa czcionki domyślnej.

Domyślna czcionka kontrolki w programie .NET Framework

Począwszy od platformy .NET Core 3.0, domyślna czcionka jest ustawiona na Segoe UI 9 pt (ta sama czcionka co SystemFonts.MessageBoxFont). W wyniku tej zmiany formularze i kontrolki mają rozmiar około 27% większy, aby uwzględnić większy rozmiar nowej czcionki domyślnej. Na przykład:

Domyślna czcionka kontrolki na platformie .NET Core

Ta zmiana została wprowadzona w celu dostosowania do wytycznych dotyczących środowiska użytkownika systemu Windows.

Wprowadzona wersja

3.0

Ze względu na zmianę rozmiaru formularzy i kontrolek upewnij się, że aplikacja jest poprawnie renderowana.

Aby zachować oryginalną czcionkę dla pojedynczego formularza, ustaw domyślną czcionkę na Microsoft Sans Serif 8.25 pt. Na przykład:

public MyForm()
{
    InitializeComponent();
    Font = new Font(new FontFamily("Microsoft Sans Serif"), 8.25f);
}

Możesz też zmienić czcionkę domyślną dla całej aplikacji na jeden z następujących sposobów:

  • Ustawiając ApplicationDefaultFont właściwość MSBuild na "Microsoft Sans Serif, 8.25pt". Jest to preferowana technika, ponieważ umożliwia programowi Visual Studio używanie nowych ustawień w projektancie.

    <PropertyGroup>
      <ApplicationDefaultFont>Microsoft Sans Serif, 8.25pt</ApplicationDefaultFont>
    </PropertyGroup>
    
  • Wywołując polecenie 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());
        }
    }
    

Kategoria

  • Windows Forms

Dotyczy interfejsów API

Brak.


Modernizacja folderuBrowserDialog

Kontrolka FolderBrowserDialog zmieniła się w aplikacjach Windows Forms dla platformy .NET Core.

Opis zmiany

W programie .NET Framework formularze systemu Windows używają następującego okna dialogowego dla kontrolki FolderBrowserDialog :

FolderBrowserDialogControl w programie .NET Framework

W programie .NET Core 3.0 windows Forms używa nowszej kontrolki opartej na modelu COM wprowadzonej w systemie Windows Vista:

FolderBrowserDialogControl na platformie .NET Core

Wprowadzona wersja

3.0

Okno dialogowe zostanie automatycznie uaktualnione.

Jeśli chcesz zachować oryginalne okno dialogowe, ustaw FolderBrowserDialog.AutoUpgradeEnabled właściwość na wartość false przed wyświetleniem okna dialogowego, jak pokazano na poniższym fragmentze kodu:

var dialog = new FolderBrowserDialog();
dialog.AutoUpgradeEnabled = false;
dialog.ShowDialog();

Kategoria

Windows Forms

Dotyczy interfejsów API


SerializableAttribute usunięto z niektórych typów formularzy systemu Windows

Element SerializableAttribute został usunięty z niektórych klas windows Forms, które nie mają znanych scenariuszy serializacji binarnej.

Opis zmiany

Następujące typy są ozdobione elementem SerializableAttribute w programie .NET Framework, ale atrybut został usunięty na platformie .NET Core:

Historycznie ten mechanizm serializacji miał poważne obawy związane z konserwacją i bezpieczeństwem. Obsługa SerializableAttribute typów oznacza, że te typy muszą być testowane pod kątem zmian serializacji od wersji do wersji i potencjalnie zmian serializacji struktury do struktury. Utrudnia to rozwój tych typów i może być kosztowny do utrzymania. Te typy nie mają znanych scenariuszy serializacji binarnej, co minimalizuje wpływ usunięcia atrybutu.

Aby uzyskać więcej informacji, zobacz Serializacja binarna.

Wprowadzona wersja

3.0

Zaktualizuj dowolny kod, który może zależeć od tych typów oznaczonych jako możliwe do serializacji.

Kategoria

Windows Forms

Dotyczy interfejsów API

  • Brak

Przełącznik zgodności AllowUpdateChildControlIndexForTabControls nie jest obsługiwany

Przełącznik Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls zgodności jest obsługiwany w formularzach systemu Windows w programie .NET Framework 4.6 lub nowszych wersjach, ale nie jest obsługiwany na platformie .NET Core lub .NET 5.0 i nowszych wersjach.

Opis zmiany

W programie .NET Framework 4.6 lub nowszym wybierz kartę zmień kolejność kolekcji kontrolek. Przełącznik Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls zgodności umożliwia aplikacji pomijanie tej zmiany kolejności, gdy to zachowanie jest niepożądane.

W programach .NET Core i .NET 5.0 lub nowszych Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls przełącznik nie jest obsługiwany.

Wprowadzona wersja

3.0

Usuń przełącznik. Przełącznik nie jest obsługiwany i nie jest dostępna żadna alternatywna funkcja.

Kategoria

Windows Forms

Dotyczy interfejsów API

  • Brak

DomainUpDown.UseLegacyScrolling— przełącznik zgodności nie jest obsługiwany

Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling Przełącznik zgodności, który został wprowadzony w programie .NET Framework 4.7.1, nie jest obsługiwany w programie Windows Forms na platformie .NET Core lub .NET 5.0 lub nowszym.

Opis zmiany

Począwszy od programu .NET Framework 4.7.1, Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling przełącznik zgodności umożliwia deweloperom rezygnację z niezależnych DomainUpDown.DownButton() i DomainUpDown.UpButton() akcji. Przełącznik przywrócił starsze zachowanie, w którym DomainUpDown.UpButton() element jest ignorowany, jeśli tekst kontekstowy jest obecny, a deweloper musi używać DomainUpDown.DownButton() akcji w kontrolce przed akcją DomainUpDown.UpButton() . Aby uzyskać więcej informacji, zobacz Element AppContextSwitchOverrides>.<

W programach .NET Core i .NET 5.0 lub nowszych Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling przełącznik nie jest obsługiwany.

Wprowadzona wersja

3.0

Usuń przełącznik. Przełącznik nie jest obsługiwany i nie jest dostępna żadna alternatywna funkcja.

Kategoria

Windows Forms

Dotyczy interfejsów API


Przełącznik zgodności DoNotLoadLatestRichEditControl nie jest obsługiwany

Switch.System.Windows.Forms.UseLegacyImages Przełącznik zgodności, który został wprowadzony w programie .NET Framework 4.7.1, nie jest obsługiwany w programie Windows Forms na platformie .NET Core lub .NET 5.0 lub nowszym.

Opis zmiany

W programie .NET Framework 4.6.2 i poprzednich wersjach RichTextBox kontrolka tworzy wystąpienie kontrolki Win32 RichEdit w wersji 3.0 oraz dla aplikacji przeznaczonych dla programu .NET Framework 4.7.1 RichTextBox kontrolka tworzy wystąpienie biblioteki RichEdit w wersji 4.1 (w msftedit.dll). Przełącznik Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl zgodności został wprowadzony w celu umożliwienia aplikacjom przeznaczonym dla programu .NET Framework 4.7.1 i nowszych wersji, aby zrezygnować z nowej kontrolki RichEdit w wersji 4.1 i użyć starej kontrolki RichEdit w wersji 3.

W wersjach .NET Core i .NET 5.0 i nowszych Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl przełącznik nie jest obsługiwany. Obsługiwane są tylko nowe wersje kontrolki RichTextBox .

Wprowadzona wersja

3.0

Usuń przełącznik. Przełącznik nie jest obsługiwany i nie jest dostępna żadna alternatywna funkcja.

Kategoria

Windows Forms

Dotyczy interfejsów API


Przełącznik zgodności DoNotSupportSelectAllShortcutInMultilineTextBox nie jest obsługiwany

Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox Przełącznik zgodności, który został wprowadzony w programie .NET Framework 4.6.1, nie jest obsługiwany w systemach Windows Forms na platformie .NET Core i .NET 5.0 i nowszych wersjach.

Opis zmiany

Począwszy od programu .NET Framework 4.6.1, wybierając klawisz skrótu Ctrl + A w kontrolce zaznaczony TextBox cały tekst. W programie .NET Framework 4.6 i poprzednich wersjach wybranie klawisza skrótu Ctrl + A nie powiodło się, aby zaznaczyć cały tekst, jeśli pole tekstowe.ShortcutsEnabled i TextBox.Multiline właściwości zostały ustawione na truewartość . Przełącznik Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox zgodności został wprowadzony w programie .NET Framework 4.6.1, aby zachować oryginalne zachowanie. Aby uzyskać więcej informacji, zobacz:TextBox.ProcessCmdKey.

W wersjach .NET Core i .NET 5.0 i nowszych Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox przełącznik nie jest obsługiwany.

Wprowadzona wersja

3.0

Usuń przełącznik. Przełącznik nie jest obsługiwany i nie jest dostępna żadna alternatywna funkcja.

Kategoria

Windows Forms

Dotyczy interfejsów API

  • Brak

Przełącznik zgodności DontSupportReentrantFilterMessage nie jest obsługiwany

Switch.System.Windows.Forms.DontSupportReentrantFilterMessage Przełącznik zgodności, który został wprowadzony w programie .NET Framework 4.6.1, nie jest obsługiwany w systemach Windows Forms na platformie .NET Core i .NET 5.0 i nowszych wersjach.

Opis zmiany

Począwszy od programu .NET Framework 4.6.1, Switch.System.Windows.Forms.DontSupportReentrantFilterMessage przełącznik zgodności rozwiązuje możliwe IndexOutOfRangeException wyjątki, gdy Application.FilterMessage komunikat jest wywoływany z implementacją niestandardową IMessageFilter.PreFilterMessage . Aby uzyskać więcej informacji, zobacz Środki zaradcze: Niestandardowe implementacje IMessageFilter.PreFilterMessage.

W programach .NET Core i .NET 5.0 lub nowszych Switch.System.Windows.Forms.DontSupportReentrantFilterMessage przełącznik nie jest obsługiwany.

Wprowadzona wersja

3.0

Usuń przełącznik. Przełącznik nie jest obsługiwany i nie jest dostępna żadna alternatywna funkcja.

Kategoria

Windows Forms

Dotyczy interfejsów API


Przełącznik zgodności EnableVisualStyleValidation nie jest obsługiwany

Switch.System.Windows.Forms.EnableVisualStyleValidation Przełącznik zgodności nie jest obsługiwany w aplikacjach Windows Forms na platformie .NET Core lub .NET 5.0 i nowszych wersjach.

Opis zmiany

W programie .NET Framework Switch.System.Windows.Forms.EnableVisualStyleValidation przełącznik zgodności zezwolił aplikacji na rezygnację ze sprawdzania poprawności stylów wizualizacji podanych w postaci liczbowej.

W programach .NET Core i .NET 5.0 lub nowszych Switch.System.Windows.Forms.EnableVisualStyleValidation przełącznik nie jest obsługiwany.

Wprowadzona wersja

3.0

Usuń przełącznik. Przełącznik nie jest obsługiwany i nie jest dostępna żadna alternatywna funkcja.

Kategoria

Windows Forms

Dotyczy interfejsów API

  • Brak

Przełącznik zgodności UseLegacyContextMenuStripSourceControlValue nie jest obsługiwany

Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue Przełącznik zgodności wprowadzony w programie .NET Framework 4.7.2 nie jest obsługiwany w programie Windows Forms na platformie .NET Core lub .NET 5.0 i nowszych wersjach.

Opis zmiany

Począwszy od programu .NET Framework 4.7.2, Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue przełącznik zgodności umożliwia deweloperowi rezygnację z nowego zachowania ContextMenuStrip.SourceControl właściwości, która teraz zwraca odwołanie do kontroli źródła. Poprzednie zachowanie właściwości miało zwrócić wartość null. Aby uzyskać więcej informacji, zobacz Element AppContextSwitchOverrides>.<

W programach .NET Core i .NET 5.0 lub nowszych Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue przełącznik nie jest obsługiwany.

Wprowadzona wersja

3.0

Usuń przełącznik. Przełącznik nie jest obsługiwany i nie jest dostępna żadna alternatywna funkcja.

Kategoria

Windows Forms

Dotyczy interfejsów API


Przełącznik zgodności UseLegacyImages nie jest obsługiwany

Switch.System.Windows.Forms.UseLegacyImages Przełącznik zgodności wprowadzony w programie .NET Framework 4.8 nie jest obsługiwany w programie Windows Forms na platformie .NET Core lub .NET 5.0 lub nowszym.

Opis zmiany

Począwszy od programu .NET Framework 4.8, Switch.System.Windows.Forms.UseLegacyImages przełącznik zgodności rozwiązał możliwe problemy ze skalowaniem obrazów w scenariuszach technologii ClickOnce w środowiskach o wysokiej rozdzielczości DPI. Po ustawieniu truewartości przełącznik umożliwia użytkownikowi przywrócenie starszego skalowania obrazów na ekranach o wysokiej rozdzielczości DPI, których skala jest ustawiona na większą niż 100%. Aby uzyskać więcej informacji, zobacz Informacje o wersji programu .NET Framework 4.8 w witrynie GitHub.

W programach .NET Core i .NET 5.0 lub nowszych Switch.System.Windows.Forms.UseLegacyImages przełącznik nie jest obsługiwany.

Wprowadzona wersja

3.0

Usuń przełącznik. Przełącznik nie jest obsługiwany i nie jest dostępna żadna alternatywna funkcja.

Kategoria

Windows Forms

Dotyczy interfejsów API

  • Brak

Szablony About i SplashScreen są uszkodzone

Pliki About.vb i SplashScreen.vb generowane przez program Visual Studio zawierają odwołania do typów w My przestrzeni nazw, które nie są dostępne .NET Core 3.0 i 3.1.

Wprowadzona wersja

3.0

Opis zmiany

Programy .NET Core 3.0 i 3.1 nie zawierają pełnej obsługi języka Visual Basic My . Szablony formularzy About and SplashScreen w programie Visual Studio dla aplikacji Visual Basic Windows Forms odwołują się do właściwości typówMy.Application.Info, które nie są dostępne.

Ulepszono obsługę języka Visual Basic My na platformie .NET 5, uaktualnij projekt do platformy .NET 5 lub nowszej.

— lub —

Napraw błędy kompilatora w typach About i SplashScreen w aplikacji. System.Reflection.Assembly Użyj klasy , aby uzyskać informacje podane przez My.Application.Info typ. W tym miejscu dostępny jest prosty port obu formularzy.

Napiwek

Jest to przykładowy kod i niezoptymalizowany. Lista atrybutów powinna być buforowana, aby skrócić czas ładowania formularza.

Informacje

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

Kategoria

Visual Basic Windows Forms

Dotyczy interfejsów API

Brak


Typy w przestrzeni nazw Microsoft.VisualBasic.ApplicationServices są niedostępne

Typy w Microsoft.VisualBasic.ApplicationServices przestrzeni nazw nie są dostępne.

Wprowadzona wersja

.NET Core 3.0

Opis zmiany

Typy w Microsoft.VisualBasic.ApplicationServices przestrzeni nazw były dostępne w programie .NET Framework. Nie są one dostępne na platformie .NET Core 3.0 — 3.1.

Typy zostały usunięte, aby uniknąć niepotrzebnych zależności zestawów lub zmian powodujących niezgodność w kolejnych wersjach.

Ta przestrzeń nazw została dodana na platformie .NET 5, uaktualnij projekt do platformy .NET 5 lub nowszej.

— lub —

Jeśli kod zależy od użycia Microsoft.VisualBasic.ApplicationServices typów i ich składowych, możesz użyć odpowiedniego typu lub elementu członkowskiego w bibliotece klas platformy .NET. Na przykład niektóre System.Environment elementy i System.Security.Principal.WindowsIdentity składowe zapewniają równoważne funkcje właściwościom Microsoft.VisualBasic.ApplicationServices.User klasy.

Kategoria

Visual Basic

Dotyczy interfejsów API


Typy w przestrzeni nazw Microsoft.VisualBasic.Devices są niedostępne

Typy w Microsoft.VisualBasic.Devices przestrzeni nazw nie są dostępne.

Wprowadzona wersja

.NET Core 3.0

Opis zmiany

Typy w Microsoft.VisualBasic.Devices przestrzeni nazw były dostępne w programie .NET Framework. Nie są one dostępne na platformie .NET Core 3.0 — 3.1.

Typy zostały usunięte, aby uniknąć niepotrzebnych zależności zestawów lub zmian powodujących niezgodność w kolejnych wersjach.

Ta przestrzeń nazw została dodana na platformie .NET 5, uaktualnij projekt do platformy .NET 5 lub nowszej.

— lub —

Jeśli kod zależy od użycia Microsoft.VisualBasic.Devices typów i ich składowych, możesz użyć odpowiedniego typu lub elementu członkowskiego w bibliotece klas platformy .NET. Na przykład równoważna Microsoft.VisualBasic.Devices.Clock funkcjonalność klasy jest dostarczana przez System.DateTime typy i System.Environment , a równoważne funkcje Microsoft.VisualBasic.Devices.Ports dla klasy są udostępniane przez typy w System.IO.Ports przestrzeni nazw.

Kategoria

Visual Basic

Dotyczy interfejsów API


Typy w przestrzeni nazw Microsoft.VisualBasic.MyServices są niedostępne

Typy w Microsoft.VisualBasic.MyServices przestrzeni nazw nie są dostępne.

Wprowadzona wersja

.NET Core 3.0

Opis zmiany

Typy w Microsoft.VisualBasic.MyServices przestrzeni nazw były dostępne w programie .NET Framework. Nie są one dostępne na platformie .NET Core 3.0 — 3.1.

Typy zostały usunięte, aby uniknąć niepotrzebnych zależności zestawów lub zmian powodujących niezgodność w kolejnych wersjach.

Ta przestrzeń nazw została dodana na platformie .NET 5, uaktualnij projekt do platformy .NET 5 lub nowszej.

— lub —

Jeśli twój kod zależy od użycia typów Microsoft.VisualBasic.MyServices i ich elementów członkowskich, istnieją odpowiednie typy i składowe w bibliotece klas platformy .NET. Poniżej przedstawiono mapowanie typów Microsoft.VisualBasic.MyServices na równoważne typy bibliotek klas platformy .NET:

Microsoft.VisualBasic.MyServices, typ Typ biblioteki klas platformy .NET
ClipboardProxy System.Windows.Clipboard dla aplikacji WPF dla aplikacji System.Windows.Forms.Clipboard Windows Forms
FileSystemProxy Typy w System.IO przestrzeni nazw
RegistryProxy Typy związane z rejestrem Microsoft.Win32 w przestrzeni nazw
SpecialDirectoriesProxy Environment.GetFolderPath

Kategoria

Visual Basic

Dotyczy interfejsów API


Zobacz też