IIS部署ASP.NET 未能找到 CodeDom 提供程序类型

作者以小白视角记录了使用ASP.NET做功能性页面并部署在IIS上的过程,包括用Visual Studio 2022创建程序、发布程序、服务器准备、部署程序等步骤,还总结了部署中出现的问题,最后记录了身份验证等可能用到的功能。

最近因为一些需要使用ASP.NET尝试做了一个功能性页面部署在IIS上,对于一个外行来说这里面属实到处是坑,下面我尝试以纯小白的视角从头捋一遍过程作为笔记。(部署部分,功能实现部分还在进行中,后面有机会再更新一下)

创建程序

我整体的环境是先使用visual studio 2022创建ASP.NET WEB应用程序

为什么用这个呢?因为这个模版可以直接右键添加预设页面,对于小白来说相当友好

右键方案名即可添加WEB页面,WEB页面下的*.aspx.cs文件即可实现页面互动或与外部代码的交互,相当直观易懂,详细开发就不细说了,下面直接跳到发布。

程序发布

调试功能和页面均正常后点击上面工具栏的生成>发布,我这里因为服务器是在另一个电脑上,所以是发布到文件夹中,发布页面点击新建配置文件即可更改

发布后下面会出现绿色的发布成功的信息,直接点击上面的打开文件夹定位到项目位置,此处所有文件包括子文件夹和文件都是项目的一部分,在默认情况下ASP.NET会打包roslyn进去,这个是目前ASP.NET默认的编译器,但它并不是必须的,如果项目没有使用它提供的功能可以在项目开发阶段使用
PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
把它卸掉,然后删除web.config文件下相关的引用信息即可,减少20M体积而且还不会出现标题所说的错误,但这并不是我该考虑的(怕功能缺失或失效,甚至可能潜在的其他错误),躺平默认怎么样就怎么样,发布后在服务器上建一个文件夹把这些文件复制过去,接着下一步操作。

服务器准备

会看这里的我就默认会部署网站了,服务器上我用的是IIS,也就是WINDOWS系统默认自带的,版本可以通过帮助>关于获知,在踩坑的过程中发现IIS6与IIS7以后的版本有一些设定上的出入,虽然现在的版本都到10了,但是查资料的时候还是要注意一下

先把必要的asp.net core运行时下载安装好,我下载的是7.0版本的Hosting Bundle我也不知道为什么不是下载的6.0LTS(长期支持版本)的,可以根据需求自行判断下载系统对应的版本,也可以跟我一样,这个算是一个中间件,实现支持ASP.NET程序必须的。

安装好后需要给IIS打开相应的功能以实现功能支持,打开控制面板>程序>程序和功能>启用或关闭WINDOWS功能>展开以下选项并勾上图上选中的选项(版本按需选择,也可以全都要),完成后建议重启一下。

部署ASP.NET页面程序

WIN+R输入inetmgr运行IIS管理器,如果没有就是IIS功能没有打开,新建网站略过(默认已有)
右击网站>添加应用程序,别名是部署好后用来访问这个程序的地址,可以随意填写,物理路径是ASP.NET项目文件所在的位置,下面按项目需求使用,也可以不动全部默认

确定后点击左侧网站下刚新建的程序项,在中间你的程序主页下找到默认文档双击打开,右击空白处或点击右边的添加,把你ASP.NET项目默认的主页文件名连扩展(就是后面.aspx那段)全填进去并确定,可以的话重启一下网站,使用www.你的网址/abaaba        应该就可以访问到ASP.NET的页面了,其他优化和安全措施请自行针对项目进行,此处略过。

问题总结

问题出现最多的地方
1、程序部署到网站后网站必须在运行中才能正常访问ASP.NET页面,否则直接拒绝页面

2、与ASP.NET项目相异的部署选择,比如上述项目部署选择了程序映射或者虚拟目录就会直接出现下图中的配置异常返回

功能小记

        以下为一些可能用得到的功能笔记,均没有经过验证,仅作为参考

身份验证

使用传递身份验证实现代码验证
1、配置程序项目目录下的Web.config文件,相应添加对应代码

<system.web>
    <authentication mode="Forms" />
    <authorization>
        <deny users="?"/>
    </authorization>
</system.web>

配置应用程序使用Forms身份验证模式,并拒绝未经身份验证的用户("?" 表示匿名用户)
在IIS管理器中,选择网站,双击“身份验证”,选择对应验证右侧启用
2、ASP.NET接收传递的用户名

string userName = Request.ServerVariables["AUTH_USER"];

3、网址传递参数普遍原理
网址(?)之后一般为传递参数如wvw.xxxx.co/page?name=lilei&age=18传递了name和age两个参数,之间使用(&)符分割,还有其他传递方式,结合项目设计使用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值