K Commands 是 APS.NET 5 引出的,根據(jù)說(shuō)明知道它是加載與啟動(dòng) OWIN 組件的一個(gè)命令,那 OwinHost.exe 是什么?它其實(shí)是之前 OWIN 的實(shí)現(xiàn) Katana 項(xiàng)目中的一個(gè)東西,這個(gè)東西是什么?看一下源碼結(jié)構(gòu):
摘自 Program.cs 中的一段源代碼:
using System;using System.Collections.Generic;using System.Diagnostics.CodeAnalysis;using System.Globalization;using System.IO;using System.Linq;using System.Reflection;using Microsoft.Owin.Hosting;using Microsoft.Owin.Hosting.Services;using Microsoft.Owin.Hosting.Starter;using Microsoft.Owin.Hosting.Utilities;using OwinHost.Options;namespace OwinHost{ public static class Program { public static void RunServer(StartOptions options) { if (options == null) { return; } string boot; if (!options.Settings.TryGetValue("boot", out boot) || string.IsNullOrWhiteSpace(boot)) { options.Settings["boot"] = "Domain"; } ResolveAssembliesFromDirectory( Path.Combine(Directory.GetCurrentDirectory(), "bin")); WriteLine("Starting with " + GetDisplayUrl(options)); IServiceProvider services = ServicesFactory.Create(); var starter = services.GetService<IHostingStarter>(); IDisposable server = starter.Start(options); WriteLine("Started successfully"); WriteLine("Press Enter to exit"); Console.ReadLine(); WriteLine("Terminating."); server.Dispose(); } }}
可以看到,它其實(shí)和 Microsoft.aspNet.Hosting/Program.cs 中的配置代碼很相似,但不相同,Microsoft.AspNet.Hosting 是 OWIN Host 的所有概念實(shí)現(xiàn),而 OwinHost 只是一個(gè)控制臺(tái)啟動(dòng)程序,用來(lái)加載所有的 OWIN 組件,但它不包含任何的實(shí)現(xiàn),比如 Host 中的 Builder、Server、Startup 等一些操作,再看下面一張圖就明白了:
對(duì),沒錯(cuò),OwinHost 依賴于 Microsoft.Owin.Hosting,OwinHost 中所有的 Host 操作都在 Microsoft.Owin.Hosting 中進(jìn)行完成了,說(shuō)白了,OwinHost 沒多少東西,就是一個(gè)開啟命令,和 Microsoft.AspNet.Hosting 完全不是一個(gè)概念問(wèn)題,那 OwinHost 和 K Commands 相等嗎?其實(shí)也不相等,只是很類似,但這個(gè)類似點(diǎn)只是體現(xiàn)在加載 OWIN 組件的時(shí)候,OwinHost 的工作就是干這個(gè)的,并且只能干這個(gè),而 K Commands 卻不僅僅如此,它還包含了其他的一些命令管理,比如“gen”、“ef”等。
其他相關(guān)資料:
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注