前 言
首先看下.net的最新的框架图,
目前是中间的lib层统一了,用standard library了。上层的各应用统一还需要点时间。
我们想要在IIS部署站点,需要熟悉下IIS的运行机制,才能更好的实施。首先来看下图
具体的IIS运行原理,大家可以看这篇。
实 践
大家都知道我们目前在运行asp.net web程序的时候,可以直接运行bin下的Debug etcoreapp3.1xx.exe用来启动web站点,类似于这样的
另外我们可以通过net自带的命令 dotnet xxx.dll
但是通过这两种方式启动的时候,可能发现静态文件没有加载进来。那是为什么呢?
碰到这样的问题,我们不妨通过url展开看看css,js等文件加载路径,再通过代码跟踪很容找到问题点。
app.UseStaticFiles(new StaticFileOptions() { FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot")) });
可以通过修改静态文件路径的方式解决。
正 文
IIS运行NetCoreWeb程序需要准备的工作如下:
1.安装IIS;
2.安装NetCoreRuntime,也可以安装SDK,包含运行时。VS自带的不能共享使用。
3.安装服务器主机绑定程序Hosting(dotnet-hosting-3.1.0-win.exe)。这个程序会嵌入IIS的module中,应用程序池选无托管程序或者选择任何一个都可以。
注意我们在发布好的网站根目录发现会保留一个web.config文件。内容如下:
<?xml version="1.0" encoding="utf-8"?> <configuration> <location path="." inheritInChildApplications="false"> <system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> </handlers> <aspNetCore processPath="dotnet" arguments=".WebApplication1.dll" stdoutLogEnabled="false" stdoutLogFile=".logsstdout" hostingModel="inprocess" /> </system.webServer> </location> </configuration>
通过这个配置文件我们发现所有的来自于IIS的web请求都交由AspNetCoreModuleV2来处理,而后再转到命令式的dotnet对应的dll应用程序处理。
最后附上一张IIS处理Core程序的简略图:
备注:本机测试使用控制台启动,服务器还需使用IIS寄宿。