如果您要將應用程式從 .NET Framework 移轉至 .NET Core 1.0 到 3.1 版,本文所列的重大變更可能會影響您。 重大變更會依類別分組,在這些類別中,依引進的 .NET Core 版本分組。
注意
本文不是 .NET Framework 與 .NET Core 之間重大變更的完整清單。 當我們發現有重大變更時,我們會在這裡新增最重要的變更。
IDispatchImplAttribute API 已移除
ProcessStartInfo.UseShellExecute .NET Core 上的預設值為 false
。 在 .NET Framework 上,其預設值為 true
。
Process.Start 可讓您直接啟動應用程式,例如,使用像 Process.Start("mspaint.exe")
這樣啟動 Paint 的程式代碼。 如果 ProcessStartInfo.UseShellExecute 設定為 true
,它也可讓您間接啟動相關聯的應用程式。 在 .NET Framework 上,ProcessStartInfo.UseShellExecute 的預設值是 true
,這表示如果您已與該編輯器 .txt 檔案相關聯,Process.Start("mytextfile.txt")
之類的程式代碼將會啟動記事本。 若要防止在 .NET Framework 上間接啟動應用程式,您必須明確地將 ProcessStartInfo.UseShellExecute 設定為 false
。 在 .NET Core 上,ProcessStartInfo.UseShellExecute 的預設值為 false
。 這表示當您呼叫 Process.Start
時,不會啟動相關聯的應用程式。
System.Diagnostics.ProcessStartInfo 上的下列屬性只有在 ProcessStartInfo.UseShellExecute 是 true
時才能正常運作:
基於效能考慮,這項變更是在 .NET Core 中引進的。 一般而言,Process.Start 是用來直接啟動應用程式。 直接啟動程式不需要涉及 Windows 介面,並避免因而產生的效能開銷。 為了加快此預設案例的速度,.NET Core 會將 ProcessStartInfo.UseShellExecute 的預設值變更為 false
。 如果需要,您可以選擇較慢的方式。
2.1
注意
在舊版 .NET Core 中,UseShellExecute
未針對 Windows 實作。
如果您的應用程式依賴舊的行為,請呼叫 Process.Start(ProcessStartInfo) ,並將 UseShellExecute 設定為 ProcessStartInfo 物件上的 true
。
.NET Core 函式庫
FileSystemInfo.Attributes 擲回的 UnauthorizedAccessException
在 .NET Core 中,當呼叫端嘗試設定檔案屬性值但沒有寫入許可權時,就會擲回 UnauthorizedAccessException 。
在 .NET Framework 中,當呼叫端嘗試在 FileSystemInfo.Attributes 中設定檔案屬性值,但沒有寫入許可權時,就會擲回 ArgumentException 。 在 .NET Core 中,會改為擲回 UnauthorizedAccessException 。 (在 .NET Core 中,如果呼叫端嘗試設定無效的檔案屬性,仍然會擲回 ArgumentException 。
1.0
視需要修改任何 catch
語句,以攔截 UnauthorizedAccessException ,而非 ArgumentException 。
Core .NET 程式庫
不支援在 .NET Core 中處理損毀的進程狀態例外狀況。
先前,損壞的進程狀態例外可以透過受控代碼的例外狀況處理程式來攔截和處理,例如在 C# 中使用 try-catch 語句。
從 .NET Core 1.0 開始,Managed 程式代碼無法處理損毀的進程狀態例外狀況。 公共語言執行環境不會將損毀的進程狀態例外狀況傳遞給受控代碼。
1.0
藉由解決導致進程狀態損毀例外狀況的原因,來避免需要處理這些例外狀況。 如果絕對需要處理損毀的進程狀態例外狀況,請在 C 或 C++ 程式代碼中撰寫例外狀況處理程式。
Core .NET 函式庫
UriBuilder.Fragment 不再在前面加上 #
字元,而且 UriBuilder.Query 如果已經有一個字元存在時,不再在前面加上 ?
字元。
在 .NET Framework 中,UriBuilder.Fragment 和 UriBuilder.Query 屬性一律會分別在所儲存的值前面加上 #
或 ?
個字元。 如果字串已經包含其中一個前置字元,此行為可能會導致預存值中的多個 #
或 ?
字元。 例如,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 程式庫
Process.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 程式庫
SignedCms.ComputeSignature 的布爾參數受到尊重
在 .NET Core 中,會遵守 SignedCms.ComputeSignature(CmsSigner, Boolean) 方法的 Boolean silent
參數。 如果此參數設定為 true
,就不會顯示 PIN 提示。
在 .NET Framework 中,會忽略 SignedCms.ComputeSignature(CmsSigner, Boolean) 方法的 silent
參數,而且提供者需要時一律會顯示 PIN 提示。 在 .NET Core 中,遵守 silent
參數的設定。如果設定為 true
,即使提供者需要,也絕不會顯示 PIN 提示。
.NET Core 在版本 2.1 中引入了對 CMS/PKCS #7 訊息的支援。
2.1
為了確保必要時會出現 PIN 提示,傳統型應用程式應該呼叫 SignedCms.ComputeSignature(CmsSigner, Boolean) ,並將布爾參數設定為 false
。 不論該處是否停用無訊息內容,產生的行為都與 .NET Framework 上的行為相同。
密碼學
從 .NET Core 3.0 開始,在預設案例中,MSBuild 會為資源檔產生不同的指令清單檔名稱。
3.0
在 .NET Core 3.0 之前,如果未為專案檔中的 EmbeddedResource
項目指定 LogicalName
、ManifestResourceName
或 DependentUpon
元數據,MSBuild 就會根據模式 <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources
產生清單檔名稱。 如果未在專案檔中定義 RootNamespace
,則會預設為項目名稱。 例如,在根項目目錄中名為 Form1.resx 的資源檔,其產生的指令清單名稱為 MyProject.Form1.resources 。
從 .NET Core 3.0 開始,如果資源檔與相同名稱的來源檔案共置(例如,Form1.resx 和 Form1.cs ),MSBuild 會使用來源檔案的類型資訊,在模式 <Namespace>.<ClassName>.resources
中產生指令清單檔名稱。 命名空間和類別名稱是從同一來源檔案中的第一個類型所擷取。 例如,當名為 Form1.resx 的資源檔與名為 Form1.cs 的原始程式檔共置時,其產生的清單名稱為 MyNamespace.Form1.resources 。 要注意的重點是,檔名的第一個部分與舊版 .NET Core 不同(MyNamespace ,而不是 MyProject )。
注意
如果您在項目檔 EmbeddedResource
專案上指定了 LogicalName
、ManifestResourceName
或 DependentUpon
元數據,則這項變更不會影響該資源檔。
這項重大變更是在將 EmbeddedResourceUseDependentUponConvention
屬性新增至 .NET Core 專案時引進的。 根據預設,資源檔不會明確列在 .NET Core 項目檔中,因此它們沒有 DependentUpon
元數據來指定如何命名產生的 .resources 檔案。 當 EmbeddedResourceUseDependentUponConvention
設定為 true
時,這是預設值,MSBuild 會尋找共置的來源檔案,並從該檔案擷取命名空間和類別名稱。 如果您將 EmbeddedResourceUseDependentUponConvention
設定為 false
,MSBuild 會根據先前的行為產生對應的檔案名稱,這會結合 RootNamespace
和相對檔案路徑。
在大部分情況下,開發人員不需要採取任何動作,您的應用程式應該會繼續運作。 不過,如果這項變更中斷您的應用程式,您可以:
MSBuild
N/A
從 .NET Core 2.0 開始,如果回應已開始擷取,呼叫 WebClient.CancelAsync() 不會立即取消要求。
先前,呼叫 WebClient.CancelAsync() 會立即取消請求。 從 .NET Core 2.0 開始,呼叫 WebClient.CancelAsync() 只會在回應尚未開始擷取時立即取消要求。 如果回應已開始擷取,則只有在完整讀取回應後才會取消請求。
此變更已實作,因為 WebClient API 已被取代,而改用 HttpClient 。
2.0
使用 System.Net.Http.HttpClient 類別,而不是 System.Net.WebClient ,此類別已被取代。
聯網
Windows Forms 支援已在 3.0 版中新增至 .NET Core。 如果您要將 Windows Forms 應用程式從 .NET Framework 移轉至 .NET Core,此處列出的重大變更可能會影響您的應用程式。
從 .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、DataGridColumnStyle、DataGridLineStyle、DataGridParentRowsLabel、DataGridParentRowsLabelStyle、DataGridBoolColumn、DataGridTextBox、GridColumnStylesCollection、GridTableStylesCollection、HitTestType
主選單
MenuStrip
選單
ToolStripDropDown、ToolStripDropDownMenu
選單項目集合
選單項目
ToolStripMenuItem(工具列選單項目)
工具列
工具列 (ToolStrip)
工具列外觀
工具列按鈕
工具列按鈕
ToolBarButtonClickEventArgs、ToolBarButtonClickEventHandler、ToolBarButtonStyle、ToolBarTextAlign
Windows Forms
DataGridView 現在在以滑鼠懸停或透過鍵盤選取時,會顯示儲存格的文字和錯誤提示工具。 如果出現工具提示,則不會引發 DataGridView.CellFormatting 事件。
在 .NET Core 3.1 之前,將 ShowCellToolTips 屬性設定為 true
的 DataGridView ,在滑鼠懸停於儲存格時顯示儲存格文字與錯誤的工具提示。 當透過鍵盤選取儲存格時,不會顯示工具提示(例如,使用 Tab 鍵、快速鍵或箭頭流覽)。 如果使用者編輯儲存格,然後在 DataGridView 仍處於編輯模式時,將滑鼠停留在未設定 ToolTipText 屬性的單元格上,就會引發 CellFormatting 事件來格式化單元格的文字以在儲存格中顯示。
從 .NET Core 3.1 開始,為了符合無障礙標準,ShowCellToolTips 屬性設定為 true
的 DataGridView ,將在單元格懸停時和透過鍵盤選取時,顯示單元格文字及錯誤的工具提示。 由於這項變更,當 DataGridView 處於編輯模式時,沒有 ToolTipText 屬性集的單元格暫留時,CellFormatting 事件 不會 引發。 不會引發事件,因為懸停單元格的內容會顯示為工具提示,而不是顯示在儲存格中。
3.1
在 DataGridView 處於編輯模式時,重構相依於 CellFormatting 事件的任何程序代碼。
Windows Forms
沒有
在 .NET Framework 中,Control.DefaultFont 屬性設定為 Microsoft Sans Serif 8.25 pt
。 下圖顯示使用預設字型的視窗。
從 .NET Core 3.0 開始,預設字型會設定為 Segoe UI 9 pt
(與 SystemFonts.MessageBoxFont 相同的字型)。 由於這項變更,表單和控制項的大小增加約 27%,以適應新預設字型較大的尺寸。 例如:
中的預設控件字型
這項變更是為了符合 Windows 用戶體驗指導方針 。
3.0
由於表單和控件的大小有所變更,因此請確定您的應用程式正確呈現。
若要保留單一表體的原始字型,請將預設字型設定為 Microsoft Sans Serif 8.25 pt
。 例如:
public MyForm ( )
{
InitializeComponent();
Font = new Font(new FontFamily("Microsoft Sans Serif" ), 8.25f );
}
或者,您可以透過下列其中一種方式來變更整個應用程式的預設字型:
將 ApplicationDefaultFont
MSBuild 屬性設定為 「Microsoft Sans Serif, 8.25pt」。。 這是慣用的技術,因為它允許 Visual Studio 在設計工具中使用新的設定。
<PropertyGroup >
<ApplicationDefaultFont > Microsoft Sans Serif, 8.25pt</ApplicationDefaultFont >
</PropertyGroup >
藉由呼叫 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());
}
}
沒有。
適用於 .NET Core 的 Windows Forms 應用程式中的 FolderBrowserDialog 控制項已變更。
在 .NET Framework 中,Windows forms 會針對 FolderBrowserDialog 控件使用下列對話框:
中的 FolderBrowserDialogControl
在 .NET Core 3.0 中,Windows Forms 使用 Windows Vista 中引進的較新 COM 型控件:
3.0
對話框會自動升級。
如果您想要保留原始對話框,請在顯示對話方塊之前,將 FolderBrowserDialog.AutoUpgradeEnabled 屬性設定為 false
,如下列代碼段所示:
var dialog = new FolderBrowserDialog();
dialog.AutoUpgradeEnabled = false ;
dialog.ShowDialog();
Windows Forms
SerializableAttribute 已從某些沒有已知二進位串行化案例的 Windows Forms 類別中移除。
下列類型在 .NET Framework 中會使用 SerializableAttribute 裝飾,但在 .NET Core 中已移除此屬性:
從歷史上看,這種串行化機制有嚴重的維護和安全性考慮。 在維護 SerializableAttribute
的型別時,表示必須針對這些型別進行版本間的序列化變更測試,以及可能存在的架構間序列化變更測試。 這會使這些類型更難發展,而且維護成本很高。 這些類型沒有已知的二進位串行化案例,可將移除屬性的影響降到最低。
如需詳細資訊,請參閱 二進位串行化 。
3.0
更新任何依賴於標示為可序列化的類型的代碼。
Windows Forms
不支援 AllowUpdateChildControlIndexForTabControls 相容性切換
.NET Framework 4.6 和更新版本的 Windows Forms 支援 Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls
兼容性開關,但 .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
不支援 DomainUpDown.UseLegacyScrolling 相容性切換
.NET Framework 4.7.1 引入的 Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling
相容性開關不支援在 .NET Core 或 .NET 5.0 及更高版本中的 Windows Forms。
從 .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
不支援 DoNotLoadLatestRichEditControl 相容性開關
在 .NET Framework 4.7.1 中引入的 Switch.System.Windows.Forms.UseLegacyImages
兼容性參數,不支援於 .NET Core 或 .NET 5.0 和更新版本中的 Windows Forms。
在 .NET Framework 4.6.2 和舊版中,RichTextBox 控件會具現化 Win32 RichEdit 控件 v3.0,而針對以 .NET Framework 4.7.1 為目標的應用程式,RichTextBox 控件會具現化 RichEdit v4.1 (在 msftedit.dll 中)。 引進了 Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl
相容性參數,以允許以 .NET Framework 4.7.1 和更新版本為目標的應用程式退出新的 RichEdit v4.1 控件,並改用舊的 RichEdit v3 控件。
在 .NET Core 和 .NET 5.0 及以後的版本中,不支援 Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl
開關。 僅支援新版本的 RichTextBox 控件。
3.0
拿掉開關。 不支持該開關,且沒有可用的替代功能。
Windows Forms
不支援 DoNotSupportSelectAllShortcutInMultilineTextBox 相容性參數
.NET Framework 4.6.1 中引進的 Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox
兼容性參數,在 .NET Core 和 .NET 5.0 和更新版本的 Windows Forms 中不受支援。
從 .NET Framework 4.6.1 開始,在 TextBox 控制項中,選取 Ctrl + A 這組快捷鍵會選取所有文字。 在 .NET Framework 4.6 和舊版中,如果將 Textbox.ShortcutsEnabled 和 TextBox.Multiline 屬性都設為 true
,則選擇快捷鍵 Ctrl + A 會無法選取所有文字。
Switch.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
不支援 DontSupportReentrantFilterMessage 相容性切換
.NET Framework 4.6.1 中引進的 Switch.System.Windows.Forms.DontSupportReentrantFilterMessage
兼容性參數,在 .NET Core 和 .NET 5.0 和更新版本的 Windows Forms 中不受支援。
從 .NET Framework 4.6.1 開始,Switch.System.Windows.Forms.DontSupportReentrantFilterMessage
相容性參數會在使用自定義 IMessageFilter.PreFilterMessage 實作呼叫 Application.FilterMessage 訊息時,解決可能的 IndexOutOfRangeException 例外狀況。 如需詳細資訊,請參閱 風險降低:自定義 IMessageFilter.PreFilterMessage 實作 。
在 .NET Core 和 .NET 5.0 及更高版本中,不支援 Switch.System.Windows.Forms.DontSupportReentrantFilterMessage
開關。
3.0
拿掉開關。 不支持該切換,並且沒有其他可用的功能。
Windows Forms
不支援 EnableVisualStyleValidation 相容性開關
.NET Core 或 .NET 5.0 及更新版本的 Windows Forms 不支援 Switch.System.Windows.Forms.EnableVisualStyleValidation
兼容性開關。
在 .NET Framework 中,Switch.System.Windows.Forms.EnableVisualStyleValidation
兼容性參數允許應用程式選擇不驗證以數值形式提供的視覺樣式。
在 .NET Core 和 .NET 5.0 及更高的版本中,不支援 Switch.System.Windows.Forms.EnableVisualStyleValidation
開關。
3.0
移除開關。 開關不被支持,並且沒有可用的替代功能。
Windows Forms
.NET Framework 4.7.2 中引進的 Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue
兼容性參數在 .NET Core 或 .NET 5.0 和更新版本的 Windows Forms 中不受支援。
從 .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
不支援 UseLegacyImages 相容性切換
.NET Framework 4.8 中引進的 Switch.System.Windows.Forms.UseLegacyImages
相容性參數在 .NET Core 或 .NET 5.0 和更新版本的 Windows Forms 中不受支援。
從 .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
About 和 SplashScreen 範本已損壞
Visual Studio 所產生的 About.vb
和 SplashScreen.vb
檔案包含在 .NET Core 3.0 和 3.1 中無法使用的 My
命名空間類型的參考。
3.0
.NET Core 3.0 和 3.1 不包含完整的 Visual Basic My
支援。
關於 和 啟動畫面 Visual Studio 中用於 Visual Basic 的 Windows Forms 應用程式窗體範本,參考了 My.Application.Info
類型中並不存在的屬性。
.NET 5 已改善 Visual Basic My
支援,將您的項目升級至 .NET 5 或更新版本。
-或-
修正應用程式中 About 和 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
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)
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
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
Version.Text = System.String .Format(Version.Text , versionValue.Major, versionValue.Minor)
Copyright.Text = If (Assembly .GetExecutingAssembly().GetCustomAttribute(Of AssemblyCopyrightAttribute)()?.Copyright, "" )
End Sub
End Class
Visual Basic Windows Forms
沒有
Microsoft.VisualBasic.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.Environment 和 System.Security.Principal.WindowsIdentity 成員提供對等功能給 Microsoft.VisualBasic.ApplicationServices.User 類別的屬性。
Visual Basic
Microsoft.VisualBasic.Devices 命名空間中的類型無法使用
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
Microsoft.VisualBasic.MyServices 命名空間中的類別無法使用
Microsoft.VisualBasic.MyServices 命名空間中的類型無法使用。
.NET Core 3.0
Microsoft.VisualBasic.MyServices 命名空間中的類型可在 .NET Framework 中使用。 它們不適用於 .NET Core 3.0 - 3.1。
已移除類型,以避免後續版本中不必要的元件相依性或重大變更。
此命名空間已在 .NET 5 中新增,將您的項目升級至 .NET 5 或更新版本。
-或-
如果您的程式代碼取決於使用 Microsoft.VisualBasic.MyServices 類型和其成員,.NET 類別庫中會有對應的類型和成員。 以下是 Microsoft.VisualBasic.MyServices 類型與其對等 .NET 類別庫類型的對應:
展開資料表
Visual Basic