從 .NET Framework 遷移至 .net Core 的重大變更

如果您要將應用程式從 .NET Framework 遷移至 .net Core 1.0 至3.1 版,本文所列的重大變更可能會對您造成影響。 中斷性變更是依類別目錄分組,而在這些類別中,則是以引入這些變更的 .NET Core 版本為依據。

注意

本文不是 .NET Framework 和 .net Core 之間的重大變更完整清單。 在這裡新增最重要的中斷性變更,因為我們會注意到這些變更。

Core .NET 程式庫

.NET Core 2.1

UseShellExecute 預設值的變更

ProcessStartInfo.UseShellExecute 的預設值是 false 在 .Net Core 上。 在 .NET Framework 上,其預設值為 true

變更描述

Process.Start 可讓您直接啟動應用程式(例如,使用 Process.Start("mspaint.exe") 啟動油漆的程式碼)。 如果設定為,它也可讓您間接啟動相關聯的應用程式 ProcessStartInfo.UseShellExecute true 。 在 .NET Framework 上,的預設值 ProcessStartInfo.UseShellExecutetrue ,這表示 Process.Start("mytextfile.txt") 如果您已使用該編輯器將 .txt 檔案相關聯,像這樣的程式碼將會啟動 [記事本]。 若要避免在 .NET Framework 上間接啟動應用程式,您必須明確地將設定 ProcessStartInfo.UseShellExecutefalse 。 在 .NET Core 上,的預設值 ProcessStartInfo.UseShellExecutefalse 。 這表示當您呼叫時,關聯的應用程式預設不會啟動 Process.Start

上的下列屬性 System.Diagnostics.ProcessStartInfo 只有在為時才能正常運作 ProcessStartInfo.UseShellExecute true

基於效能考慮,.NET Core 引進了這項變更。 通常 Process.Start 是用來直接啟動應用程式。 直接啟動應用程式並不需要包含 Windows shell,並產生相關聯的效能成本。 為了讓此預設案例更快,.NET Core 會將的預設值變更 ProcessStartInfo.UseShellExecutefalse 。 您可以視需要加入宣告較慢的路徑。

引進的版本

2.1

注意

在舊版的 .NET Core 中, UseShellExecute 並未針對 Windows 執行。

如果您的應用程式依賴舊的行為, Process.Start(ProcessStartInfo)UseShellExecute 在物件上呼叫並將設定為 true ProcessStartInfo

類別

Core .NET 程式庫

受影響的 API


.NET Core 1.0

FileSystemInfo 擲回的 System.unauthorizedaccessexception。屬性

在 .NET Core 中, UnauthorizedAccessException 當呼叫端嘗試設定檔案屬性值但沒有寫入權限時,就會擲回。

變更描述

在 .NET Framework 中, ArgumentException 當呼叫端嘗試在中設定檔案屬性值, FileSystemInfo.Attributes 但沒有寫入權限時,就會擲回。 在 .NET Core 中, UnauthorizedAccessException 會改為擲回。 在 .NET Core 中 (, ArgumentException 如果呼叫端嘗試設定不正確檔案屬性,仍會擲回。 )

引進的版本

1.0

catch視需要修改任何語句,以捕捉 UnauthorizedAccessException instead of 或以外的 ArgumentException

類別

Core .NET 程式庫

受影響的 API


不支援處理損毀狀態例外狀況

不支援在 .NET Core 中處理損毀的進程狀態例外狀況。

變更描述

先前,managed 程式碼例外狀況處理常式可能會攔截並處理損毀進程狀態的例外狀況,例如,使用 c # 中的 try catch 語句。

從 .NET Core 1.0 開始,managed 程式碼無法處理損毀進程狀態的例外狀況。 Common language runtime 不會將損毀進程狀態的例外狀況傳遞給 managed 程式碼。

引進的版本

1.0

藉由解決導致這些例外狀況的情況,以避免需要處理損毀進程狀態的例外狀況。 如果絕對必須處理已損毀的進程狀態例外狀況,請在 C 或 c + + 程式碼中撰寫例外狀況處理常式。

類別

Core .NET 程式庫

受影響的 API


UriBuilder 屬性不再加上前置字元

