小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

.NET Core 3.0中的WinForms創(chuàng)建集中式拉取請(qǐng)求中心

 蘭亭文藝 2019-07-18
作者:Eric Fleming
鏈接:https://msdn.microsoft.com/zh-cn/magazine/mt833442

Windows 窗體(或簡(jiǎn)稱(chēng) WinForms),多年來(lái)被用于開(kāi)發(fā)具有豐富和交互式界面的基于 Windows 的強(qiáng)大應(yīng)用程序。

各類(lèi)企業(yè)對(duì)這些桌面應(yīng)用程序的投入量非常巨大,每月有大約 240 萬(wàn)開(kāi)發(fā)人員使用 Visual Studio 創(chuàng)建桌面式應(yīng)用。

利用和擴(kuò)展現(xiàn)有WinForms代碼資產(chǎn)的好處無(wú)疑極具吸引力,但還有其他好處。

WinForms 拖放式設(shè)計(jì)器體驗(yàn)使用戶(hù)能夠構(gòu)建功能齊全的 UI,而不需要任何特殊知識(shí)或培訓(xùn)。

WinForms 應(yīng)用程序易于部署和更新,可獨(dú)立于 Internet 連接工作,并且可以在不向 Internet 公開(kāi)配置的本地計(jì)算機(jī)上運(yùn)行,提高了安全性。

一直到最近,WinForms 應(yīng)用程序都還依然只能使用完整的 .NET Framework 進(jìn)行構(gòu)建,但 .NET Core 3.0 預(yù)覽版的發(fā)布改變了這一現(xiàn)狀。

.NET Core 的新功能和優(yōu)點(diǎn)不再局限于 Web 開(kāi)發(fā)。

通過(guò).NET Core 3.0 WinForms增加了一些功能,比如更易于部署、更高的性能、對(duì).NET Core 特有的NuGet 包的支持、.NET Core 命令行接口 (CLI) 等等。

本文將介紹使用這些功能的諸多好處、它們的重要性以及如何在WinForms應(yīng)用程序中使用它們。

讓我們直接開(kāi)始構(gòu)建第一個(gè) .NET Core 3.0 WinForms 應(yīng)用程序。

在本文中,我將構(gòu)建一個(gè)應(yīng)用程序,用于檢索并顯示托管在 GitHub 上的其中一個(gè)開(kāi)源 Microsoft 存儲(chǔ)庫(kù)的開(kāi)放式拉取請(qǐng)求。

第一步是安裝最新版本的 Visual Studio 2019 和 .NET Core 3.0 SDK,之后便可使用 .NET Core CLI 命令來(lái)創(chuàng)建新的 WinForms 應(yīng)用程序。

在添加 .NET Core 支持之前,WinForms 應(yīng)用程序無(wú)法實(shí)現(xiàn)這一點(diǎn)。

即將發(fā)布的是一個(gè)新的 Visual Studio 模板,用于創(chuàng)建針對(duì) .NET Core 3.0 的 WinForms 項(xiàng)目。

由于模板目前尚未發(fā)布,因此現(xiàn)在讓我們通過(guò)運(yùn)行以下命令生成一個(gè)名為 PullRequestHub 的新 WinForms 項(xiàng)目:

dotnet new winforms -o PullRequestHub

為了確保項(xiàng)目成功創(chuàng)建,請(qǐng)導(dǎo)航到 dotnet new 命令創(chuàng)建的新目錄,使用 CLI 構(gòu)建并運(yùn)行項(xiàng)目,如下所示:

cd .PullRequestHub

由于可以訪(fǎng)問(wèn) .NET Core CLI,因此也可以訪(fǎng)問(wèn)要還原、運(yùn)行和構(gòu)建的命令。在運(yùn)行之前,請(qǐng)嘗試還原和構(gòu)建命令,如下所示:

dotnet restore
dotnet build

