环境说明
- 本地环境:[Windows 10.0.19042.1387] VS2022正式版 .net6.0.100 SQL Server2019
- 服务器环境: [Windows2012 6.2.9200] [SQL Server2012] 无.net 环境
部署步骤:
- 服务器安装环境包。下载Hosting Bundle版本,并安装。下载链接: https://dotnet.microsoft.com/download/dotnet/6.0 ,也可以直接用这个下载:https://dotnet.microsoft.com/download/dotnet/thank-you/runtime-aspnetcore-6.0.0-windows-hosting-bundle-installer
- IIS新建程序池 byy48net,分别设置为 无托管代码、集成模式,这里要注意,启用32位模式,要根据自己的配置,选择true或者false。这里我选择false。
- IIS新建网站,指定程序池为 byy48net
- VS工程上右键选择发布,本文是使用FTP方式发布的。
发布后发现网站运行不起来,整理一下踩过的坑。
第二个坑:通过命令dotnet run报错,SQL的错误
原因:发布打包的时候,没有将资源文件一齐打包
处理方法:手动把资源文件拷贝到服务器对应目录。
第一个坑:调试信息出不来,设置了web.config,stdoutLogEnabled设置为true,不会自动生成日志文件。
处理办法:进程池里面的32位模式选择错了。旧的是true的换成false,旧的是false的换成true。
第三个坑:使用了Directory.GetCurrentDirectory(),导致获取不到根目录。
处理方法1:更改代码,通过单例模式的全局类,设置 AppContext.BaseDirectory 为根目录。
不过调试的时候,读取到的不是代码目录,运行不太方便。
不能使用的函数:Directory.GetCurrentDirectory(),Environment.CurrentDirectory。这两个 获取到的目录都是c:\windows\system32\inetsrv。
处理方法2:采用进程外托管,作者没有使用这个办法,有兴趣的可以自行搜索一下。
官网介绍: https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/iis/out-of-process-hosting?view=aspnetcore-6.0
第四个坑:System.DllNotFoundException: Unable to load DLL 'Microsoft.Data.SqlClient.SNI.dll' or one of its dependencies: 拒绝访问。 (0x80070005 (E_ACCESSDENIED))
处理方法1:进程池标识修改为,LocalSystem。
右键进程池,选择高级设置-->进程模型-->标识-->内置账户-->选择LocalSystem ,设置完成后重启服务。
处理方法2:修改目录权限
网站根目录,右键属性-->安全-->编辑-->选择IIS_IUSR账号-->增加勾选“读取和执行”,保存后重启服务。
引用:参考的链接
https://github.com/dotnet/sdk/issues/7480
|