UriBuilder.Fragment 不會再加上前置 # 字元,而且 UriBuilder.Query ? 如果其中一個字元已存在,就不會再加上前置字元。

變更描述

在 .NET Framework 中, UriBuilder.FragmentUriBuilder.Query 屬性一律會 # 分別在 ? 所儲存的值前面加上 or 字元。 # ? 如果字串已經包含這些前導字元的其中一個,則此行為可能會在儲存的值中產生多個字元或多個字元。 例如,的值可能會 UriBuilder.Fragment 變成 ##main

從 .NET Core 1.0 開始,這些屬性不 # ? 會再于預存值的前面加上字元(如果字串開頭已經有的話)。

引進的版本

1.0

在設定屬性值時,您不再需要明確移除這些開頭的任何字元。 這在您附加值時特別有用,因為您不再需要移除附加的前置 #? 每次。

例如,下列程式碼片段顯示 .NET Framework 和 .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);
  • 在 .NET Framework 中,輸出為 ????one=1&two=2&three=3&four=4
  • 在 .NET Core 中,輸出為 ?one=1&two=2&three=3&four=4

類別

Core .NET 程式庫

受影響的 API


StartInfo 會針對您未啟動的進程擲回 InvalidOperationException

讀取程式 Process.StartInfo 代碼未啟動之進程的屬性會擲回 InvalidOperationException

變更描述

在 .NET Framework 中,存取程式 Process.StartInfo 代碼未啟動之進程的屬性會傳回虛擬 ProcessStartInfo 物件。 除了以外,虛擬物件會包含其所有屬性的預設值 EnvironmentVariables

從 .NET Core 1.0 開始,如果您 Process.StartInfo 針對未啟動的進程讀取屬性 (也就是呼叫 Process.Start) , InvalidOperationException 則會擲回。

引進的版本

1.0

請勿存取程式 Process.StartInfo 代碼未啟動的進程屬性。 例如,請勿針對所傳回的進程讀取這個屬性 Process.GetProcesses

類別

Core .NET 程式庫

受影響的 API


密碼編譯

.NET Core 2.1

遵守 SignedCms 的布林值參數。 ComputeSignature

在 .NET Core 中, silent 會遵守方法的布林值參數 SignedCms.ComputeSignature(CmsSigner, Boolean) 。 如果此參數設定為,則不會顯示 PIN 提示 true

變更描述

在 .NET Framework 中, silent SignedCms.ComputeSignature(CmsSigner, Boolean) 會忽略方法的參數,而且在提供者需要時,一律會顯示 PIN 提示。 在 .NET Core 中, silent 會遵守參數,如果設定為,則永遠不會 true 顯示 PIN 提示(即使提供者需要)。

2.1 版的 .NET Core 中引進了 CMS/PKCS #7 訊息的支援。

引進的版本

2.1

為確保在需要時顯示 PIN 提示,桌面應用程式應該呼叫, SignedCms.ComputeSignature(CmsSigner, Boolean) 並將布林參數設定為 false 。 產生的行為等同于 .NET Framework,不論是否在該處停用無訊息內容。

類別

密碼編譯

受影響的 API


MSBuild

.NET Core 3.0

資源資訊清單檔案名變更

從 .NET Core 3.0 開始,在預設情況下,MSBuild 會為資源檔產生不同的資訊清單檔案名。

引進的版本

3.0

變更描述

在 .NET Core 3.0 之前,如果 LogicalName ManifestResourceName 為專案檔中的專案指定了 no、或 DependentUpon 中繼資料 EmbeddedResource ,則 MSBuild 會在模式中產生資訊清單檔案名 <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources 。 如果 RootNamespace 專案檔中未定義,它會預設為專案名稱。 例如,根專案 目錄中名為 MyProject 的資源檔所產生的資訊清單名稱是 MyProject.Form1.resources