這些命令的工作方式與在 .NET Core Web 應(yīng)用程序的命令行中運(yùn)行時(shí)的工作方式相同。請(qǐng)注意,在執(zhí)行 dotnet run 命令時(shí),它實(shí)際上會(huì)在執(zhí)行應(yīng)用之前執(zhí)行還原和構(gòu)建命令 (bit.ly/2UCkEaN)?,F(xiàn)在讓我們運(yùn)行項(xiàng)目,通過(guò)在命令行輸入 dotnet run 對(duì)其進(jìn)行測(cè)試。

成功!你剛剛創(chuàng)建了第一個(gè) .NET Core WinForms 應(yīng)用程序。

運(yùn)行時(shí),將看到屏幕上出現(xiàn)一個(gè)帶有“Hello .NET Core!”文本的窗體。

在進(jìn)一步向應(yīng)用程序添加邏輯之前,讓我們花一點(diǎn)時(shí)間來(lái)討論 Visual Studio 中 WinForms 設(shè)計(jì)器視圖的當(dāng)前狀態(tài)。

設(shè)置 .NET Core WinForms 應(yīng)用的設(shè)計(jì)器

在 Visual Studio 中打開(kāi) CLI 生成的項(xiàng)目時(shí),可能會(huì)注意到缺少某些功能。最值得注意的是,目前沒(méi)有為 .NET Core WinForms 應(yīng)用程序提供設(shè)計(jì)器視圖。雖然有計(jì)劃提供此功能,但尚未完成。

幸運(yùn)的是,有一個(gè)解決方案可讓你至少在添加本機(jī)支持之前訪(fǎng)問(wèn)設(shè)計(jì)器?,F(xiàn)在,可創(chuàng)建包含 UI 文件的 .NET Framework 項(xiàng)目。

通過(guò)這種方式就可以使用設(shè)計(jì)器編輯 UI 文件,然后 .NET Core 項(xiàng)目將引用 .NET Framework 項(xiàng)目中的 UI 文件。這使你能夠利用 UI 功能,同時(shí)仍然在 .NET Core 中構(gòu)建應(yīng)用程序。

以下是我為項(xiàng)目執(zhí)行操作的方法。

除了所創(chuàng)建的 PullRequestHub 項(xiàng)目之外,還需要添加一個(gè)在 .NET Full-Framework 版本上運(yùn)行的新 WinForms 項(xiàng)目。

將此項(xiàng)目命名為 PullRequestHub.Designer。創(chuàng)建新項(xiàng)目后,從 .NET Core 項(xiàng)目中刪除 Form1 文件,只保留 Program.cs 類(lèi)。

導(dǎo)航到 PullRequestHub.Designer 并將窗體文件重命名為 PullRequestForm。

現(xiàn)在將編輯 .NET Core 項(xiàng)目文件,并添加以下代碼,將兩個(gè)項(xiàng)目中的文件關(guān)聯(lián)起來(lái)。這還將負(fù)責(zé)處理將來(lái)創(chuàng)建的任何其他窗體或資源:

<ItemGroup>
<Compile Include=”..PullRequestHub.Designer***.cs” />
</ItemGroup>

保存項(xiàng)目文件后,將看到 PullRequestForm 文件出現(xiàn)在解決方案資源管理器中,你將能夠與它們進(jìn)行交互。

如果要使用 UI 編輯器,需要確保從 .NET Core 項(xiàng)目中關(guān)閉 PullRequestForm 文件,并從 .NET Framework 項(xiàng)目中打開(kāi) PullRequestForm 文件。

更改將在兩者中進(jìn)行,但僅 .NET Framework 項(xiàng)目提供編輯器。

構(gòu)建應(yīng)用程序

讓我們開(kāi)始向應(yīng)用程序中添加一些代碼。為了從 GitHub 檢索開(kāi)放式拉取請(qǐng)求,我需要?jiǎng)?chuàng)建一個(gè) HttpClient。

