.Net 9.0环境下WebApi发布到IIS
一、在Visual Studio里发布
右键点击WebApi工程,点击发布按钮,如下图所示。

点击【发布】按钮后,系统弹出发布对话框,如下图所示。

选择文件夹,点击【下一步】。

在该界面选择发布输出的目录,一般默认即可,发布到IIS时,我们把此处的文件再拷贝实际在IIS上发布的目录。然后点击【完成】按钮。

在该界面点击【关闭】按钮。Visual Studio会显示如下界面。

点击【显示所有设置】按钮,弹出的设置对话框如下图所示。

【配置】项包含Debug和Release,我们发布的话,选择Release即可。
【目标框架】选择.net9.0。
【部署模式】包括框架依赖和独立两种,如果选择独立,会把依赖的.Net 9.0的dll文件也会拷贝到发布目录下,我们是把Web API发布到IIS上,我们会部署好.net 9.0的环境,所以这里设置框架依赖即可。
【目标运行时】用来设置发布的目标,包括win-x86、win-x64、win-arm、win-arm64、osx-x64、osx-arm64linux-x64、inux-arm、linux-arm64多个目标平台,根据自己的需求选择。我们要发布到Windows的IIS上,选择win-x64即可。
【生成单个文件】,勾选可把所有的文件打包成一个exe文件,我一般不勾选该项,实际效果未做过测试。
【启用 ReadyToRun 编译】,是一种 AOT(Ahead-of-Time)预编译技术,它通过将 IL(中间语言)代码预先编译为本机机器码,显著提升应用程序的启动性能和运行时效率。可根据自己的实际情况选择是否勾选。
【裁剪未使用的代码】,通过静态分析移除应用程序中未使用的代码(如未引用的程序集、类型、方法等)来优化应用体积。对体积大小敏感的程序可勾选该选项。例如MAUI开发的移动端程序,Blazor程序等,这样通过删除未被执行的代码(如未使用的库、反射未触及的类型),可显著减小应用程序包大小。WebAPI是发布到服务器端的程序,该选项勾不勾选都可以。
【在发布前删除所有现有文件】作用是 清空目标发布目录中的所有旧文件,确保发布过程在一个干净的环境中进行,避免残留文件干扰新版本的部署。建议勾选。
【数据库】项目基本上不用,数据库一般我们都会独立的部署。
设置完这些参数后,点击【保存】按钮。此时该对话框关闭,新的设置显示到visual Studio界面上,如下图所示。

点击右上角的【发布】按钮,执行发布操作。发布成功后,Visual Studio的界面如下图所示。

点击【目标位置】项右侧的路径链接,可以快速定位到发布的目录。如下图所示。

把该目录下的所有文件,都拷贝到我们要发布的目录下。下一步就可以在IIS中发布了。
二、在IIS中发布
首先我们要安装环境,如果没有IIS的话,可以搜索把IIS启用的方法,启用IIS即可。我们主要说下安装.net 9.0 在IIS下的运行环境安装。
通过https://dotnet.microsoft.com/zh-cn/download/dotnet/9.0可以进入.net 9.0的各开发包和运行环境的下载页面,如下图所示。

我们选择下载【ASP.NET Core 运行时】,因为我们是部署到IIS上,所以选择Windows那一栏中的【Hosting Bundle】,这个安装包专为 IIS 部署设计,集成以下组件:ASP.NET Core 运行时、.NET 运行时和IIS 模块(ANCM - AspNetCoreModule)。如果要部署到Nginx等环境下,可下载X64版本。
下载后,直接双击,按照提示默认安装即可。安装后,重启一下IIS。
打开IIS,点击到根节点,然后在右侧双击【模块】按钮。如下图所示。

弹出的模块内容如下图所示。

如果包含了【AspNetCoreModuleV2】项,基本上就可以认为是安装成功了。
右键点击【应用程序池】,点击【新建应用程序池】弹出对话框如下图所示。

【名称】可根据自己需要命名,建议可以和发布的项目名称保持一致。【.NET CLR 版本】选择无托管代码,其他保持默认设置即可。最后点击【确定】按钮,完成程序池的新建工作。
右键点击【网站】节点,在弹出的右键菜单中点击【新建网站】按钮,弹出【新建网站】对话框。如下图所示。

输入网站的名称,选择程序池,设置发布程序存储的路径,并设置好端口,点击确定即可,此时该网站就会添加到IIS中。如下图所示。

选中刚发布的WebAPI,点击右侧的浏览按钮,可以在浏览器中测试是否可以查看。默认是访问不到任务信息,会显示HTTP ERROR 404错误。可以直接测试某个API或则打开Swagger页面,如果能打开则发布成功。但正是发布的时候,要禁用Swagger。

