主頁 > .NET開發 > 春風十里不如你,全新Windows UI 3(WinUI 3) 的第一個實作Project Reunion 0.5

春風十里不如你,全新Windows UI 3(WinUI 3) 的第一個實作Project Reunion 0.5

2021-04-19 06:04:41 .NET開發

什么是WinUI

Windows UI庫 (WinUI) 是適用于 Windows 桌面應用程式和 UWP 應用程式的本機用戶體驗 (UX) 框架,

WinUI is a user interface layer that contains modern controls and styles for building Windows apps. As the native UI layer in Windows it embodies Fluent Design, giving each Windows app the polished feel that customers expect.

?WinUI是一個用戶界面層,包含用于構建Windows應用的現代控制元件和樣式,??作為Windows中的原生UI層,它體現了??流暢的設計??,為每個Windows應用提供了客戶所期望的拋光感覺,?

通俗一點理解,WinUIUWP的UI層從Windows SDK的其它部分分離,并將從Windows轉移到Nuget,現在建一個C++C#(.NET 5)程式,再從Nuget上裝個WinUI 3的包套個UI層,一個基于Fluent Design,觸摸友好,性能無與倫比的應用程式就誕生了,

什么是WinUI 3

Windows UI庫(WinUI)3是用于構建新式Windows應用的原生用戶體驗(UX)平臺,WinUI 3的此預覽版既適用于桌面/Win32應用,也適用于UWP應用,并且包含VisualStudio專案模板和NuGet包,前者有助于你開始使用基于WinUI的用戶界面構建應用,后者包含WinUI庫,

從下圖中,可以看出UI Framework技術的演進:

1992年的MFC -> 2002年的WinForms -> 2006年的WPF -> 2012年的UWP+Win UI2 Library,最終迎來了我們今天的主角WinUI 3(3rd generation of WinUI)

從WinUI 2到WinUI 3:

WinUI 2.x可以在UWP應用程式中使用,并可通過XAML Islands納入到新的或現有的桌面應用程式中,

WinUI 3 Project Reunion 0.5WinUI 3的第一個穩定的支持版本, 利用此版本的WinUI 3,可創建生產應用并將其發布到Microsoft Store

WinUI 3路線圖

控制元件和特性

  • * Coming to a future version of WinUI 3.
  • ** Work in progress.
兼容性/特性 WinUI 3 UWP XAML & WinUI 2 WPF WinForms MFC
Windows app types supported UWP (Preview) and Win32 UWP Win32 Win32 Win32
Windows versions supported Windows 10 (1809+) Windows 10 (1703+) Windows XP or higher Windows XP or higher Windows XP or higher
Supported on all Windows device families √*
Native C/C++
.NET 5 Support
WebView2 (Chromium-based engine) √** √**
Built-in Fluent Design controls
Built-in support for modern input (e.g. touch, pen, gamepad*)
Uses latest DirectX version for graphics performance
High performance data binding (x:Bind)
Input Validation

WinUI 3 - Project Reunion 0.5

WinUI 3-ProjectReunion 0.5預覽版是WinUI 3的第一個版本,在ProjectReunion包中提供,除了這項更改之外,此預覽版本還包含一些關鍵的bug修復、更高的穩定性以及其他一些常規改進,

WinUI 3預覽版用于早期評估以及從開發人員社區收集反饋, 它應該用于生產應用,
我們預計將在3月下旬發布Project Reunion 0.5,其中包含WinUI 3的第一個穩定受支持版本,

Project Reunion - Calling all Windows apps

Project Reunion 是一組新的開發人員組件和工具,它們代表著 Windows 應用開發平臺的下一步發展, Project Reunion 提供了一組統一的 API 和工具,各種目標 Windows 10 OS 版本上的任何桌面應用都能夠一致地使用它們,
Project Reunion 不會替代現有的桌面 Windows 應用平臺和框架,例如 .NET(包括 Windows 表單和 WPF)和 C++/Win32, 而是通過一組通用的 API 和工具(開發人員可以在這些平臺中使用)來對這些現有平臺進行補充,

  • https://github.com/microsoft/ProjectReunion