這就是 .NET Core 3.0 的用武之地,因?yàn)樗峁┝藢?duì)新 HttpClientFactory 的訪(fǎng)問(wèn)權(quán)限。全框架版本中的 HttpClient 存在一些問(wèn)題,包括使用 using 語(yǔ)句創(chuàng)建客戶(hù)端的問(wèn)題。HttpClient 對(duì)象將被釋放,但底層套接字在一段時(shí)間內(nèi)不會(huì)被釋放,默認(rèn)情況下為 240 秒。如果套接字連接保持打開(kāi)狀態(tài) 240 秒,并且系統(tǒng)中的吞吐量很高,則系統(tǒng)可能會(huì)使所有空閑套接字達(dá)到飽和。發(fā)生這種情況時(shí),新請(qǐng)求必須等待套接字釋放,這可能對(duì)性能產(chǎn)生一些非常嚴(yán)重的影響。

HttpClientFactory 有助于緩解這些問(wèn)題。首先,它提供了一種在更中心位置預(yù)先配置客戶(hù)端實(shí)現(xiàn)的更簡(jiǎn)單方法。它還為你管理 HttpClients 的生命周期,因此你不會(huì)遇到前面提到的問(wèn)題。我們來(lái)了解如何在 WinForms 應(yīng)用程序中執(zhí)行此操作。

使用此新功能的最佳和最簡(jiǎn)單的方法之一是通過(guò)依賴(lài)項(xiàng)注入。依賴(lài)項(xiàng)注入,或更普遍的控制反轉(zhuǎn),是一種將依賴(lài)項(xiàng)傳遞到類(lèi)中的技術(shù)。它也是減少類(lèi)耦合和簡(jiǎn)化單元測(cè)試的絕佳方法。例如,你將看到如何在程序啟動(dòng)時(shí)創(chuàng)建 IHttpClientFactory 的實(shí)例,以便稍后在窗體中使用該對(duì)象。在以前的 .NET 版本中,這在 WinForms 中不太容易實(shí)現(xiàn),這就是使用 .NET Core 的另一個(gè)優(yōu)勢(shì)。

在 Program.cs 中,將創(chuàng)建一個(gè)名為 ConfigureServices 的方法。在本方法中,創(chuàng)建新的 ServiceCollection,以便可通過(guò)依賴(lài)項(xiàng)注入來(lái)使用服務(wù)。

需要先安裝最新的這兩個(gè) NuGet 包:

Microsoft.Extensions.DependencyInjection
Microsoft.Extensions.Http

然后添加圖 1 中所示的代碼。

這將創(chuàng)建一個(gè)要在窗體中使用的新 IHttpClientFactory。

結(jié)果會(huì)得到一個(gè)客戶(hù)端,可以顯式地使用它來(lái)處理涉及 GitHub API 的請(qǐng)求。

圖 1 創(chuàng)建新的 IHttpClientFactory

private static void ConfigureServices()
{
var services = new ServiceCollection();
services.AddHttpClient();
services.AddHttpClient(“github”, c =>
{
c.BaseAddress = new Uri(“https://api.github.com/”);
c.DefaultRequestHeaders.Add(“Accept”, “application/vnd.github.v3+json”);
c.DefaultRequestHeaders.Add(“User-Agent”, “HttpClientFactory-Sample”);
c.DefaultRequestHeaders.Add(“Accept”, “application/json”);
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
});
}

接下來(lái),需要將實(shí)際的窗體類(lèi) PullRequestForm 注冊(cè)為單一實(shí)例。在本方法的末尾處,添加以下行:

services.AddSingleton<PullRequestForm>();

然后,需要?jiǎng)?chuàng)建 ServiceProvider 的實(shí)例。在 Program.cs 類(lèi)的頂部,創(chuàng)建以下屬性:

private static IServiceProvider ServiceProvider { get; set; }

現(xiàn)在有了 ServiceProvider 屬性,請(qǐng)?jiān)?ConfigureServices 方法的末尾處添加一行來(lái)構(gòu)建 ServiceProvider,如下所示:

ServiceProvider = services.BuildServiceProvider();

最后,完整的 ConfigureServices 方法應(yīng)類(lèi)似于圖 2 中的代碼。

圖 2 ConfigureServices 方法