從 .NET Core 3.0 開始,如果資源檔與相同名稱的原始程式檔共存 (例如,Form1.cs) ,MSBuild 會使用來源檔案 Form1.cs 中的類型資訊,以在模式中產生資訊清單檔案名 <Namespace>.<ClassName>.resources 。 命名空間和類別名稱是從共置原始檔中的第一個型別解壓縮而來。 例如,與名為 Form1.cs原始程式檔共存的資源 檔所產生的資訊清單名稱,會是 MyNamespace。 要注意的重點是,檔案名的第一個部分與舊版的 .NET Core (MyNamespace ,而不是 MyProject) 。

注意

如果您在 LogicalName ManifestResourceName 專案檔中的 DependentUpon 專案上指定、或中繼資料 EmbeddedResource ,則這項變更不會影響該資源檔。

這項重大變更是透過將 EmbeddedResourceUseDependentUponConvention 屬性新增至 .Net Core 專案所引進。 依預設,不會在 .NET Core 專案檔中明確列出資源檔,因此沒有 DependentUpon 中繼資料可指定如何命名產生的 .resources 檔案。 當 EmbeddedResourceUseDependentUponConvention 設為 true (預設值)時,MSBuild 會尋找共置的原始程式檔,並從該檔案中解壓縮命名空間和類別名稱。 如果您將設定 EmbeddedResourceUseDependentUponConventionfalse ,MSBuild 會根據先前的行為(結合和相對檔案路徑)來產生資訊清單名稱 RootNamespace

在大部分的情況下,開發人員不需要採取任何動作,而且您的應用程式應該會繼續運作。 但是,如果此變更中斷您的應用程式,您可以:

  • 將您的程式碼變更為預期新的資訊清單名稱。

  • 在專案檔中將設定為,以退出宣告新的命名慣例 EmbeddedResourceUseDependentUponConvention false

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

類別

MSBuild

受影響的 API

N/A


網路

.NET Core 2.0

WebClient 地說 cancelasync 不一定會立即取消

從 .NET Core 2.0 開始,如果WebClient.CancelAsync()已開始提取回應,呼叫就不會立即取消要求。

變更描述

先前呼叫WebClient.CancelAsync()會立即取消要求。 從 .NET Core 2.0 開始,只有WebClient.CancelAsync()在回應尚未開始提取時,呼叫才會立即取消要求。 如果已開始提取回應,則只會在讀取完整的回應之後,才會取消要求。

這項變更已實行, WebClient因為 API 已淘汰而改用HttpClient

引進的版本

2.0

System.Net.WebClient請使用System.Net.Http.HttpClient類別,而不是已被取代的。

類別

網路功能

受影響的 API


Windows Forms

Windows版本3.0 中的 .NET Core 已新增表單支援。 如果您要將 Windows Forms 應用程式從 .NET Framework 遷移至 .net Core,此處所列的重大變更可能會影響您的應用程式。

.NET Core 3.1

移除的控制項

從 .NET Core 3.1 開始,部分 Windows Forms 控制項已無法再使用。

變更描述

從 .NET Core 3.1 開始,已不再提供各種 Windows Forms 控制項。 在 .NET Framework 2.0 中引進了更佳設計和支援的取代控制項。 已淘汰的控制項先前已從設計工具工具箱中移除,但仍可供使用。

下列類型已無法再使用:

引進的版本

3.1

每個移除的控制項都有建議的取代控制項。 請參閱下表:

已移除控制項(API) 建議取代 已移除的相關聯 Api
ContextMenu ContextMenuStrip
DataGrid DataGridView DataGridCell、DataGridRow、DataGridTableCollection、DataGridColumnCollection、DataGridTableStyle、System.windows.forms.datagridcolumnstyle>、DataGridLineStyle、DataGridParentRowsLabel、DataGridParentRowsLabelStyle、DataGridBoolColumn、DataGridTextBox、System.windows.forms.gridcolumnstylescollection>、system.windows.forms.gridtablestylescollection>、HitTestType
MainMenu MenuStrip
功能表 ToolStripDropDown、ToolStripDropDownMenu MenuItemCollection
MenuItem ToolStripMenuItem
ToolBar ToolStrip System.windows.forms.toolbar.appearance
ToolBarButton ToolStripButton System.windows.forms.toolbarbuttonclickeventargs>、ToolBarButtonClickEventHandler、ToolBarButtonStyle、ToolBarTextAlign

類別

Windows Forms

受影響的 API