在生產環境中,支持在 MSIX 打包桌面應用(C#/.NET 5 或 C++/Win32)中使用 Project Reunion 0.5, 可將使用 Project Reunion 0.5 的打包桌面應用發布到 Microsoft Store, 對于 UWP 應用,Project Reunion 0.5 僅作為預覽版提供, 生產環境中使用的 UWP 應用不支持此版本,

Project Reunion 0.5 包含以下可在應用中使用的 API 和組件集

組件 說明
WindowsUI庫3 WindowsUI庫(WinUI)3是適用于Windows應用的下一代Windows用戶體驗(UX)平臺, 此版本包含VisualStudio專案模板和NuGet包,前者有助于你開始使用基于WinUI的用戶界面構建應用,后者包含WinUI庫,
使用MRTCore管理資源 MRTCore提供API來加載和管理你的應用所使用的資源, MRTCore是新式 Windows資源管理系統的簡化版本,
使用DWriteCore呈現文本 通過DWriteCore,你可以獲取用于呈現文本的所有當前DirectWrite功能,包括與設備無關的文本布局系統、硬體加速文本、多格式文本和廣泛的語言支持,

面向Windows開發人員的Project Reunion優勢

Project Reunion提供了各種Windows API,其實作與OS分離,并通過NuGet包發布給開發人員,Project Reunion并不打算替換Windows SDK,Windows SDK將繼續按原樣作業,并且Windows的許多核心組件將通過API不斷改進,這些API通過OS和Windows SDK版本發布,建議開發人員按照自己的進度采用Project Reunion,

在不同的桌面應用平臺中實作統一的API圖面

想要創建桌面Windows應用的開發人員必須在多個應用平臺和框架之間進行選擇,盡管每個平臺都提供了許多可供使用其他平臺構建的應用使用的功能和API,但是某些功能和API僅供特定平臺使用,Project Reunion統一了所有桌面Windows 10應用對Windows API的訪問,無論選擇哪種應用模型,你都可以訪問ProjectReunion中提供的同一組Windows API,
隨著時間的推移,我們計劃對Project Reunion進行進一步的投資,以減少不同應用模型之間的差異,Project Reunion將同時提供WinRT API和本機CAPI,

在多個Windows 10版本中實作一致的支持

隨著Windows API隨新OS版本的發展而不斷發展,開發人員必須使用版本自適應代碼等技術來解決版本中的所有差異,以吸引其應用程式受眾,這可能會增加代碼和開發體驗的復雜性,

Project Reunion API適用于Windows 10版本1809以及Windows 10的所有更高版本,這意味著,只要你的客戶使用的是Windows 10版本1809或任何更高版本,就可以在新的Project Reunion API和功能發布后立即使用,而無需撰寫版本自適應代碼,

加快發布節奏

新的Windows API和功能通常與每年以一次或兩次的節奏發布的OS版本相關,Project Reunion將以更快的節奏發布更新,使你能夠在創建Windows開發平臺后更早、更快地訪問這些創新,

ASTA到STA執行緒模型

如果要將代碼從現有UWP應用遷移到使用Project Reunion的新C#/.NET5或C++/Win32/WinUI3專案,請注意,新專案使用單執行緒單元(STA)執行緒模型,而不是UWP應用使用的應用程式STA(ASTA)執行緒模型,如果代碼采用ASTA執行緒模型的非可重入行為,則代碼可能不會按預期方式運行,

WinUI 3控制元件庫

查看WinUI 3控制元件庫(以前稱為 XAML控制元件庫 - WinUI 3版本)以獲取示例應用,該示例應用包含屬于WinUI 3 Project Reunion 0.5的所有控制元件和功能,

git clone --single-branch --branch winui3 https://github.com/microsoft/Xaml-Controls-Gallery.git
git checkout winui3

開發環境要求

1. 確保開發計算機上已安裝Windows 10版本1809(內部版本17763)或更高版本的OS,

2. 如果尚未安裝Visual Studio 2019版本16.10預覽版(或更高版本),請先安裝,

1)安裝Visual Studio時,必須包含以下組件:

  • 在安裝對話框的“作業負載”選項卡上,確保選擇了“通用 Windows 平臺開發”,
  • 在安裝對話框的“單個組件”選項卡上,確保在“SDK、庫和框架”部分選擇了Windows 10 SDK(10.0.19041.0),