private static void ConfigureServices()
{
var services = new ServiceCollection();
services.AddHttpClient();
services.AddHttpClient(“github”, c =>
{
c.BaseAddress = new Uri(“https://api.github.com/”);
c.DefaultRequestHeaders.Add(“Accept”, “application/vnd.github.v3+json”);
c.DefaultRequestHeaders.Add(“User-Agent”, “HttpClientFactory-Sample”);
c.DefaultRequestHeaders.Add(“Accept”, “application/json”);
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
});
services.AddSingleton<PullRequestForm>();
ServiceProvider = services.BuildServiceProvider();
}

現(xiàn)在,需要在啟動(dòng)時(shí)將窗體與容器連接起來(lái)。

應(yīng)用程序運(yùn)行時(shí),這將調(diào)用 PullRequestForm 并提供可用的必要服務(wù)。

將 Main 方法更改為以下代碼:

[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
ConfigureServices();
Application.Run((PullRequestForm)ServiceProvider.GetService(typeof(PullRequestForm)));
}

感覺(jué)很棒!現(xiàn)在已完成所有連接。在 PullRequestForm 構(gòu)造函數(shù)中,注入剛連接好的 IHttpClientFactory 并將其分配給本地變量,如以下代碼所示:

private static HttpClient _httpClient;
public PullRequestForm(IHttpClientFactory httpClientFactory)
{
InitializeComponent();
_httpClient = httpClientFactory.CreateClient(“github”);
}

現(xiàn)在有了 HttpClient,可使用它來(lái)調(diào)用 GitHub 以檢索拉取請(qǐng)求、問(wèn)題等。這也使得后續(xù)幾個(gè)步驟略微棘手。來(lái)自 HttpClient 的調(diào)用將為異步請(qǐng)求,如果你一直在使用 WinForms,你就知道接下來(lái)該怎么做。接下來(lái)必須處理線(xiàn)程,并將調(diào)度更新發(fā)送到 UI 線(xiàn)程。

為了開(kāi)始檢索所有拉取請(qǐng)求,需在視圖中添加一個(gè)按鈕。通過(guò)這種方式,可在將來(lái)添加更多存儲(chǔ)庫(kù)或更多存儲(chǔ)庫(kù)組進(jìn)行檢查。使用連接的設(shè)計(jì)器,將按鈕拖到窗體上,并將文本重命名為“Microsoft”。

在此過(guò)程中,給按鈕取一個(gè)更具含義的名稱(chēng),如 RetrieveData_Button。需要綁定到 RetrieveData_Button_Click 事件,但需要使用此代碼將其設(shè)置為異步:

private async void RetrieveData_Button_Click(object sender, EventArgs e)
{
}

在此處,需要調(diào)用檢索開(kāi)放式 GitHub 拉取請(qǐng)求的方法。但首先,由于現(xiàn)在正在處理異步調(diào)用,因此必須連接 SynchronizationContext??赏ㄟ^(guò)添加新屬性并使用以下代碼更新構(gòu)造函數(shù)來(lái)完成此操作:

private static HttpClient _httpClient;
private readonly SynchronizationContext synchronizationContext;
public PullRequestForm(IHttpClientFactory httpClientFactory)
{
InitializeComponent();
synchronizationContext = SynchronizationContext.Current;
_httpClient = httpClientFactory.CreateClient(“github”);
}

接下來(lái),創(chuàng)建一個(gè)模型并將其命名為 PullRequestData,以便可以輕松地反序列化請(qǐng)求。相關(guān)代碼如下:

public class PullRequestData
{
public string Url { get; set; }
public string Title { get; set; }
}

最后,創(chuàng)建一個(gè)名為 GetPullRequestData 方法。在本方法中,將向 GitHub API 發(fā)出請(qǐng)求并檢索所有開(kāi)放式拉取請(qǐng)求。將反序列化 JSON 請(qǐng)求,因此請(qǐng)將最新版本的 Newtonsoft.Json 包添加到項(xiàng)目中。

代碼如下:

private async Task<List<PullRequestData>> GetPullRequestData()
{
var gitHubResponse =
await _httpClient.GetStringAsync(
$”repos/dotnet/winforms/pulls?state=open”);
var gitHubData =
JsonConvert.DeserializeObject<List<PullRequestData>>(gitHubResponse);
return gitHubData;
}

現(xiàn)在可使用 RetrieveData_Button_Click 方法調(diào)用此方法。獲得所需的數(shù)據(jù)列表后,為每個(gè)標(biāo)題創(chuàng)建標(biāo)簽列表,以便在窗體上顯示。

獲得標(biāo)簽列表后,可在 UpdateUI 方法中將它們添加到 UI 中。

圖 3 顯示了此步驟。

圖 3 從 RetrieveData_Button_Click 進(jìn)行調(diào)用

private async void RetrieveData_Button_Click(object sender, EventArgs e)
{
var pullRequestData = await GetPullRequestData();
await Task.Run(() =>
{
var labelsToAdd = new List<Label>();
var verticalSpaceBetweenLabels = 20;
var horizontalSpaceFromLeft = 10;
for (int i = 0; i < pullRequestData.Count; i++)
{
Label label = new Label();
label.Text = pullRequestData[i].Title;
label.Left = horizontalSpaceFromLeft;
label.Size = new Size(100, 10);
label.AutoSize = true;
label.Top = (i * verticalSpaceBetweenLabels);
labelsToAdd.Add(label);
}
UpdateUI(labelsToAdd);
});
}

然后,UpdateUI 方法將使用 synchronizationContext 更新 UI,如下所示:

public void UpdateUI(List<Label> labels)
{
synchronizationContext.Post(new SendOrPostCallback(o =>
{
foreach (var label in labels)
{
Controls.Add(label);
}

}), labels);

}

如果運(yùn)行應(yīng)用程序并單擊 Microsoft 按鈕,UI 將和 GitHub 上 dotnet/winforms 存儲(chǔ)庫(kù)中的所有開(kāi)放式拉取請(qǐng)求的窗體一起更新。

現(xiàn)在輪到你了。正如本文的標(biāo)題所說(shuō),為了使它成為一個(gè)真正的集中式拉取請(qǐng)求中心,讓我們更新此示例,以便從多個(gè) GitHub 存儲(chǔ)庫(kù)中進(jìn)行讀取。

這些存儲(chǔ)庫(kù)不需要來(lái)自 Microsoft 團(tuán)隊(duì),盡管觀(guān)察它們的進(jìn)程十分有趣。

例如,微服務(wù)體系結(jié)構(gòu)非常常見(jiàn),在其中你可能擁有許多組成整個(gè)系統(tǒng)的存儲(chǔ)庫(kù)。鑒于一般而言,不長(zhǎng)時(shí)間將分支和拉取請(qǐng)求單獨(dú)存儲(chǔ)是一個(gè)好主意,這樣的工具可以提高對(duì)開(kāi)放式拉取請(qǐng)求的見(jiàn)解并提高整個(gè)系統(tǒng)的質(zhì)量。

可設(shè)置一個(gè) Web 應(yīng)用,但又得擔(dān)心部署、運(yùn)行、身份驗(yàn)證等問(wèn)題。

使用 . NET Core 中的 WinForms 應(yīng)用程序,你無(wú)需擔(dān)心任何此類(lèi)問(wèn)題。

現(xiàn)在讓我們來(lái)看看使用 .NET Core 構(gòu)建 WinForms 應(yīng)用的最大優(yōu)勢(shì)之一。

打包應(yīng)用程序

過(guò)去,部署新的或更新的 WinForms 應(yīng)用程序可能會(huì)導(dǎo)致與主機(jī)上安裝的 .NET Framework 版本相關(guān)的問(wèn)題。通過(guò) .NET Core 則可以獨(dú)立部署應(yīng)用并從單個(gè)文件夾運(yùn)行應(yīng)用,而不依賴(lài)于計(jì)算機(jī)上安裝的 .NET Framework 版本。

這意味著用戶(hù)無(wú)需安裝任何內(nèi)容;他們可以?xún)H運(yùn)行應(yīng)用程序。通過(guò) .NET Core 還可以一次更新和部署一個(gè)應(yīng)用,因?yàn)槠浒姹静粫?huì)相互影響。