如果顯示工具提示,則不會引發 CellFormatting 事件

A DataGridView 現在會在滑鼠停留時顯示儲存格的文字和錯誤工具提示,並透過鍵盤選取。 如果顯示工具提示,則 DataGridView.CellFormatting 不會引發事件。

變更描述

在 .NET Core 3.1 之前, DataGridView ShowCellToolTips 已將屬性設定為的會在 true 滑鼠游標停留時,顯示儲存格文字和錯誤的工具提示。 透過鍵盤選取資料格時,不會顯示工具提示(例如,使用 Tab 鍵、快速鍵或箭號導覽)。 如果使用者編輯了資料格,而當 DataGridView 仍然處於編輯模式時,將滑鼠停留在未設定屬性的資料格上,就會 ToolTipText CellFormatting 引發事件來格式化儲存格的文字,以便顯示在資料格中。

為了符合協助工具標準,從 .NET Core 3.1 開始,將 DataGridView ShowCellToolTips 屬性設定為的會 true 顯示資料格文字的工具提示,而不只是在資料格已暫留時,也會在透過鍵盤選取時出現的錯誤。 由於這項變更的結果, CellFormattingnot ToolTipText DataGridView 處於編輯模式時,不會引發未設定屬性的資料格時,就不會引發事件。 事件不會引發,因為暫留的資料格內容會顯示為工具提示,而不會顯示在資料格中。

引進的版本

3.1

CellFormatting當處於編輯模式時,重構相依于事件的任何程式碼 DataGridView

類別

Windows Forms

受影響的 API


.NET Core 3.0

預設控制字型已變更為 Segoe UI 9 pt

變更描述

在 .NET Framework 中, Control.DefaultFont 屬性已設定為 Microsoft Sans Serif 8 pt 。 下圖顯示使用預設字型的視窗。

.NET Framework 中的預設控制字型

從 .NET Core 3.0 開始,預設字型會設定為 Segoe UI 9 pt (與相同的字型 SystemFonts.MessageBoxFont )。 由於這項變更的結果,表單和控制項的大小約為27% 以上,以考慮新的預設字型大小。 例如:

.NET Core 中的預設控制項字型

這是為了配合Windows 使用者經驗(UX)指導方針而進行的變更。

引進的版本

3.0

由於表單和控制項的大小變更,請確定您的應用程式正確呈現。

若要保留原始字型,請將表單的預設字型設定為 Microsoft Sans Serif 8 pt 。 例如:

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

類別

  • Windows Forms

受影響的 API

無。


FolderBrowserDialog 的現代化

FolderBrowserDialog控制項已在 .Net Core 的 Windows Forms 應用程式中變更。

變更描述

在 .NET Framework 中,Windows forms 會針對控制項使用下列對話方塊 FolderBrowserDialog

.NET Framework 中的 FolderBrowserDialogControl

在 .NET Core 3.0 中,Windows Forms 會使用 Windows Vista 中引進的較新 COM 控制項:

.NET Core 中的 FolderBrowserDialogControl

引進的版本

3.0

對話方塊將會自動升級。

如果您想要保留原始的對話,請在 FolderBrowserDialog.AutoUpgradeEnabled 顯示對話方塊之前將屬性設定為, false 如下列程式碼片段所示:

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

類別

Windows Forms

受影響的 API


已從某些 Windows Forms 類型中移除 SerializableAttribute

SerializableAttribute 從某些沒有已知二進位序列化案例的 Windows Forms 類別中移除。

變更描述

下列型別會使用中的來裝飾 SerializableAttribute .NET Framework 中的,但已移除 .Net Core 中的屬性:

在過去,這個序列化機制已經有嚴重的維護和安全性考慮。 維護 SerializableAttribute 類型表示這些類型必須經過測試,才能進行版本對版本的序列化變更,以及可能的架構對架構序列化變更。 這會讓您更難演變這些類型,而且維護成本可能會很高。 這些類型沒有已知的二進位序列化案例,可將移除屬性的影響降至最低。

如需詳細資訊,請參閱二進位序列化

引進的版本

3.0

更新可能相依于標記為 serializable 之這些類型的任何程式碼。