三、发布的时候的一些注意事项:
1、发布的网站名称和使用的程序池名称尽量保持一致,并且创建的时候一次性命名,如果命名错误,不要修改,直接删除,重新创建。这样可能会避免一些错误。(原因没有深究,只是平常使用的时候经常遇到这样的问题)
2、程序池的启动模式可以修改为AlwaysRunning,就是一直运行,另外一个设置是当第一次请求的时候才启动。
3、发布的内容所在的目录给其最高权限,例如给Everyone所有的权限等。
.Net 9.0环境下WebApi发布到IIS的更多相关文章
- .Netframework下WebAPI发布在IIS方法
当前项目是前后端分离的架构,前端使用html做页面,后端使用WebAPI做接口,因为涉及到多节点响应的问题,今天进行了WebAPI发布测试,将发布流程记录如下 1.API发布 a.右键API项目,单击 ...
- [VS2015].NET4.0环境下使用.NET2.0程序集,使用sqlite时报异常 出现“混合模式程序集异常”
在.net 4.0环境下使用sqlite时报异常 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集其调用的方法是从sqli ...
- VB6.0环境下的CATIA二次开发简介
CATIA作为CAD/CAE/CAM/PDM一体化的软件,广泛用于航空航天.汽车.船舶及电子工业,尤其在航空航天业,有八成以上厂商使用CATIA的市场[11].然而由于使用习惯和使用的侧重点不用,功能 ...
- Windows-Server-2008、IIS7.0环境下配置伪静态化
在Windows-Server-2008.IIS7.0环境下配置伪静态化 首先,是IIS7.0的配置,由于Windows Server 2008操作系统默认的IIS版本为 ...
- 使用zipkin2在SpringCloud2.0环境下追踪服务调用情况
1.目的: 使用zipkin2.0在Spring Cloud 2.0环境下,追踪服务调用情况. 2.所需组件: zipkin2.0,Spring Cloud 2.0,Eureka Server,Eur ...
- 分布式环境下rabbitmq发布与订阅端
假设rabbitmq配置了集群,且客户端连接rabbitmq-server通过lvs实现HA但一般情况下不建议做LB.在分布式系统的环境下,由于节点的非预知性,使用spring amqp模板进行配置不 ...
- 转 Visual C++6.0 与matlab联合编程(2)----Visual C++6.0 环境下编译和调试MEX文件
我的最初想法是利用matlab的mex命令调用C++程序生成动态链接库的,但是测试程序(文中另附)通过了,自己的实际应用程序却没有过.还是把方法贴在这儿,以便自己以后进行整理. http://shij ...
- webapi发布在iis之后报错Http 403.14 error
服务器是 Windows Server 2008 R2 Enterprise 网上找了很多说是修改webconfig.试过之后没有效果,另外报错了. 最后才找到是因为webapi发布时选择的应用程序的 ...
- Hadoop2.2.0环境下Sqoop1.99.3安装
本文转载自http://blog.csdn.net/liuwenbo0920/article/details/40504045 1.安装准备工作: 已经装好的hadoop环境是hadoop 2.2.0 ...
- VC++6.0环境下调试c语言代码的方法和步骤_附图
1.C语言程序四步开发步骤 (1)编辑.可以用任何一种编辑软件将在纸上编写好的C语言程序输入计算机,并将C语言源程序文件*.c以纯文本文件形式保存在计算机的磁盘上(不能设置字体.字号等). (2)编译 ...
随机推荐
- 关于Linux的core dump
core dump简介 core dump就是在进程crash时把包括内存在内的现场保留下来,以备故障分析. 但有时候,进程crash了却没有输出core,因为有一些因素会影响输出还是不输出cor ...
- 【Docker】镜像
Docker 镜像 是什么 UnionFS(联合文件系统) UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层(layer).轻量级并且高性能的文件系统,它支持对文件系统的 ...
- css标签名
标签 功能介绍 p 标签选择器 #id id选择器 .class class选择器 * 通用选择器 p,a 多个标签选择器 p a 后代选择器 p>a 子代选择器 p+a 紧挨着p后面的a选择器 ...
- leetcode每日一题:图中的最长环
题目 2360. 图中的最长环 给你一个 n 个节点的 有向图 ,节点编号为 0 到 n - 1 ,其中每个节点 至多 有一条出边. 图用一个大小为 n 下标从 0 开始的数组 edges 表示,节点 ...
- Linux学习笔记(三)----进程
简介 进程是系统资源分配的最小单位,它曾经也是CPU调度的最小单位,但后面被线程所取代. 进程树 Linux系统通过父子进程关系串联起来,所有进程之前构成了一个多叉树结构. 孤儿进程 孤儿进程是指父进 ...
- 事务注解@Transactional
目录 1.属性介绍 2.传播机制 准备例子 总结 3.原理 4.失效场景 一.属性介绍 1.isolation 属性 事务的隔离级别,默认值为 Isolation.DEFAULT.可选的值有: Iso ...
- MySQL 中 count(*)、count(1) 和 count(字段名) 有什么区别?
MySQL 中 count(*).count(1) 和 count(字段名) 的区别 在 MySQL 中,COUNT() 函数用于统计记录数.虽然 COUNT(*).COUNT(1) 和 COUNT( ...
- 大模型参数组成计算QwQ-32B为例
计算大模型参数量主要依赖于模型的架构和各层配置,我们把常用大模型分为三层:输入层.transformer层.输出层. 输入层 参数组成是Embedding的词表总和 transformer层 参数组成 ...
- tomcat-shell脚本
自动部署项目脚本参考: #!/bin/bash#自动部署脚本source /etc/profileexport LANG=zh_CN.UTF-8#tomcat路径tomcatBinPath=/usr/ ...
- K8s新手系列之Secret资源
概述 官方文档:https://kubernetes.io/zh-cn/docs/concepts/configuration/secret/ 在Kubernetes(k8s)中,Secret是一种用 ...