對(duì)于本文中的示例應(yīng)用,需要為其獨(dú)立打包。請(qǐng)注意,獨(dú)立應(yīng)用程序會(huì)更大,因?yàn)樗鼈儼?.NET Core 庫(kù)。如果要部署到安裝了 .NET Core 最新版本的計(jì)算機(jī)中,則無(wú)需獨(dú)立部署應(yīng)用。相反,可通過(guò)利用已安裝的 .NET Core 版本來(lái)減小已部署應(yīng)用的大小。當(dāng)不希望應(yīng)用程序依賴(lài)于它將運(yùn)行的環(huán)境時(shí),可使用獨(dú)立選項(xiàng)。

若要在本地打包應(yīng)用程序,需要確保在設(shè)置中啟用了開(kāi)發(fā)人員模式。嘗試運(yùn)行打包項(xiàng)目時(shí),Visual Studio 將進(jìn)行提示并提供設(shè)置的鏈接,但若要直接啟用它,請(qǐng)轉(zhuǎn)到 Windows 設(shè)置,按 Windows 徽標(biāo)鍵并搜索“設(shè)置”。在搜索框中鍵入“面向開(kāi)發(fā)人員的設(shè)置”并選擇它。將看到啟用開(kāi)發(fā)人員模式的選項(xiàng)。選擇并啟用此選項(xiàng)。

