Fra*_*nco 4 c# asp.net-core-mvc asp.net-core
我正在一个MVC 6项目中工作,并将我的Startup.cs类从Web项目移动到Infraestructure项目,这是一个类Libary包.我还在Infraestructure/project.son中添加了类所需的包(与Web项目完全相同):
"Microsoft.AspNet.Diagnostics": "1.0.0-beta8",
"Microsoft.AspNet.IISPlatformHandler": "1.0.0-beta8",
"Microsoft.AspNet.Mvc": "6.0.0-beta8",
"Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-beta8",
"Microsoft.AspNet.Server.Kestrel": "1.0.0-beta8",
"Microsoft.AspNet.StaticFiles": "1.0.0-beta8",
"Microsoft.AspNet.Tooling.Razor": "1.0.0-beta8",
"Microsoft.Framework.Configuration.Json": "1.0.0-beta8",
"Microsoft.Framework.Logging": "1.0.0-beta8",
"Microsoft.Framework.Logging.Console": "1.0.0-beta8",
"Microsoft.Framework.Logging.Debug": "1.0.0-beta8",
"Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-beta8"
Run Code Online (Sandbox Code Playgroud)
但是,当我运行应用程序时,获得以下异常:
A type named 'StartupDevelopment' or 'Startup' could not be found in assembly 'UI.Web'.
at Microsoft.AspNet.Hosting.Startup.StartupLoader.FindStartupType
Run Code Online (Sandbox Code Playgroud)
我没有找到任何方法将Startup.cs位置指定给我的另一个程序集.
ASP .Net 5使用一个新的托管框架,它将寻找一个名为Startup的类(或Startup开发+环境,如在StartupDevelopment中,如文档中所述).
这个托管框架使用该类Microsoft.AspNet.Hosting.WebHostBuilder
来创建IHostingEngine
,但更有趣的是允许指定应该找到此类的程序集.
指定此值的过程取决于您使用的框架版本.对于beta7及更早版本,它还取决于您是使用IIS还是使用dnx命令来运行应用程序.
BETA8
beta8的最新变化之一与IIS Hosting模型完全相关.
这意味着在beta8中设置配置值Hosting:Application的过程将是相同的,无论您使用的是IIS还是使用dnx命令:
您可以直接在project.json中为dnx命令行定义添加一个参数:
"commands": {
"web": "Microsoft.AspNet.Server.Kestrel --Hosting:Application ClassLibrary1",
},
Run Code Online (Sandbox Code Playgroud)您可以在dnx命令行定义中添加一个config参数,该参数指向一个json文件,您可以在其中指定用于启动托管的参数:
//project.json
"commands": {
"web": "Microsoft.AspNet.Server.Kestrel --config hosting.json",
},
//hosting.json
{
"Hosting:Application": "ClassLibrary1",
}
Run Code Online (Sandbox Code Playgroud)如果未指定配置文件,框架仍将在基础文件夹中查找名为Microsoft.AspNet.Hosting.json的文件.您可以创建该文件并在那里指定启动类.
BETA 7
在beta7及更早版本中,指定此配置值的过程因您使用IIS或dnx命令而异.
使用dnx命令
这与我在beta8部分中解释的方式非常相似,除了框架所期望的托管配置文件是.ini文件.(如果未提供,则默认情况下不会查找Microsoft.AspNet.Hosting.json文件)
基本上,如果您打开project.json,您将看到一个名为web的命令,如下所示:
"commands": {
"web": "Microsoft.AspNet.Hosting --config hosting.ini"
},
Run Code Online (Sandbox Code Playgroud)
您有2个主要选项来添加Hosting:Application
配置键:
将参数直接添加到命令定义中
"commands": {
"web": "Microsoft.AspNet.Hosting --config hosting.ini --Hosting:Application ClassLibrary1"
},
Run Code Online (Sandbox Code Playgroud)将其添加到hosting.ini文件:
server=Microsoft.AspNet.Server.WebListener
server.urls=http://localhost:5000
Hosting:Application=ClassLibrary1
Run Code Online (Sandbox Code Playgroud)通过查看函数WebHostBuilder
使用的类,您可以更好地理解它的工作方式Program.Main
Microsoft.AspNet.Hosting
现在,您需要告诉VS运行命令而不是IIS.您可以通过选择默认运行操作来执行以下操作:
如果要使用Web命令而不是IISExpress,则可能需要选择" 启动URL"操作,输入站点的根URL(该URL应与您在hosting.ini文件中定义的URL匹配).
您还可以选择添加命令行参数,因此您可以在此处定义启动程序集输入--Hosting:Application=ClassLibrary1
.(虽然在这里定义它意味着它只会在从visual studio启动应用程序时应用)
这些设置将保存到项目launchSettings.json
的" 属性"文件夹中的文件中.(将在您第一次更改默认设置时创建)当然您也可以手动修改此文件.
使用web命令运行/调试项目时,您将看到打开的dnx窗口,浏览器已启动(如果您在Web配置文件中选择了启动URL),则使用指定程序集中的Startup类.例如,我将Startup移动到名为ClassLibrary1的项目:
使用IISExpress
由于这仍然使用旧的Helios托管组件,因此该过程与使用dnx命令时不同.
我挖用于开始使用IISExpress应用程序的代码了一下,我发现它是用RuntimeHttpApplication.ApplicationStart
在组装Microsoft.AspNet.Loader.IIS
.
Microsoft.AspNet.Hosting
,更具体地说是创建它WebHostBuilder
,调用它的Build
方法来获取IHostingEngine
并最终调用Start
引擎.有趣的是,提供给WebHostBuilder
can 的配置包括一个名为Microsoft.AspNet.Hosting.ini的文件,该文件必须在网站的根路径中找到.(因为它正在寻找使用的文件IHttpApplication.MapPath("/Microsoft.AspNet.Hosting.ini")
).
这意味着您可以在应用程序的wwwroot文件夹中创建名为Microsoft.AspNet.Hosting.ini(不区分大小写)的文件,其中包含如下所示的单行:
Hosting:Application=ClassLibrary1
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3319 次 |
最近记录: |