
问题
创建一个不包含任何功能的空项目,即空壳。
解决方案
第一步用VisualStudio2017创建一个空的Asp.net core项目
- File>New>Project
- .Net Core -> Asp.net Core Web Application,填写文件夹位置和项目名称,点击OK
- 选择Empty,点击OK
接下来从Program.cs 和 Startup.cs移出代码像下面的代码(保留必要的命名空间)
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup()
.Build();
}
public class Startup
{
public Startup(
IHostingEnvironment env,
ILoggerFactory loggerFactory,
IConfiguration config)
{
}
public void ConfigureServices(
IServiceCollection services)
{
// setup dependency injection in service container
}
public void Configure(
IApplicationBuilder app,
IHostingEnvironment env)
{
// setup request pipeline using middleware
}
}
讨论
在Visual Studio 2017中,用空项目模板创建一个项目包含Program.cs 和 Startup.cs两个类
Program.cs
就像控制台一样,public static void Main() 是Asp.net core的开始点
我们搭建一个Host 处理服务请求,Kestrel 使用CreateDefaultBuilder()来配置内容
- Kestrel: 跨平台服务宿主
- Root: 使用web项目根目录作为根内容目录
- IIS: 作为反向代理服务器
- Startup: 入口类,架起配置、服务和管道。
- Configuration: 添加 appsettings.json和环境变量到IConfiguration,见下文的依赖注入。
- Logging: 添加一个控制台和debug日志Providers。
一旦配置完成,我们Build() 和 Run()程序指向主线程并阻塞,宿主开始监听服务请求。
当设置WebHostBuilder
时,你可以通过UseSetting()
方法为various settings设置值
,它是一个键值对属性。这些属性包括
applicationName (string), contentRoot (string), detailedErrors (bool), environment (string), urls (semicolon separated list) 和 webroot (string). 其中的一些属性也可以通过扩展方法在WebHostBuilder
上设置
Startup.cs
这个类设置 application 的依赖注入服务和管道给我们的应用程序,使用以下方法:
-
ConfigureServices()
: 添加服务到容器 -
Configure()
: 用中间件设置请求管道
在上面的代码中可以看到方法的参数
这些方法被依次调用,重要的一点是注意顺序,服务容器注册之后才可以跑起来。
project 文件
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Folder Include="wwwroot\" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.3" />
</ItemGroup>
</Project>
appsettings.json
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:62464/",
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Empty": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:62465/"
}
}
}
Source Code
GitHub:
网友评论