大多數(shù)情況下,如果以前打包過(guò) WinForms 應(yīng)用程序,那么創(chuàng)建獨(dú)立包的步驟則看起來(lái)比較熟悉。首先,創(chuàng)建一個(gè)新的 Windows 應(yīng)用程序打包項(xiàng)目。將新項(xiàng)目命名為 PullRequestHubPackaging。當(dāng)系統(tǒng)提示選擇目標(biāo)和最低平臺(tái)版本時(shí),請(qǐng)使用默認(rèn)值并單擊“確定”。右鍵單擊應(yīng)用程序并為 PullRequestHub 項(xiàng)目添加引用。

添加引用后,需要將 PullRequestHub 項(xiàng)目設(shè)置為入口點(diǎn)。完成后,在下次構(gòu)建時(shí)很可能會(huì)看到以下錯(cuò)誤:“如果 SelfContained 為 true,則項(xiàng)目 PullRequestHub 必須在項(xiàng)目文件中指定 RuntimeIdentifiers。”

若要修復(fù)此錯(cuò)誤,請(qǐng)編輯 PullRequestHub.csproj 文件。在打開(kāi)本項(xiàng)目文件時(shí),你會(huì)注意到使用 .NET Core 的另一個(gè)優(yōu)點(diǎn),這是因?yàn)樵擁?xiàng)目文件現(xiàn)在使用的是新的輕量級(jí)格式。在基于 .NET Framework 的 WinForms 項(xiàng)目中,項(xiàng)目文件將更詳細(xì)地包含顯式默認(rèn)值和引用,并將 NuGet 引用拆分為 packages.config 文件。新的項(xiàng)目文件格式會(huì)將包引用引入到項(xiàng)目文件中,從而可以在一個(gè)位置管理所有依賴(lài)項(xiàng)。

在本文件的第一個(gè) PropertyGroup 節(jié)點(diǎn)中,添加以下行:

<RuntimeIdentifiers>win-x86</RuntimeIdentifiers>

運(yùn)行時(shí)標(biāo)識(shí)符用于標(biāo)識(shí)運(yùn)行應(yīng)用程序的目標(biāo)平臺(tái),并由 .NET 包用來(lái)表示 NuGet 包中特定于平臺(tái)的資產(chǎn)。