類別

Windows Forms

受影響的 API


不支援 AllowUpdateChildControlIndexForTabControls 相容性切換

Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls.NET Framework 4.6 和更新版本的 Windows Forms 支援相容性參數,但 .Net Core 或 .net 5.0 及更新版本不支援此功能。

變更描述

在 .NET Framework 4.6 和更新版本中,選取索引標籤會重新排序其控制項集合。 Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls相容性參數可讓應用程式在不想要此行為時略過這種重新排列。

在 .NET Core 和 .NET 5.0 和更新版本中, Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls 不支援此參數。

引進的版本

3.0

移除參數。 不支援此參數,而且沒有可用的替代功能。

類別

Windows Forms

受影響的 API


不支援 DomainUpDown. UseLegacyScrolling 相容性參數

Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling.Net Core 或 .net 5.0 和更新版本的 Windows Forms 不支援 .NET Framework 4.7.1 中引進的相容性參數。

變更描述

從 .NET Framework 4.7.1 開始, Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling 相容性切換允許開發人員退出宣告獨立 DomainUpDown.DownButton()DomainUpDown.UpButton() 動作。 此參數會還原舊版行為,其中 DomainUpDown.UpButton() 如果內容文字存在,則會忽略,而開發人員必須在 DomainUpDown.DownButton() 動作之前對控制項使用動作 DomainUpDown.UpButton() 。 如需詳細資訊,請參閱 <AppContextSwitchOverrides> 元素

在 .NET Core 和 .NET 5.0 和更新版本中, Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling 不支援此參數。

引進的版本

3.0

移除參數。 不支援此參數,而且沒有可用的替代功能。

類別

Windows Forms

受影響的 API


不支援 DoNotLoadLatestRichEditControl 相容性切換

Switch.System.Windows.Forms.UseLegacyImages.Net Core 或 .net 5.0 和更新版本的 Windows Forms 不支援 .NET Framework 4.7.1 中引進的相容性參數。

變更描述

