ASP.NET5/MVC6控制台托管应用程序在MVC5中,我有一个控制台应用程序将使用Microsoft.Owin.Hosting.WebApp.Start(...)托管一堆控制器,这些控制器将从放置在外部文件夹中的程序集动态加载,并通过API调用对它们运行一些自定义初始化。这样我就可以将参数传递给在运行时确定的初始化方法(而不像维护配置文件那样麻烦)。在MVC6中,据我所知,自托管是由DNX运行时使用Microsoft.AspNet.Hosting完成的,但这都是从命令行完成的。有没有一种方法可以在C#控制台应用程序中自行托管,以便我可以保留此初始化架构?Katana的WebApp静态类已被WebHostBuilder取代,它提供了更灵活的方法:https://github.com/aspnet/Hosting/blob/dev/src/Microsoft.AspNet.Hosting/WebHostBuilder.cs。你可能在没有意识到的情况下使用过这个API,因为当你在project.json中注册一个新的web命令时,它是托管块使用的组件(例如Microsoft.AspNet.Hostingserver=Microsoft.AspNet.Server.WebListenerserver.urls=http://localhost:54540)并使用dnx(例如dnx.web)运行它:privateconststringConfigFileKey="config";私有只读IServiceProvider_serviceProvider;公共程序(IServiceProviderserviceProvider){_serviceProvider=serviceProvider;}publicvoidMain(string[]args){//允许通过--config命令行指定ini文件的位置argvartempBuilder=newConfigurationBuilder().AddCommandLine(args);vartempConfig=tempBuilder.Build();varconfigFilePath=tempConfig[ConfigFileKey]??托管Ini文件;varappBasePath=_serviceProvider.GetRequiredService().ApplicationBasePath;builder=newConfigurationBuilder(appBasePath);builder.AddIniFile(配置文件ePath,可选:真);builder.AddEnvironmentVariables();builder.AddCommandLine(args);varconfig=builder.Build();varhost=newWebHostBuilder(_serviceProvider,config).Build();使用(host.Start()){Console.WriteLine("Started");varappShutdownService=host.ApplicationServices.GetRequiredService();Console.CancelKeyPress+=(sender,eventArgs)=>{appShutdownService.RequestShutdown();//不要终止进程}}}}}https://github.com/aspnet/Hosting/blob/dev/src/Microsoft.AspNet.Hosting/Program.cs...我有一个控制台应用程序,它将使用Microsoft.Owin.Hosting.WebApp.Start(...)托管[并]将参数传递给运行时确定的初始化方法......在ASP.NET4.x中,我们使用OWIN托管在控制台中进行自托管我们直接运行MyApp.exe的应用程序。它的Main()方法调用WebApp.Start()来创建OWIN主机。我们使用IAppBuilder的实例通过appBuilder.Use()构建HTTP管道,它与appBuilder.Build()一起工作。这都在Microsoft.Owin.Hosting命名空间内。有没有一种方法可以在C#控制台应用程序中自行托管,以便我可以保留此初始化架构?在ASP.NETCorerc2中,我们使用IWebHost在控制台应用程序中自托管。(虽然OWIN启发了它,但这不是OWIN主机。)我们直接运行MyApp.exe。Main()方法创建一个新的WebHostBuilder(),我们使用它通过webHostBuilder.Use()构建HTTP管道,它与webHostBuilder.Build()链接在一起。这都在Microsoft.AspNet.Hosting命名空间内。关于Pinpoint的回答,在ASP.NETCorerc1中我们需要运行dnx.exe而不是直接运行我们的应用程序。WebHostBuilder的工作隐藏在dnx.exe可执行文件中。Dnx.exe也会启动我们的应用程序。我们的应用程序的Main()方法调用WebApplication.Run(),之后我们使用IApplicationBuilder的实例通过调用appBuilder.Use()将中间件添加到HTTP管道。我们的应用程序和dnx.exe共同负责创建/配置主机。这令人费解,我很高兴rc2改变了它。我认为在rc1中,WebApp.Start()的OWIN等效项是WebApplication.Run()。ASP.NET4.xASP.NETCorerc1ASP.NETCorerc2不适用Dnx.exe不适用MyApp.exeMyApp.dllMyApp.exeMain(args)Main(args)Main(args)WebApp.Start()WebApplication.Run(args)N/AappBuilder.Use()appBuilder.Use()webHostBuilder.Use()appBuilder.Build()N/AwebHostBuilder.Build()一些参考http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-apihttps://msdn.microsoft.com/en-us/library/microsoft.owin.hosting。webapp%28v=vs.113%29.aspx以上是C#学习教程:ASP.NET5/MVC6ConsoleHostingApplication分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多加关注——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