2)要構建.NET應用,還必須包含以下組件:

  • 在安裝對話框的“作業負載”選項卡上,確保選擇了“.NET桌面開發”,

3)要構建C++應用,還必須包含以下組件:

  • 在安裝對話框的“作業負載”選項卡上,確保選擇了“C++桌面開發”,
  • 在安裝對話框右側的“安裝詳細資訊”窗格中,確保在“通用Windows平臺開發”部分選擇了“C++(v142)通用Windows平臺工具”可選組件,

3. 如果以前安裝了VisualStudio的WinUI3預覽版擴展,請卸載該擴展,

4. 請確保系統中已為正式NuGet服務索引啟用了NuGet包源https://api.nuget.org/v3/index.json

a. 在VisualStudio中,選擇"工具""->NuGet包管理器->包管理器設定"以打開"選項"對話框,

b. 在"選項"對話框的左窗格中,選擇"包源"選項卡,并確保將指向的nuget.org的包源https://api.nuget.org/v3/index.json作為源URL,

5. 下載并安裝適用于VisualStudio的專案Project Reunion 0.5擴展,擴展有兩個版本:一個用于桌面(c#/.NET5或c++/WinRT)應用,另一個用于UWP應用,

Project Reunion 0.5 發行版有兩個可用的 Visual Studio 擴展:Project Reunion VSIX 和 Project Reunion 預覽 VSIX , Project Reunion VSIX 包含可用于生成 MSIX 打包桌面生產應用的專案模板, Project Reunion 預覽 VSIX 包含可用于生成 MSIX 打包桌面應用或 UWP 應用的實驗性專案模板,

若要在desktop中使用Project Reunion(c#/.NET5或c++/WinRT)應用:

  • 在VisualStudio2019中,單擊“擴展”>“管理擴展”,搜索Project Reunion,然后安裝Project Reunion擴展,
  • 或者,可以直接從Visual Studio Marketplace下載并安裝專案Project Reunion 0.5擴展,

若要在UWP應用中使用Project Reunion,你必須安裝不支持在生產環境中使用的擴展預覽版本:

  • 卸載專案的任何現有版本,
  • 在VisualStudio2019中,單擊"擴展"">管理擴展",然后單擊左下角的"更改擴展設定",安裝舊版本之前,請關閉為所有用戶安裝的包的自動更新,
  • 下載并安裝專案Project Reunion 0.5預覽擴展,

安裝完成之后,我們新建專案就能看到關于WinUI 3的新專案模板了,

6. 若要在Visual Studio 2019 16.10 Preview中使用WinUI 3工具(如"實時可視化樹"、"熱多載"和"實時屬性資源管理器"),必須使用Visual Studio預覽功能啟用WinUI 3工具,

  1. Navigate to the Preview Features page by going to Tools -> Options -> Environment -> Preview Features
  2. Click on "Enable UI Debugging Tooling for WinUI 3 Projects"
  3. Click on OK

7. 若要接收來自最新穩定版本的專案Project Reunion 0.5的所有修補程式,需要將.NET SDK顯式設定為最新版本,為此,請將以下項組添加到.csproj檔案中,并保存專案,

<ItemGroup>            
    <FrameworkReference Update="Microsoft.Windows.SDK.NET.Ref" RuntimeFrameworkVersion="10.0.18362.16" />
    <FrameworkReference Update="Microsoft.Windows.SDK.NET.Ref" TargetingPackVersion="10.0.18362.16" />
</ItemGroup>

8. 如果你在使用擴展應用Reshaper,建議最好更新到最新版為好

  • JetBrains.dotUltimate.2021.1.1.exe

創建使用Project Reunion的新專案

適用于Visual Studio 2019(包含適用于"桌面應用"和"UWP應用的預覽擴展"的擴展的專案"0.5擴展")提供使用基于WinUI 3的UI層生成專案的專案模板,并提供對所有其他專案的所有其他Api的訪問權限,

支持在生產環境中使用的桌面 (c #/.NET 5 和 c + +/WinRT) 專案模板, UWP 專案模板僅作為開發人員預覽版提供,不能用于生成適用于生產環境的應用,

創建專案后,除了桌面和 UWP 應用常用的所有其他 Windows 和 .NET API 之外,你還可以使用以下 Project Reunion API 和組件

  • Windows UI 庫 3: https://docs.microsoft.com/zh-cn/windows/apps/winui/winui3/
  • 使用 MRT Core 管理資源: https://docs.microsoft.com/zh-cn/windows/apps/project-reunion/mrtcore/mrtcore-overview
  • 使用 DWriteCore 呈現文本: https://docs.microsoft.com/zh-cn/windows/apps/project-reunion/dwritecore

創建適用于C#和.NET 5的WinUI 3桌面應用

1. 打開Visual Studio 2019 Preview 16.10,選擇創建新專案

2. 選擇一個基于WinUI 3桌面的空白模板,

3. 輸入專案名字demoDesktopInWinUi3,點擊創建按鈕,

4. 在下面的對話框中,將“目標版本”設定為Windows 10 版本 2004(內部版本 19041),并將“最低版本”設定為Windows 10 版本 1809(內部版本 17763),然后單擊“確定” ,

因為WinUI框架最低要求1809版本的Windows10,

5. 接下來,很快會創建好解決方案和兩個對應的專案,其中,

  • 專案名稱(桌面):此專案包含應用的代碼,App.xaml檔案和App.xaml.cs和代碼隱藏檔案定義了一個Application類,它表示你的應用實體,MainWindow.xaml檔案和MainWindow.xaml.cs代碼隱藏檔案定義了一個MainWindow類,它表示你的應用顯示的主視窗,這些類派生自WinUI提供的Microsoft.UI.Xaml命名空間中的型別,

  • 專案名稱(程式包):這是一個Windows 應用程式打包專案,已配置該專案以將應用生成到MSIX包中, 這提供了一種新式部署體驗、通過包擴展與Windows 10功能集成的功能以及更多其他功能, 此專案包含應用的程式包清單,默認情況下它是你的解決方案的啟動專案

6. 若要向應用專案中添加新項,請在解決方案資源管理器中右鍵單擊“專案名稱(桌面)”專案節點,然后選擇“添加” -> “新項”, 在“添加新項”對話框中,選擇“WinUI”選項卡,選擇要添加的項,然后單擊“添加”,

7. 生成并運行解決方案,確認應用運行時不會出錯,

第一次編譯,就遇到一個報錯,This version of Project Reunion requires WinRT.Runtime.dll version 1.2 or greater,差點慌了,

根據微軟給的提示,就兩條路,要么升級.Net SDK到v5.0.6版本,我查了下我自己的,才v5.0.3,我還以為真的有新版本,結果到下載頁一看,傻眼了,最新版不也就才到v5.0.5,哪來的v5.0.6,差點走偏,

后來,突然反映過來,這個關于Microsoft.Windows.SDK.NET.Ref FrameworkReference的提示很眼熟,哦,原來就是前面提到的開發環境中第7點,果然就是它,那肯定就靠你了,大兄弟,

用Visual Studio Code打開當前目錄,找到“專案名稱(桌面)”專案的.csproj,在ItemGroup節點中,插入:

    <FrameworkReference Update="Microsoft.Windows.SDK.NET.Ref" RuntimeFrameworkVersion="10.0.18362.16" />
    <FrameworkReference Update="Microsoft.Windows.SDK.NET.Ref" TargetingPackVersion="10.0.18362.16" />

保存后,回到專案一看,重新生成所有,完事,就這么好了,

8. 廢話少說,Ctrl+F5,運行吧,

構建基本的WinUI 3桌面應用

應用程式解決方案

默認情況下,該解決方案包含兩個專案:應用程式本身以及用于創建.msix應用包的另一個專案,

當前需要MSIX應用包才能將使用Project Reunion 0.5的應用部署到其他計算機,但是,未來版本的Project Reunion將支持部署未打包應用,

應用程式專案

雙擊應用程式專案檔案(或右鍵單擊并選擇“編輯專案檔案”),這樣便會在XML文本編輯器中打開該檔案,

我們可以看到TargetFramework是指定為net5.0-windows10.0.19041了,今后這是.NET的主要實作,

還有,ItemGroup節點下,各種Project Reunion功能的NuGet PackageReference元素,包括WinUI

MainWindow.xaml檔案

XAML Window類已擴展為支持桌面視窗,從而轉換為UWP和桌面應用模型所使用的每個低級別視窗實作的抽象, 具體而言,UWP使用CoreWindow,而Win32使用視窗句柄(或稱HWND)和相應的Win32 API

從托管的托管C#/.NET 5應用呼叫原生函式

在解決方案上右鍵,選擇管理解決方案的Nuget包,搜索PInvoke.User32,將PInvoke.User32安裝到專案名稱(桌面)中,

前往App.xaml.cs中,定義MainWindowWindowHandle接收當前程式的句柄,在OnLaunched函式中獲取當前程式句柄,

若要獲取視窗句柄,請使用GetActiveWindow方法, 此方法回傳當前活動視窗的視窗句柄(在激活目標視窗之后呼叫此方法),

/// <summary>
/// Invoked when the application is launched normally by the end user.  Other entry points
/// will be used such as when the application is launched to open a specific file.
/// </summary>
/// <param name="args">Details about the launch request and process.</param>
protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args)
{
    m_window = new MainWindow();
    m_window.Activate();

    m_windowhandle = PInvoke.User32.GetActiveWindow();
}

private Window m_window;

IntPtr m_windowhandle;
public IntPtr MainWindowWindowHandle { get { return m_windowhandle; } }

然后前往MainWindow.xaml.cs中,找到myButton_Click事件,追加邏輯,通過呼叫原生函式來實作當前表單的最大化動作,

private void myButton_Click(object sender, RoutedEventArgs e)
{
    myButton.Content = "Clicked";

    IntPtr hwnd = (App.Current as App).MainWindowWindowHandle;
    PInvoke.User32.ShowWindow(hwnd, PInvoke.User32.WindowShowStyle.SW_MAXIMIZE);
}

編譯并運行應用,按“單擊我”按鈕,應用視窗應最大化,

完全信任權限模式運行桌面應用

WinUI 3提供了一種功能,使應用程式能夠在AppContainer的安全沙盒以外以“完全信任權限”運行,

在UWP應用的時候,我們總是會默認以受限制的方式運行,而基于WinUI 3的不會,接下來的舉個例子:

MainWindow.xaml檔案的內容改為:

<StackPanel 
    Orientation="Horizontal" 
    HorizontalAlignment="Center" 
    VerticalAlignment="Center">
    <Button x:Name="myButton" Click="myButton_Click">Click Me</Button>
    <ContentDialog x:Name="contentDialog" CloseButtonText="Close">
        <StackPanel>
            <TextBlock Name="cdTextBlock"/>
        </StackPanel>
    </ContentDialog>
</StackPanel>

然后前往MainWindow.xaml.cs中,找到myButton_Click事件,追加邏輯,從System.Diagnostics呼叫.NET API以獲取當前行程中加載的模塊,回圈訪問Process.Modules物件中的每個ProcessModule

private async void MyButton_Click(object sender, RoutedEventArgs e)
{
    myButton.Content = "Clicked";

    var description = new System.Text.StringBuilder();
    var process = System.Diagnostics.Process.GetCurrentProcess();
    foreach (System.Diagnostics.ProcessModule module in process.Modules)
    {
        description.AppendLine(module.FileName);
    }

    cdTextBlock.Text = description.ToString();
    await contentDialog.ShowAsync();
}

編譯并運行應用,按“單擊我”按鈕,對話框應顯示行程串列,

參考

  • WinUI - The modern native UI platform of Windows.
  • About WinUI
  • Windows UI Library Roadmap
  • Windows UI 庫 3 - Project Reunion 0.5 預覽版(2021 年 3 月)發行說明
  • https://github.com/microsoft/ProjectReunion
  • Announcing Project Reunion 0.5!
  • Project Reunion 0.5 - Available now!
  • 使用 Project Reunion 0.5 構建桌面 Windows 應用
  • Project Reunion Roadmap
  • Project Reunion 入門
  • 部署使用專案配置的應用
  • https://www.jetbrains.com/resharper/
  • Fluent Design System
  • Visual Studio 2019 v16.10 Preview 發行說明
  • Visual Studio 2019 版本 16.10 預覽版 2
  • 適用于桌面應用的 WinUI 3 入門
  • 生成基本的 WinUI 3 - Project Reunion 0.5 桌面應用
  • WinUI 3 控制元件庫
  • Visual Studio 中的 WinUI 3 專案模板
  • Download .NET 5.0
  • What's new in .NET 5
  • Enterprise development futures: Project Reunion
  • WinUI 3 試玩報告

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/277601.html

標籤:.NET技术

上一篇:使用VS Code從零開始開發除錯.NET 5

下一篇:后續來啦:Winform/WPF中快速搭建日志面板

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • WebAPI簡介

    Web體系結構: 有三個核心:資源(resource),URL(統一資源識別符號)和表示 他們的關系是這樣的:一個資源由一個URL進行標識,HTTP客戶端使用URL定位資源,表示是從資源回傳資料,媒體型別是資源回傳的資料格式。 接下來我們說下HTTP. HTTP協議的系統是一種無狀態的方式,使用請求/ ......

    uj5u.com 2020-09-09 22:07:47 more
  • asp.net core 3.1 入口:Program.cs中的Main函式

    本文分析Program.cs 中Main()函式中代碼的運行順序分析asp.net core程式的啟動,重點不是剖析原始碼,而是理清程式開始時執行的順序。到呼叫了哪些實體,哪些法方。asp.net core 3.1 的程式入口在專案Program.cs檔案里,如下。ususing System; us ......

    uj5u.com 2020-09-09 22:07:49 more
  • asp.net網站作為websocket服務端的應用該如何寫

    最近被websocket的一個問題困擾了很久,有一個需求是在web網站中搭建websocket服務。客戶端通過網頁與服務器建立連接,然后服務器根據ip給客戶端網頁發送資訊。 其實,這個需求并不難,只是剛開始對websocket的內容不太了解。上網搜索了一下,有通過asp.net core 實作的、有 ......

    uj5u.com 2020-09-09 22:08:02 more
  • ASP.NET 開源匯入匯出庫Magicodes.IE Docker中使用

    Magicodes.IE在Docker中使用 更新歷史 2019.02.13 【Nuget】版本更新到2.0.2 【匯入】修復單列匯入的Bug,單元測驗“OneColumnImporter_Test”。問題見(https://github.com/dotnetcore/Magicodes.IE/is ......

    uj5u.com 2020-09-09 22:08:05 more
  • 在webform中使用ajax

    如果你用過Asp.net webform, 說明你也算是.NET 開發的老兵了。WEBform應該是2011 2013左右,當時還用visual studio 2005、 visual studio 2008。后來基本都用的是MVC。 如果是新開發的專案,估計沒人會用webform技術。但是有些舊版 ......

    uj5u.com 2020-09-09 22:08:50 more
  • iis添加asp.net網站,訪問提示:由于擴展配置問題而無法提供您請求的

    今天在iis服務器配置asp.net網站,遇到一個問題,記錄一下: 問題:由于擴展配置問題而無法提供您請求的頁面。如果該頁面是腳本,請添加處理程式。如果應下載檔案,請添加 MIME 映射。 WindowServer2012服務器,添加角色安裝完.netframework和iis之后,運行aspx頁面 ......

    uj5u.com 2020-09-09 22:10:00 more
  • WebAPI-處理架構

    帶著問題去思考,大家好! 問題1:HTTP請求和回傳相應的HTTP回應資訊之間發生了什么? 1:首先是最底層,托管層,位于WebAPI和底層HTTP堆疊之間 2:其次是 訊息處理程式管道層,這里比如日志和快取。OWIN的參考是將訊息處理程式管道的一些功能下移到堆疊下端的OWIN中間件了。 3:控制器處理 ......

    uj5u.com 2020-09-09 22:11:13 more
  • 微信門戶開發框架-使用指導說明書

    微信門戶應用管理系統,采用基于 MVC + Bootstrap + Ajax + Enterprise Library的技術路線,界面層采用Boostrap + Metronic組合的前端框架,資料訪問層支持Oracle、SQLServer、MySQL、PostgreSQL等資料庫。框架以MVC5,... ......

    uj5u.com 2020-09-09 22:15:18 more
  • WebAPI-HTTP編程模型

    帶著問題去思考,大家好!它是什么?它包含什么?它能干什么? 訊息 HTTP編程模型的核心就是訊息抽象,表示為:HttPRequestMessage,HttpResponseMessage.用于客戶端和服務端之間交換請求和回應訊息。 HttpMethod類包含了一組靜態屬性: private stat ......

    uj5u.com 2020-09-09 22:15:23 more
  • 部署WebApi隨筆

    一、跨域 NuGet參考Microsoft.AspNet.WebApi.Cors WebApiConfig.cs中配置: // Web API 配置和服務 config.EnableCors(new EnableCorsAttribute("*", "*", "*")); 二、清除默認回傳XML格式 ......

    uj5u.com 2020-09-09 22:15:48 more
最新发布
  • C#多執行緒學習(二) 如何操縱一個執行緒

    <a href="https://www.cnblogs.com/x-zhi/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2943582/20220801082530.png" alt="" /></...

    uj5u.com 2023-04-19 09:17:20 more
  • C#多執行緒學習(二) 如何操縱一個執行緒

    C#多執行緒學習(二) 如何操縱一個執行緒 執行緒學習第一篇:C#多執行緒學習(一) 多執行緒的相關概念 下面我們就動手來創建一個執行緒,使用Thread類創建執行緒時,只需提供執行緒入口即可。(執行緒入口使程式知道該讓這個執行緒干什么事) 在C#中,執行緒入口是通過ThreadStart代理(delegate)來提供的 ......

    uj5u.com 2023-04-19 09:16:49 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    <a href="https://www.cnblogs.com/huangxincheng/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/214741/20200614104537.png" alt="" /&g...

    uj5u.com 2023-04-18 08:39:04 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    一:背景 1. 講故事 前段時間協助訓練營里的一位朋友分析了一個程式卡死的問題,回過頭來看這個案例比較經典,這篇稍微整理一下供后來者少踩坑吧。 二:WinDbg 分析 1. 為什么會卡死 因為是表單程式,理所當然就是看主執行緒此時正在做什么? 可以用 ~0s ; k 看一下便知。 0:000> k # ......

    uj5u.com 2023-04-18 08:33:10 more
  • SignalR, No Connection with that ID,IIS

    <a href="https://www.cnblogs.com/smartstar/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/u36196.jpg" alt="" /></a>...

    uj5u.com 2023-03-30 17:21:52 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:15:33 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:13:31 more
  • C#遍歷指定檔案夾中所有檔案的3種方法

    <a href="https://www.cnblogs.com/xbhp/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/957602/20230310105611.png" alt="" /></a&...

    uj5u.com 2023-03-27 14:46:55 more
  • C#/VB.NET:如何將PDF轉為PDF/A

    <a href="https://www.cnblogs.com/Carina-baby/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2859233/20220427162558.png" alt="" />...

    uj5u.com 2023-03-27 14:46:35 more
  • 武裝你的WEBAPI-OData聚合查詢

    <a href="https://www.cnblogs.com/podolski/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/616093/20140323000327.png" alt="" /><...

    uj5u.com 2023-03-27 14:46:16 more