在 .NET Framework 4.6.2 和舊版中,控制項會具現 RichTextBox 化 Win32 RichEdit control v3.0,而針對以 .NET Framework 4.7.1 為目標的應用程式, RichTextBox 控制項會在msftedit.dll) 中具現化 RichEdit 4.1 (。 Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl已引進相容性參數,以允許以 .NET Framework 4.7.1 和更新版本為目標的應用程式退出宣告新的 RichEdit 4.1 控制項,並改為使用舊的 RichEdit v3 控制項。

在 .NET Core 和 .NET 5.0 和更新版本中, Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl 不支援參數。 只支援新版本的 RichTextBox 控制項。

引進的版本

3.0

移除參數。 不支援此參數,而且沒有可用的替代功能。

類別

Windows Forms

受影響的 API


不支援 DoNotSupportSelectAllShortcutInMultilineTextBox 相容性切換

Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox.Net Core 和 .net 5.0 和更新版本的 Windows Forms 不支援 .NET Framework 4.6.1 中引進的相容性參數。

變更描述

從 .NET Framework 4.6.1 開始,選取控制項中的Ctrl + A鍵,並 TextBox 選取 [所有文字]。 在 .NET Framework 4.6 和之前的版本中, Ctrl + A如果ShortcutsEnabledTextBox.Multiline 屬性都設定為,選取 [Ctrl A] 快速鍵就無法選取所有文字 trueSwitch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox.NET Framework 4.6.1 中引進了相容性參數,以保留原始的行為。 如需相關資訊,請參閱TextBox.ProcessCmdKey

在 .NET Core 和 .NET 5.0 和更新版本中, Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox 不支援參數。

引進的版本

3.0

移除參數。 不支援此參數,而且沒有可用的替代功能。

類別

Windows Forms

受影響的 API


不支援 DontSupportReentrantFilterMessage 相容性切換

Switch.System.Windows.Forms.DontSupportReentrantFilterMessage.Net Core 和 .net 5.0 和更新版本的 Windows Forms 不支援 .NET Framework 4.6.1 中引進的相容性參數。

變更描述

從 .NET Framework 4.6.1 開始, Switch.System.Windows.Forms.DontSupportReentrantFilterMessage 相容性參數 IndexOutOfRangeException 會解決 Application.FilterMessage 以自訂執行呼叫訊息時可能發生的例外狀況 IMessageFilter.PreFilterMessage 。 如需詳細資訊,請參閱風險降低:自訂 IMessageFilter.PreFilterMessage 實作

在 .NET Core 和 .NET 5.0 和更新版本中, Switch.System.Windows.Forms.DontSupportReentrantFilterMessage 不支援此參數。

引進的版本

3.0

移除參數。 不支援此參數,而且沒有可用的替代功能。

類別

Windows Forms

受影響的 API


不支援 EnableVisualStyleValidation 相容性切換

Switch.System.Windows.Forms.EnableVisualStyleValidation .Net Core 或 .net 5.0 和更新版本的 Windows Forms 中不支援相容性參數。

變更描述

在 .NET Framework 中, Switch.System.Windows.Forms.EnableVisualStyleValidation 相容性參數允許應用程式選擇不驗證數值格式所提供的視覺化樣式。

在 .NET Core 和 .NET 5.0 和更新版本中, Switch.System.Windows.Forms.EnableVisualStyleValidation 不支援此參數。

引進的版本

3.0

移除參數。 不支援此參數,而且沒有可用的替代功能。

類別

Windows Forms

受影響的 API


不支援 UseLegacyCoNtextMenuStripSourceControlValue 相容性切換

Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue.Net Core 或 .net 5.0 和更新版本的 Windows Forms 不支援 .NET Framework 4.7.2 中引進的相容性參數。

變更描述

從 .NET Framework 4.7.2 開始, Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue 相容性參數可讓開發人員選擇不使用屬性的新行為 ContextMenuStrip.SourceControl ,這現在會傳回原始檔控制的參考。 屬性的先前行為是傳回 null 。 如需詳細資訊,請參閱 <AppContextSwitchOverrides> 元素

在 .NET Core 和 .NET 5.0 和更新版本中, Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue 不支援此參數。

引進的版本

3.0

移除參數。 不支援此參數,而且沒有可用的替代功能。

類別

Windows Forms

受影響的 API


不支援 UseLegacyImages 相容性切換

Switch.System.Windows.Forms.UseLegacyImages.Net Core 或 .net 5.0 及更新版本的 Windows Forms 不支援在 .NET Framework 4.8 中引進的相容性參數。

變更描述

從 .NET Framework 4.8 開始, Switch.System.Windows.Forms.UseLegacyImages 相容性參數在高 DPI 環境的 ClickOnce 案例中解決可能的影像縮放問題。 設定為時 true ,參數可讓使用者在其小數值設定為大於100% 的高 DPI 顯示器上還原舊版影像縮放比例。 如需詳細資訊,請參閱 GitHub 上的.NET Framework 4.8 版本資訊。

在 .NET Core 和 .NET 5.0 和更新版本中, Switch.System.Windows.Forms.UseLegacyImages 不支援此參數。

引進的版本

3.0

移除參數。 不支援此參數,而且沒有可用的替代功能。

類別

Windows Forms

受影響的 API


關於和 SplashScreen 範本已中斷

About.vbVisual Studio 所產生的和檔案 SplashScreen.vb 包含 My 命名空間中無法使用 .net Core 3.0 和3.1 之類型的參考。

引進的版本

3.0

變更描述

.NET Core 3.0 和3.1 不包含完整 My 的 Visual Basic 支援。 Visual Studio 中 Visual Basic Windows Forms 應用程式的 [ 關於 ] 和 [ SplashScreen ] 表單範本參考無法使用之類型中的屬性 My.Application.Info

Visual Basic My 支援已在 .net 5 中改善,請將您的專案升級至 .net 5 或更新版本。

-或-

修正應用程式中 [ 關於 ] 和 [ SplashScreen ] 類型的編譯器錯誤。 您 System.Reflection.Assembly 可以使用類別來取得類型所提供的資訊 My.Application.Info 。 這兩種表單的直接埠都可在這裡取得。

提示

這是範例程式碼和未優化。 應快取屬性清單,以減少表單載入時間。

關於

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

類別

Visual Basic Windows Forms

受影響的 API

None


>iapplicationbuilder.applicationservices 命名空間中的類型無法使用

命名空間中的類型 Microsoft.VisualBasic.ApplicationServices 無法使用。

引進的版本

.NET Core 3.0

變更描述

命名空間中的類型 Microsoft.VisualBasic.ApplicationServices 可在 .NET Framework 中使用。 它們無法在 .NET Core 3.0-3.1 中使用。

已移除類型,以避免不必要的元件相依性或後續版本中的重大變更。

此命名空間是在 .NET 5 中新增的,請將您的專案升級至 .NET 5 或更新版本。

-或-

如果您的程式碼相依于 Microsoft.VisualBasic.ApplicationServices 類型和其成員,您可以在 .net 類別庫中使用對應的類型或成員。 例如,部分 System.EnvironmentSystem.Security.Principal.WindowsIdentity 成員會提供對類別屬性的對等功能 Microsoft.VisualBasic.ApplicationServices.User

類別

Visual Basic

受影響的 API


Microsoft..... # 命名空間中的類型無法使用

命名空間中的類型 Microsoft.VisualBasic.Devices 無法使用。

引進的版本

.NET Core 3.0

變更描述

命名空間中的類型 Microsoft.VisualBasic.Devices 可在 .NET Framework 中使用。 它們無法在 .NET Core 3.0-3.1 中使用。

已移除類型,以避免不必要的元件相依性或後續版本中的重大變更。

此命名空間是在 .NET 5 中新增的,請將您的專案升級至 .NET 5 或更新版本。

-或-

如果您的程式碼相依于 Microsoft.VisualBasic.Devices 類型和其成員,您可以在 .net 類別庫中使用對應的類型或成員。 例如,和類型提供對等的功能 Microsoft.VisualBasic.Devices.Clock System.DateTime System.Environment ,而類別的對等功能則 Microsoft.VisualBasic.Devices.Ports 由命名空間中的類型提供 System.IO.Ports

類別

Visual Basic

受影響的 API


MyServices 命名空間中的類型無法使用

命名空間中的類型 Microsoft.VisualBasic.MyServices 無法使用。

引進的版本

.NET Core 3.0

變更描述

命名空間中的類型 Microsoft.VisualBasic.MyServices 可在 .NET Framework 中使用。 它們無法在 .NET Core 3.0-3.1 中使用。

已移除類型,以避免不必要的元件相依性或後續版本中的重大變更。

此命名空間是在 .NET 5 中新增的,請將您的專案升級至 .NET 5 或更新版本。

-或-

如果您的程式碼相依于使用 MyServices 類型及其成員,.net 類別庫中會有對應的類型和成員。 以下是 MyServices 類型與其對等 .net 類別庫類型的對應:

MyServices 類型 .NET 類別庫類型
ClipboardProxy System.Windows.Clipboard針對 Windows Forms 應用程式的 WPF 應用程式 System.Windows.Forms.Clipboard
FileSystemProxy 命名空間中的類型 System.IO
RegistryProxy 命名空間中的登錄相關類型 Microsoft.Win32
SpecialDirectoriesProxy Environment.GetFolderPath

類別

Visual Basic

受影響的 API


VbNewLine 已被淘汰

Microsoft.VisualBasic.Constants.vbNewLine從 .Net Core 3.0 開始,常數會標示為 [ 過時 ]

引進的版本

3.0

變更描述

從 .NET Core 3.0 開始,已將 過時 的屬性套用到 Microsoft.VisualBasic.Constants.vbNewLine 常數。 使用常數會產生編譯器警告。 在 .NET Framework 和舊版的 .NET Core 中,它並未標示為已淘汰。

這是為了支援 Visual Basic 做為多平臺開發的語言而進行的變更。 vbNewLine常數相當於 \r\n Windows 上的換行字元序列。 在以 Unix 為基礎的系統上,換行字元是 \n

過時 屬性訊息 vbNewLine 包含下列建議:

若為換行字元和換行字元,請使用 vbCrLf 。 針對目前平臺的新行,請使用 Environment.NewLine

類別

Visual Basic

受影響的 API


另請參閱