添加該標(biāo)識(shí)符后,構(gòu)建就應(yīng)該成功了,可將 PullRequestHubPackaging 項(xiàng)目設(shè)置為 Visual Studio 中的啟動(dòng)項(xiàng)目。

指示項(xiàng)目是獨(dú)立的設(shè)置是 PullRequestHubPackaging.wapproj 文件中需要注意的一點(diǎn)。文件中需要注意的代碼部分如下:

<ItemGroup>
<ProjectReference Include=”..PullRequestHubPullRequestHub.csproj”>
<DesktopBridgeSelfContained>True</DesktopBridgeSelfContained>
<DesktopBridgeIdentifier>$(DesktopBridgeRuntimeIdentifier)
</DesktopBridgeIdentifier>
<Properties>SelfContained=%(DesktopBridgeSelfContained);
RuntimeIdentifier=%(DesktopBridgeIdentifier)
</Properties>
<SkipGetTargetFrameworkProperties>True
</SkipGetTargetFrameworkProperties>
</ProjectReference>
</ItemGroup>

在此處,可看到 DesktopBridgeSelfContained 選項(xiàng)已設(shè)置為 true,這使得 WinForms 應(yīng)用程序可以與 .NET Core 二進(jìn)制文件一起打包。

運(yùn)行該項(xiàng)目時(shí),它會(huì)將文件轉(zhuǎn)儲(chǔ)到“win-x86”的文件夾中,該文件夾的路徑與此類(lèi)似:

C:Your-PathPullRequestHubPullRequestHubbinx86Debugnetcoreapp3.0

在 win-x86 文件夾中你會(huì)注意到有許多 DLL,這些 DLL 包含獨(dú)立應(yīng)用運(yùn)行所需的所有文件。

你更有可能需要將應(yīng)用部署為旁載應(yīng)用程序或?qū)⑵渖陷d到 Microsoft Store。旁載將使用 appinstaller 文件進(jìn)行自動(dòng)更新。

從Visual Studio 2017 Update 15.7 開(kāi)始支持這些更新。

此外,還可以創(chuàng)建支持提交到 Microsoft Store 進(jìn)行分發(fā)的包。

Microsoft Store 隨后會(huì)處理應(yīng)用的所有代碼簽名、分發(fā)和更新。

除了這些選項(xiàng)之外,還有一些正在進(jìn)行的工作可以將應(yīng)用程序打包成單個(gè)可執(zhí)行文件,從而無(wú)需使用 DLL 填充輸出目錄。

其他優(yōu)點(diǎn)

通過(guò) .NET Core 3.0,還可以利用 C# 8.0 的功能,包括可為 null 的引用類(lèi)型、接口上的默認(rèn)實(shí)現(xiàn)、使用模式切換語(yǔ)句的改進(jìn)以及異步數(shù)據(jù)流。

若要啟用 C# 8.0,請(qǐng)打開(kāi) PullRequestHub.csproj 文件并將以下行添加到第一個(gè) PropertyGroup:

<LangVersion>8.0</LangVersion>

使用 .NET Core 和 WinForms 的另一個(gè)優(yōu)點(diǎn)是兩個(gè)項(xiàng)目均為開(kāi)源。

這使得你可以訪(fǎng)問(wèn)源代碼、提交 bug、共享反饋并成為貢獻(xiàn)者。

請(qǐng)查看 github.com/dotnet/winforms上的 WinForms 項(xiàng)目。

.NET Core 3.0 旨在為企業(yè)和公司在 WinForms 應(yīng)用程序中進(jìn)行的投資注入新的活力,而 WinForms 應(yīng)用程序會(huì)繼續(xù)保持高效、可靠且易于部署和維護(hù)。

開(kāi)發(fā)人員可以利用新的 .NET Core 特定類(lèi)(如 HttpClientFactory)、采用 C# 8.0 功能(如可為 null 的引用類(lèi)型)和打包獨(dú)立應(yīng)用程序。

還可以訪(fǎng)問(wèn) .NET Core CLI 以及 .NET Core 附帶的所有性能改進(jìn)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀(guān)點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多