当前位置: 首页 > news >正文

C#.net core部署IIS

Windows IIS 部署 .NET 应用详细指南

本文档提供了在 Windows Server 上使用 IIS 部署 .NET 应用(包括 .NET Core 和传统 WebForms)的完整步骤和最佳实践。

目录

  1. 概述
  2. 环境准备
  3. .NET Core 应用部署
    • 应用准备
    • 发布应用
    • 在 IIS 中配置
    • 应用池配置
    • 高级配置
  4. .NET Framework WebForms 应用部署
    • 应用准备
    • 发布应用
    • 在 IIS 中配置
    • 应用池配置
    • 高级配置
  5. 多应用部署
  6. 配置 HTTPS
  7. 性能优化
  8. 日志管理
  9. 故障排除
  10. 最佳实践
  11. 高级部署场景
  12. 特定版本部署指南
  13. 部署检查清单
  14. 结论
  15. 附录:常用命令参考

概述

.NET 应用程序有多种托管方式,而 IIS 是 Windows 环境中最常用的 Web 服务器选择。本指南涵盖了两种主要的 .NET 应用类型的部署:

  • .NET Core/.NET 5+:现代跨平台 .NET 应用框架
  • .NET Framework WebForms:传统的 Windows-only .NET 应用框架

这两种应用类型的部署流程有所不同:

  • .NET Core 应用通常是独立的(self-contained)或依赖框架的(framework-dependent)应用程序
  • WebForms 应用直接部署到 IIS 站点目录中

环境准备

Windows Server 准备

  1. 安装 Windows Server

    • 建议使用 Windows Server 2016/2019/2022
    • 安装所有最新更新
  2. 安装 IIS

    • 打开服务器管理器 → 添加角色和功能
    • 选择"Web 服务器 (IIS)"角色
    • 确保以下功能已选中:
      • Web 服务器 → 通用 HTTP 功能 → 默认文档
      • Web 服务器 → 通用 HTTP 功能 → 静态内容
      • Web 服务器 → 通用 HTTP 功能 → HTTP 错误
      • Web 服务器 → 应用程序开发 → .NET Extensibility 4.8
      • Web 服务器 → 应用程序开发 → ASP.NET 4.8
      • Web 服务器 → 应用程序开发 → ISAPI 扩展
      • Web 服务器 → 应用程序开发 → ISAPI 筛选器
      • 管理工具 → IIS 管理控制台

.NET Core 准备工作

  1. 安装 .NET Core Hosting Bundle

    • 从 Microsoft 官方网站 下载适合目标 .NET 版本的 Hosting Bundle
    • 例如,对于 .NET 6 应用,下载 .NET 6.0 Hosting Bundle
    • 运行安装程序并按照向导完成安装
  2. 安装 Visual C++ Redistributable

    • 下载并安装 Visual C++ Redistributable
    • 这是 .NET Core 运行时的依赖项
  3. IIS 配置

    • 在安装 Hosting Bundle 后,重启 IIS:
      iisreset /restart
      

.NET Framework 准备工作

  1. 安装 .NET Framework

    • 使用"添加角色和功能"向导安装 .NET Framework 4.8(或应用所需的版本)
    • 路径:服务器管理器 → 添加角色和功能 → 功能 → .NET Framework 4.8
  2. 安装 Web Deploy(可选但推荐):

    • 从 Microsoft 官方网站 下载 Web Deploy
    • 运行安装程序,选择"完整安装"选项

.NET Core 应用部署

.NET Core 应用准备

  1. 检查 .NET Core 应用要求

    • 确认目标应用兼容的 .NET 版本(.NET Core 3.1、.NET 5、.NET 6 等)
    • 确保服务器安装了匹配的 .NET 运行时
  2. 配置应用

    • appsettings.json 中设置生产环境配置:
      {"Logging": {"LogLevel": {"Default": "Information","Microsoft": "Warning","Microsoft.Hosting.Lifetime": "Information"}},"AllowedHosts": "*","ConnectionStrings": {"DefaultConnection": "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;"}
      }
      
  3. 配置 web.config

    • 在项目中添加或修改 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=".\MyApplication.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" /></system.webServer></location>
      </configuration>
      

发布 .NET Core 应用

  1. 使用 Visual Studio 发布

    • 右键点击项目 → 发布
    • 选择"文件夹"作为发布目标
    • 配置发布选项:
      • 配置:Release
      • 目标框架:应用程序的目标框架(如 .NET 6.0)
      • 部署模式:根据需要选择"依赖框架"或"自包含"
      • 目标运行时:win-x64(或适合目标服务器的其他运行时)
    • 点击"发布"按钮
  2. 使用 dotnet CLI 发布

    • 打开命令提示符或 PowerShell
    • 导航到项目目录
    • 对于依赖框架的部署:
      dotnet publish -c Release -o ./publish
      
    • 对于自包含部署:
      dotnet publish -c Release -r win-x64 --self-contained -o ./publish
      
  3. 准备发布文件夹

    • 将发布输出复制到服务器上的部署文件夹,例如:
      C:\inetpub\wwwroot\MyDotNetCoreApp
      
    • 或直接在 CI/CD 流程中发布到服务器

在 IIS 中配置 .NET Core 应用

  1. 创建新应用程序池

    • 打开 IIS 管理器
    • 右键点击"应用程序池" → “添加应用程序池”
    • 名称:MyDotNetCoreAppPool
    • .NET CLR 版本:无托管代码
    • 托管管道模式:集成
    • 点击"确定"
  2. 创建网站或应用程序

    选项 1:创建新网站

    • 右键点击"网站" → “添加网站”
    • 站点名称:MyDotNetCoreApp
    • 应用程序池:选择刚创建的应用程序池
    • 物理路径:指向发布文件夹(例如 C:\inetpub\wwwroot\MyDotNetCoreApp
    • 绑定:设置 HTTP 绑定(端口、主机名等)
    • 点击"确定"

    选项 2:在现有网站下添加应用程序

    • 右键点击现有网站 → “添加应用程序”
    • 别名:MyDotNetCoreApp
    • 应用程序池:选择刚创建的应用程序池
    • 物理路径:指向发布文件夹
    • 点击"确定"
  3. 设置目录权限

    • 右键点击应用程序物理路径 → “属性” → “安全” → “编辑”
    • 添加 IIS_IUSRS 用户组和应用程序池身份(例如 IIS AppPool\MyDotNetCoreAppPool
    • 至少授予"读取和执行"、“列出文件夹内容”、"读取"权限
    • 对于需要写入的目录(如日志目录),授予"修改"权限
    • 点击"确定"应用更改

.NET Core 应用池配置

  1. 配置应用程序池高级设置

    • 右键点击应用程序池 → “高级设置”
    • 设置"启用32位应用程序"为"False"(对于 64 位应用)
    • 可根据需要调整其他设置(如闲置超时、回收等)
    • 点击"确定"
  2. 配置 ASP.NET Core 模块

    • web.config 中可以配置 ASP.NET Core 模块的行为:
      <aspNetCore processPath="dotnet" arguments=".\MyApplication.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
      
    • hostingModel 可以是 inprocess(默认,性能更好)或 outofprocess(隔离性更好)

.NET Core 高级配置

  1. 配置 URL 重写(如果需要):

    • 安装 URL Rewrite 模块(如果尚未安装)
    • 配置 web.config 以包含 URL 重写规则:
      <system.webServer><rewrite><rules><rule name="Redirect to HTTPS" stopProcessing="true"><match url="(.*)" /><conditions><add input="{HTTPS}" pattern="^OFF$" /></conditions><action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" /></rule></rules></rewrite>
      </system.webServer>
      
  2. 配置应用程序初始化(预热):

    • web.config 中添加配置:
      <system.webServer><applicationInitialization doAppInitAfterRestart="true"><add initializationPage="/" /></applicationInitialization>
      </system.webServer>
      
    • 在站点或应用程序的高级设置中设置"预加载已启用"为"True"
  3. 配置环境变量

    • 在 web.config 中设置环境变量:
      <aspNetCore processPath="dotnet" arguments=".\MyApplication.dll"><environmentVariables><environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" /><environmentVariable name="ConnectionStrings__DefaultConnection" value="Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;" /></environmentVariables>
      </aspNetCore>
      

.NET Framework WebForms 应用部署

WebForms 应用准备

  1. 检查 .NET Framework 版本

    • 确认应用程序的目标 .NET Framework 版本(例如 4.0、4.5、4.8)
    • 确保服务器已安装该版本
  2. 配置 Web.config

    • 确保 Web.config 文件中的连接字符串和应用设置适合生产环境:
      <configuration><connectionStrings><add name="DefaultConnection" connectionString="Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;" providerName="System.Data.SqlClient" /></connectionStrings><appSettings><add key="Environment" value="Production" /></appSettings><!-- 其他配置 -->
      </configuration>
      
  3. 准备应用程序文件

    • 确保所有必要的依赖项和引用都已包含在项目中
    • 确保所有路径都是相对路径,以便在部署环境中正常工作

发布 WebForms 应用

  1. 使用 Visual Studio 发布

    • 右键点击项目 → 发布
    • 选择发布方法:
      • Web Deploy:直接发布到 IIS(需要安装 Web Deploy)
      • FTP:通过 FTP 发布
      • 文件系统:发布到本地文件夹
    • 配置发布参数:
      • 对于 Web Deploy:输入服务器 URL、站点名称、用户名和密码
      • 对于文件系统:选择输出文件夹
    • 配置发布选项:
      • 配置:Release
      • 文件发布选项:视需要选择"删除目标位置中的其他文件"
    • 点击"发布"按钮
  2. 手动发布

    • 生成 Release 版本的应用程序
    • 复制 binApp_DataApp_Themes 及其他必要文件夹
    • 复制所有 .aspx.ascx.master 文件
    • 复制 Web.config 和其他配置文件
    • 将文件复制到服务器上的部署文件夹

在 IIS 中配置 WebForms 应用

  1. 创建新应用程序池

    • 打开 IIS 管理器
    • 右键点击"应用程序池" → “添加应用程序池”
    • 名称:MyWebFormsAppPool
    • .NET CLR 版本:.NET CLR v4.0.30319 (或应用程序所需的 .NET Framework 版本)
    • 托管管道模式:集成
    • 点击"确定"
  2. 创建网站或应用程序

    选项 1:创建新网站

    • 右键点击"网站" → “添加网站”
    • 站点名称:MyWebFormsApp
    • 应用程序池:选择刚创建的应用程序池
    • 物理路径:指向部署文件夹(例如 C:\inetpub\wwwroot\MyWebFormsApp
    • 绑定:设置 HTTP 绑定(端口、主机名等)
    • 点击"确定"

    选项 2:在现有网站下添加应用程序

    • 右键点击现有网站 → “添加应用程序”
    • 别名:MyWebFormsApp
    • 应用程序池:选择刚创建的应用程序池
    • 物理路径:指向部署文件夹
    • 点击"确定"
  3. 设置目录权限

    • 右键点击应用程序物理路径 → “属性” → “安全” → “编辑”
    • 添加 IIS_IUSRS 用户组和应用程序池身份(例如 IIS AppPool\MyWebFormsAppPool
    • 至少授予"读取和执行"、“列出文件夹内容”、"读取"权限
    • 对于特殊文件夹如 App_Data,授予"修改"权限
    • 点击"确定"应用更改

WebForms 应用池配置

  1. 配置应用程序池高级设置

    • 右键点击应用程序池 → “高级设置”
    • 根据应用程序要求,设置"启用32位应用程序"为"True"或"False"
    • 配置回收设置:
      • 定期回收间隔:根据应用需求调整(0 表示禁用定期回收)
      • 闲置超时:如果需要保持应用程序在内存中,设置较长的时间
    • 点击"确定"
  2. 配置应用程序池身份

    • 默认情况下,应用程序池使用 ApplicationPoolIdentity
    • 如果需要,可以设置为特定用户:
      • 高级设置 → 进程模型 → 标识 → 自定义账户
      • 输入一个具有足够权限的域或本地用户账户

WebForms 高级配置

  1. 配置会话状态
    Web.config 中配置会话状态模式:

    <system.web><sessionState mode="StateServer" stateConnectionString="tcpip=localhost:42424" timeout="20" /><!-- 或者使用 SQL Server --><!-- <sessionState mode="SQLServer" sqlConnectionString="..." timeout="20" /> -->
    </system.web>
    
  2. 配置自定义错误页

    <system.web><customErrors mode="RemoteOnly" defaultRedirect="~/Error.aspx"><error statusCode="404" redirect="~/NotFound.aspx" /><error statusCode="500" redirect="~/ServerError.aspx" /></customErrors>
    </system.web>
    
  3. 配置应用程序预热

    • 安装 Application Initialization 模块(如果尚未安装)
    • 在站点或应用程序的高级设置中设置"预加载已启用"为"True"
    • Web.config 中添加:
      <system.webServer><applicationInitialization doAppInitAfterRestart="true"><add initializationPage="/" hostName="example.com" /></applicationInitialization>
      </system.webServer>
      

多应用部署

管理多个 .NET 应用

  1. 使用单独的应用程序池

    • 为每个应用程序创建独立的应用程序池
    • 确保应用程序池的 .NET CLR 版本与应用程序兼容
  2. 域名和子域部署

    • 配置多个站点,每个使用不同的域名或子域
    • 在 IIS 中添加多个绑定,每个绑定使用不同的主机名
  3. 子应用程序部署

    • 在主网站下添加多个应用程序
    • 每个应用程序使用自己的应用程序池
    • 配置适当的虚拟路径
  4. 管理资源分配

    • 为不同的应用程序池分配不同的资源限制(内存、CPU 等)
    • 配置高级应用程序池设置以优化性能

配置 HTTPS

设置 SSL/TLS

  1. 获取 SSL 证书

    • 从证书颁发机构购买证书
    • 使用 Let’s Encrypt 免费证书
    • 创建自签名证书(仅适用于开发/测试环境)
  2. 安装证书

    • 打开 IIS 管理器 → 选择服务器 → “服务器证书”
    • 点击"导入"(如果已有 PFX 文件)或"创建证书请求"(如果需要申请新证书)
    • 按照向导完成证书导入或请求
  3. 配置 HTTPS 绑定

    • 选择网站 → “绑定…” → “添加”
    • 类型:选择"https"
    • IP 地址:选择适当的 IP 地址或"全部未分配"
    • 端口:通常为 443
    • 主机名:输入域名(可选)
    • SSL 证书:选择已安装的证书
    • 点击"确定"
  4. 配置 HTTP 到 HTTPS 重定向

    • 安装 URL Rewrite 模块(如果尚未安装)
    • 添加重写规则将 HTTP 请求重定向到 HTTPS:
      <system.webServer><rewrite><rules><rule name="HTTP to HTTPS" stopProcessing="true"><match url="(.*)" /><conditions><add input="{HTTPS}" pattern="^OFF$" /></conditions><action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" /></rule></rules></rewrite>
      </system.webServer>
      
  5. 配置 HSTS(HTTP 严格传输安全):

    • 添加 HTTP 响应头:
      <system.webServer><httpProtocol><customHeaders><add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains" /></customHeaders></httpProtocol>
      </system.webServer>
      

性能优化

IIS 性能调优

  1. 启用压缩

    • 打开 IIS 管理器 → 选择服务器 → “压缩”
    • 勾选"启用静态内容压缩"和"启用动态内容压缩"
    • 配置压缩级别和其他设置
  2. 启用输出缓存

    • 选择网站或应用程序 → “输出缓存”
    • 添加缓存规则以缓存静态内容和不经常变化的动态内容
  3. 优化应用程序池

    • 配置应用程序池回收设置以减少不必要的回收
    • 使用应用程序预热确保快速响应
    • 根据服务器资源分配适当的进程数量

.NET 应用性能优化

  1. .NET Core 性能优化

    • 在发布时使用 --configuration Release 选项
    • 使用响应压缩中间件:
      app.UseResponseCompression();
      
    • 实现缓存策略:
      services.AddResponseCaching();
      app.UseResponseCaching();
      
  2. WebForms 性能优化

    • Web.config 中启用输出缓存:
      <system.web><caching><outputCache enableOutputCache="true" /><outputCacheSettings><outputCacheProfiles><add name="CacheFor1Minute" duration="60" varyByParam="none" /></outputCacheProfiles></outputCacheSettings></caching>
      </system.web>
      
    • 使用页面输出缓存:
      <%@ OutputCache Duration="60" VaryByParam="none" %>
      
    • 优化视图状态大小:
      <%@ Page EnableViewState="false" %>
      

日志管理

配置 IIS 日志

  1. 配置 IIS 站点日志

    • 选择网站 → “日志记录”
    • 配置日志文件格式(W3C 扩展、IIS、NCSA 或自定义)
    • 设置日志文件路径和轮换选项
    • 选择需要记录的字段
  2. 配置 FREB 日志(失败请求跟踪):

    • 选择网站或应用程序 → “失败请求跟踪规则”
    • 添加新规则,指定触发日志记录的条件(如状态码、时间等)
    • 配置要包含在日志中的详细信息

配置应用程序日志

  1. .NET Core 日志配置

    • appsettings.json 中配置日志记录:
      {"Logging": {"LogLevel": {"Default": "Information","Microsoft": "Warning","Microsoft.Hosting.Lifetime": "Information"},"File": {"Path": "logs/app.log","FileSizeLimitBytes": 10485760,"MaxRollingFiles": 10}}
      }
      
    • 使用第三方日志记录库如 Serilog 或 NLog 进行高级日志配置
  2. WebForms 日志配置

    • 使用 web.config 配置健康监视和跟踪:
      <system.web><healthMonitoring enabled="true"><!-- 健康监视配置 --></healthMonitoring><trace enabled="true" localOnly="true" />
      </system.web>
      
    • 使用 log4net 或其他日志库进行应用程序级日志记录

故障排除

常见 IIS 错误

  1. HTTP 500.19 - Internal Server Error

    • 通常是 web.config 配置错误
    • 检查配置文件语法
    • 确保服务器已安装所有必要的 IIS 模块
  2. HTTP 500.21 - Internal Server Error

    • 通常是 .NET Core/.NET 5+ 处理程序映射或模块问题
    • 确认已安装 ASP.NET Core Hosting Bundle
    • 检查 web.config 中的处理程序配置
  3. HTTP 503 - Service Unavailable

    • 应用程序池可能已停止
    • 检查应用程序池状态
    • 查看事件日志中的应用程序崩溃或其他问题

.NET Core 应用排错

  1. 检查日志

    • 检查 stdoutLogFile 指定的位置
    • 检查 Windows 事件日志
    • 检查应用程序自定义日志
  2. 检查模块安装

    • 确认 ASP.NET Core 模块已正确安装和注册
    • 在命令行运行 dotnet --info 确认 .NET 运行时版本
  3. 检查进程

    • 使用任务管理器或 Process Explorer 确认 w3wp.exe(应用程序池)和 dotnet.exe(对于 out-of-process 托管)进程正在运行

WebForms 应用排错

    • 启用详细错误消息

      • 配置 customErrors 模式:

        <system.web><customErrors mode="Off" />
        </system.web>
        
      • 查看详细错误输出

    • 检查脚本错误

      • 使用浏览器开发者工具检查 JavaScript 错误
      • 配置 <deployment retail="false"> 以获取详细错误信息
    • 检查权限

      • 确保应用程序池身份有权访问所有必要的资源(文件、数据库等)
      • 为 App_Data 目录授予修改权限
      • 确保任何外部资源(如 UNC 路径、外部 API)的权限正确
    • 检查数据库连接

      • 验证连接字符串是否正确
      • 确保数据库服务器可访问
      • 检查数据库用户权限

    最佳实践

    安全最佳实践

    1. 保持系统更新

      • 定期安装 Windows 更新
      • 更新 .NET Framework、.NET Core 运行时到最新的安全补丁版本
      • 保持 IIS 和其模块的最新状态
    2. 应用安全配置

      • 配置适当的 web.config 安全设置:

        <system.web><httpRuntime enableVersionHeader="false" /><httpCookies httpOnlyCookies="true" requireSSL="true" />
        </system.web>
        
      • 配置安全 HTTP 头:

        <system.webServer><httpProtocol><customHeaders><remove name="X-Powered-By" /><add name="X-Frame-Options" value="SAMEORIGIN" /><add name="X-XSS-Protection" value="1; mode=block" /><add name="X-Content-Type-Options" value="nosniff" /></customHeaders></httpProtocol>
        </system.webServer>
        
    3. 实施身份验证和授权

      • 使用安全的身份验证机制(如 ASP.NET Identity、Windows 认证)
      • 配置适当的授权策略
      • 考虑实施 2FA(双因素认证)
    4. 保护敏感数据

      • 加密连接字符串和敏感配置信息
      • 使用 HTTPS 加密传输中的数据
      • 适当实施数据保护 API

    部署最佳实践

    1. 实施 CI/CD 流程

      • 使用 Azure DevOps、GitHub Actions 或其他 CI/CD 工具自动化部署
      • 实施部署前的自动化测试
      • 使用 Web Deploy 或其他部署工具进行零停机部署
    2. 版本控制部署文件夹

      • 使用带时间戳的文件夹命名约定
      • 保留多个版本以便快速回滚
      • 使用符号链接指向当前活动版本
    3. 应用配置转换

      • 使用 XML 配置转换针对不同环境(如开发、测试、生产)
      • 使用环境变量或其他安全方式存储敏感配置
    4. 使用蓝绿部署或金丝雀发布

      • 设置两个相同的环境进行蓝绿部署
      • 将一小部分流量路由到新版本进行金丝雀测试

    监控和维护最佳实践

    1. 设置监控

      • 使用 Application Insights、New Relic 或类似工具监控应用性能
      • 设置警报以通知异常情况
      • 定期检查应用程序和 IIS 日志
    2. 定期备份

      • 备份网站内容和配置
      • 备份 IIS 配置(使用 appcmd 或导出功能)
      • 备份 SSL 证书和其他安全凭据
    3. 定期维护

      • 定期清理日志文件
      • 优化数据库(如适用)
      • 检查和优化应用程序池回收设置
    4. 灾难恢复计划

      • 制定完整的灾难恢复流程
      • 定期测试恢复流程
      • 保持离线文档和关键信息

    高级部署场景

    负载均衡和高可用性

    1. 配置 Web 场

      • 设置多个运行相同应用程序的 Web 服务器
      • 使用 ARR(Application Request Routing)或硬件负载均衡器分配流量
      • 确保会话状态在服务器之间共享
    2. 配置共享内容

      • 使用 DFS(分布式文件系统)或共享存储
      • 确保所有 Web 场服务器都可访问共享内容
      • 适当配置 ACL(访问控制列表)
    3. 配置粘性会话(如需要):

      • 在 ARR 中配置服务器亲和性
      • 或使用分布式缓存如 Redis 进行会话存储

    容器化部署

    1. 使用 Docker 容器

      • 为 .NET Core/.NET 5+ 应用创建 Dockerfile
      • 使用 Windows 容器或 Linux 容器(取决于应用程序要求)
      • 配置容器编排(如 Kubernetes)
    2. 配置 IIS 反向代理

      • 在容器环境前使用 IIS 作为反向代理
      • 配置 URL 重写规则将请求路由到容器
    3. 使用 Windows Container Networking

      • 配置容器网络以允许容器间通信
      • 确保容器可访问必要的外部资源(如数据库)

    微服务架构部署

    1. 服务发现

      • 使用服务注册表(如 Consul、Eureka)
      • 配置 API 网关路由请求到不同服务
    2. 独立部署

      • 为每个微服务配置独立的 IIS 站点或应用程序
      • 使用不同的应用程序池隔离服务
    3. 监控和日志聚合

      • 集中收集和分析所有微服务的日志
      • 实施分布式跟踪以监控请求流

    特定版本部署指南

    .NET 6/7/8 应用部署

    1. 安装最新 Hosting Bundle

      • 从 Microsoft 下载并安装对应版本的 .NET Hosting Bundle
      • 例如,对于 .NET 8 应用,安装 .NET 8.0 Hosting Bundle
    2. 配置特定功能

      • 配置最小 API 和其他 .NET 6+ 新功能的 IIS 集成
      • 使用最新的部署模式(如自包含部署、单文件发布)
    3. 优化性能

      • 使用 .NET 6+ 的性能增强功能
      • 配置 Kestrel 设置以优化 in-process 和 out-of-process 模式

    .NET Framework 4.8 应用部署

    1. 安装 .NET Framework 4.8

      • 在服务器上安装完整的 .NET Framework 4.8
      • 安装相关的安全补丁和更新
    2. 配置传统功能

      • 配置 Classic ASP.NET 功能(如会话状态、视图状态)
      • 适当设置应用程序池回收和 ASP.NET 并发设置
    3. 兼容性考虑

      • 处理任何遗留组件的兼容性问题
      • 确保在 4.8 环境中测试所有功能

    部署检查清单

    .NET Core/.NET 5+ 部署检查清单

    1. 前期准备

      • 安装了适当版本的 .NET Hosting Bundle
      • 安装了必要的 IIS 功能和模块
      • 安装了 Visual C++ Redistributable
    2. 应用程序构建

      • 使用正确的配置(Release)构建应用
      • 配置了适当的运行时(依赖框架或自包含)
      • 测试构建的发布包在本地运行正常
    3. IIS 配置

      • 创建了应用程序池(无托管代码)
      • 创建了网站或应用程序
      • 设置了正确的目录权限
      • 配置了 web.config 文件
    4. 测试和监控

      • 从外部客户端测试应用程序
      • 检查日志确认没有错误
      • 设置了监控和警报

    WebForms 部署检查清单

    1. 前期准备

      • 服务器安装了正确版本的 .NET Framework
      • 安装了必要的 IIS 功能和模块
      • 安装了 Web Deploy(如使用)
    2. 应用程序构建

      • 使用正确的 Web.config 转换
      • 移除了开发工具和调试符号
      • 确保所有依赖项都已包含
    3. IIS 配置

      • 创建了应用程序池(正确的 .NET CLR 版本)
      • 创建了网站或应用程序
      • 设置了正确的目录权限
      • 配置了应用程序池高级设置
    4. 测试和监控

      • 测试所有关键功能
      • 验证数据库连接和其他集成
      • 检查日志确认没有错误

    结论

    在 Windows IIS 上部署 .NET 应用程序需要仔细规划和配置。无论是现代的 .NET Core/.NET 5+ 应用还是传统的 WebForms 应用,本指南提供了全面的步骤和最佳实践,帮助您成功部署和维护高性能、安全的 Web 应用程序。

    通过遵循本指南中的步骤和最佳实践,您可以确保应用程序的可靠性、性能和安全性,同时简化未来的维护和升级过程。

    附录:常用命令参考

    IIS 命令行工具 (appcmd)

    # 列出所有站点
    %windir%\system32\inetsrv\appcmd list site# 列出所有应用程序池
    %windir%\system32\inetsrv\appcmd list apppool# 重启应用程序池
    %windir%\system32\inetsrv\appcmd recycle apppool /apppool.name:"MyAppPool"# 启动/停止站点
    %windir%\system32\inetsrv\appcmd start site /site.name:"MySite"
    %windir%\system32\inetsrv\appcmd stop site /site.name:"MySite"# 备份 IIS 配置
    %windir%\system32\inetsrv\appcmd add backup "MyBackup"# 恢复 IIS 配置
    %windir%\system32\inetsrv\appcmd restore backup "MyBackup"
    

    PowerShell IIS 命令 (WebAdministration)

    # 导入 IIS 模块
    Import-Module WebAdministration# 列出所有站点
    Get-Website# 列出所有应用程序池
    Get-ChildItem IIS:\AppPools\# 重启应用程序池
    Restart-WebAppPool -Name "MyAppPool"# 启动/停止站点
    Start-Website -Name "MySite"
    Stop-Website -Name "MySite"# 创建新站点
    New-Website -Name "NewSite" -PhysicalPath "C:\inetpub\wwwroot\newsite" -ApplicationPool "NewSiteAppPool"# 创建新应用程序池
    New-WebAppPool -Name "NewAppPool"
    

    .NET CLI 命令

    # 发布 .NET Core 应用 (Framework-dependent)
    dotnet publish -c Release -o ./publish# 发布 .NET Core 应用 (Self-contained)
    dotnet publish -c Release -r win-x64 --self-contained -o ./publish# 运行应用(测试)
    dotnet run# 查看安装的 .NET 版本
    dotnet --info
    

    Web Deploy 命令

    # 打包 Web 应用程序
    msdeploy -verb:sync -source:iisApp="C:\inetpub\wwwroot\myapp" -dest:package=C:\temp\myapp.zip# 部署 Web 应用程序
    msdeploy -verb:sync -source:package=C:\temp\myapp.zip -dest:iisApp="Default Web Site/myapp" -skip:objectName=filePath,absolutePath=".+\\.config$" -enableRule:DoNotDeleteRule# 同步两个 IIS 站点
    msdeploy -verb:sync -source:iisApp="Default Web Site/source" -dest:iisApp="Default Web Site/destination"
    

    IIS 诊断命令

    # 检查 IIS 状态
    iisreset /status# 启动 IIS
    iisreset /start# 停止 IIS
    iisreset /stop# 重启 IIS
    iisreset /restart# 检查 ASP.NET 注册情况
    %windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis -lv# 重新注册 ASP.NET
    %windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis -i
    

    .NET Core 诊断命令

    # 检查 .NET Core 运行时安装
    dotnet --info# 验证 .NET Core 应用
    dotnet --verify myapplication.dll# 列出所有已安装的 .NET Core runtimes
    dotnet --list-runtimes# 检查 ASP.NET Core 模块安装
    %windir%\System32\inetsrv\appcmd list modules /module.name:"AspNetCoreModuleV2"
    

    性能监控命令

    # 监视 IIS Worker 进程
    Get-Process w3wp | Select-Object Id, ProcessName, @{Name="AppPool";Expression={(Get-WmiObject Win32_Process -Filter "ProcessId='$($_.Id)'").CommandLine -match "[-]ap[p]pool[:]([^\s]*)";$matches[1]}}, @{Name="Threads";Expression={$_.Threads.Count}}, @{Name="Memory";Expression={[Math]::Round($_.WorkingSet64/1MB,2)}}# 获取 IIS 性能计数器
    Get-Counter -Counter "\Web Service(_Total)\Current Connections"
    Get-Counter -Counter "\ASP.NET Applications(__Total__)\Requests/Sec"
    Get-Counter -Counter "\ASP.NET\Requests Queued"
    

    附录:IIS 常见故障排除参考

    HTTP 错误代码排错参考

    错误代码常见原因排查方向
    500应用程序错误检查应用程序错误日志、调试模式查看详细信息
    500.19配置错误检查 web.config 语法、确认模块安装
    500.21模块未安装安装必要的模块(如 ASP.NET Core Module)
    502.5进程故障检查应用程序能否独立运行,检查权限
    503应用程序池不可用检查应用程序池状态,查看事件日志
    404资源不存在检查路径、URL 重写规则、路由配置
    401未授权检查认证设置、用户权限
    403禁止访问检查文件/目录权限、IP 限制、URL 授权

    事件日志位置

    • 应用程序事件日志: 在 Windows 事件查看器中,Windows Logs -> Application
    • IIS 日志: 默认位置 %SystemDrive%\inetpub\logs\LogFiles
    • .NET Core 标准输出日志: 在 web.config 中由 stdoutLogFile 属性指定
    • ASP.NET 应用程序日志: 由应用程序配置决定,通常在 App_Data 或专用日志目录

    故障排除工具

    1. Failed Request Tracing (FREB):

      • 配置详细的请求跟踪,记录请求处理的每一步
      • 可用于诊断复杂的 IIS 和应用程序交互问题
    2. Process Monitor:

      • 监控文件系统、注册表和进程活动
      • 用于诊断权限问题和资源访问问题
    3. Process Explorer:

      • 详细查看进程信息、加载的模块和线程
      • 分析应用程序池进程问题
    4. Debug Diagnostic Tool:

      • 分析内存转储和应用程序崩溃
      • 诊断内存泄漏和性能问题
    5. Network Monitor:

      • 分析网络流量
      • 诊断与外部资源的连接问题

    模块检测命令

    # 检查 URL Rewrite 模块
    %windir%\System32\inetsrv\appcmd list modules /module.name:"RewriteModule"# 检查 ASP.NET Core 模块
    %windir%\System32\inetsrv\appcmd list modules /module.name:"AspNetCoreModuleV2"# 检查应用程序初始化模块
    %windir%\System32\inetsrv\appcmd list modules /module.name:"ApplicationInitializationModule"# 列出所有已安装的模块
    %windir%\System32\inetsrv\appcmd list modules
    

    安全性检查工具

    1. IIS Crypto:

      • 配置 SSL/TLS 设置
      • 实施安全最佳实践
    2. Security Compliance Manager:

      • 应用安全基线
      • 验证 IIS 和 Windows 设置
    3. URL Scan:

      • 过滤恶意请求
      • 加强 IIS 安全性

    通过掌握这些工具和命令,您将能够更有效地诊断和解决 IIS 中的 .NET 应用程序部署问题。

相关文章:

C#.net core部署IIS

Windows IIS 部署 .NET 应用详细指南 本文档提供了在 Windows Server 上使用 IIS 部署 .NET 应用&#xff08;包括 .NET Core 和传统 WebForms&#xff09;的完整步骤和最佳实践。 目录 概述环境准备.NET Core 应用部署 应用准备发布应用在 IIS 中配置应用池配置高级配置 .N…...

sql学习

Name 列中选取唯一不同的值 插入 更新 删除 筛选固定的行数 模糊查询 包含 范围 name的别名是n 两个表交集 左边包含全部 右边包含全部 重复的展示一条 重复的都会展示 创建一个新表&#xff0c;把字段复制近期 创建数据库 约束 创建索引 删除 函数 聚合函数...

OSPF实验

实验要求&#xff1a; 1.R5为ISP&#xff0c;其上只能配置IP地址&#xff1b;R4作为企业边界路由器&#xff0c; 出口公网地址需要通过PPP协议获取&#xff0c;并进行chap认证 &#xff08;上面这个不会做&#xff09; 2.整个OSPF环境IP基于172.16.0.0/16划分&#xff1b; 3.所…...

洛谷题目:P8624 [蓝桥杯 2015 省 AB] 垒骰子 题解 (本题简)

题目传送门: P8624 [蓝桥杯 2015 省 AB] 垒骰子 - 洛谷 (luogu.com.cn) 前言: 这道题要求我们计算将 个骰子垒成柱体且满足某些面不能紧贴的不同垒骰字方式的数量,并且结果需要对 取模。下面小亦来带大家逐步分析解题思路: #基本概念理解: 1、骰子特性: 一直骰子的…...

简单线段树的讲解(一点点的心得体会)

目录 一、初识线段树 图例&#xff1a; ​编辑 数组存储&#xff1a; 指针存储&#xff1a; 理由&#xff1a; build函数建树 二、线段树的区间修改维护 区间修改维护&#xff1a; 区间修改的操作&#xff1a; 递归更新过程&#xff1a; 区间修改update&#xff1a…...

在 Node.js 中使用原生 `http` 模块,获取请求的各个部分:**请求行、请求头、请求体、请求路径、查询字符串** 等内容

在 Node.js 中使用原生 http 模块&#xff0c;可以通过 req 对象来获取请求的各个部分&#xff1a;请求行、请求头、请求体、请求路径、查询字符串 等内容。 ✅ 一、基础结构 const http require(http); const url require(url);const server http.createServer((req, res)…...

深度学习--mnist数据集实现卷积神经网络的手写数字识别

文章目录 一、卷积神经网络CNN1、什么是CNN2、核心3、构造 二、案例1、下载数据集&#xff08;训练、测试集&#xff09;并展示画布2、打包数据图片3、判断系统使用的是CPU还是GPU4、定义CNN神经网络5、训练和测试模型 一、卷积神经网络CNN 1、什么是CNN 卷积神经网络是一种深…...

python基础知识点(1)

python语句 一行写一条语句 一行内写多行语句&#xff0c;使用分号分隔建议每行写一句&#xff0c;且结束时不写分号写在[ ]、{ }内的跨行语句&#xff0c;被视为一行语句\ 是续行符,实现分行书写功能 反斜杠表示下一行和本行是同一行 代码块与缩进 代码块复合语句&#xf…...

详解反射型 XSS 的后续利用方式:从基础窃取到高级组合拳攻击链

在网络安全领域&#xff0c;反射型跨站脚本攻击&#xff08;Reflected Cross-Site Scripting&#xff0c;简称反射型 XSS&#xff09;因其短暂的生命周期和临时性&#xff0c;常被视为“低危”漏洞&#xff0c;威胁性不如存储型或 DOM 型 XSS。然而&#xff0c;这种看法低估了它…...

【问题笔记】解决python虚拟环境运行脚本无法激活问题

【问题笔记】解决python虚拟环境运行脚本无法激活问题 错误提示问题所在解决方法**方法 1&#xff1a;临时更改执行策略****方法 2&#xff1a;永久更改执行策略** **完整流程示例** 错误提示 PS F:\PythonProject\0419graphrag-local-ollama-main> venv1\Scripts\activate…...

CF148D Bag of mice

题目传送门 思路 状态设计 设 d p i , j dp_{i, j} dpi,j​ 表示袋中有 i i i 个白鼠和 j j j 个黑鼠时&#xff0c; A A A 能赢的概率。 状态转移 现在考虑抓鼠情况&#xff1a; A A A 抓到白鼠&#xff1a;直接判 A A A 赢&#xff0c;概率是 i i j \frac{i}{i j}…...

精益数据分析(6/126):深入理解精益分析的核心要点

精益数据分析&#xff08;6/126&#xff09;&#xff1a;深入理解精益分析的核心要点 在创业和数据驱动的时代浪潮中&#xff0c;我们都在不断探索如何更好地利用数据推动业务发展。我希望通过和大家分享对《精益数据分析》的学习心得&#xff0c;一起在这个充满挑战和机遇的领…...

package.json ^、~、>、>=、* 详解

package.json ^、~、>、>、* 详解 在 Vue 项目中&#xff0c;package.json 文件的依赖项&#xff08;dependencies&#xff09;和开发依赖项&#xff08;devDependencies&#xff09;中&#xff0c;版本号前可能会带有一些特殊符号&#xff0c;例如 ^、~、>、<、&g…...

2025年赣教云智慧作业微课PPT模板

江西的老师们注意&#xff0c;2025年赣教云智慧作业微课PPT模版和往年不一样&#xff0c;千万不要搞错了&#xff0c;图上的才是正确的2025年的赣教云智慧作业微课PPT模版&#xff0c;赣教云智慧作业官网有问题&#xff0c;无法正确下载该模板&#xff0c;需要该模板的&#xf…...

Java PrintStream 类深度解析

Java PrintStream 类深度解析 便捷: 1.直接输出各种数据 2.自动刷新和自动换行(println方法) 3.支持字符串转义 4.自动编码(自动根据环境选择合适的编码方式) 1. 核心定位 PrintStream 是 FilterOutputStream 的子类,提供格式化输出能力,是标准输出 System.out 的…...

超简单的git学习教程

本博客仅用于记录学习和使用 前提声明全部内容全部来自下面廖雪峰网站&#xff0c;如果侵权联系我删除 1.小白学习看这篇&#xff0c;快速易懂入门&#xff0c;完整内容&#xff08;半天完成学习本地和远程仓库建立&#xff09; 简介 - Git教程 - 廖雪峰的官方网站 2.博客中…...

Yocto项目实战教程-第5章-5.1-5.2小节-BitBake的起源与源代码讲解

&#x1f50d; B站相应的视频教程&#xff1a; &#x1f4cc; Yocto项目实战教程-第5章-5.1-5.2小节-BitBake的起源与源代码讲解 记得三连&#xff0c;标为原始粉丝。 &#x1f4da; 系列持续更新中&#xff0c;B站搜索 “嵌入式 Jerry”&#xff0c;系统学 Yocto 不迷路&#…...

SQL注入相关知识

一、布尔盲注 1、布尔盲简介 布尔盲注是一种SQL注入攻击技术&#xff0c;用于在无法直接获取数据库查询结果的情况下&#xff0c;通过页面的响应来判断注入语句的真假&#xff0c;从而获取数据库中的敏感信息 2、布尔盲注工作原理 布尔盲注的核心在于利用SQL语句的布尔逻辑…...

Linux网络编程 深入解析Linux TCP:TCP实操,三次握手和四次挥手的底层分析

知识点1【TCP编程概述】 1、TCP的概述 客户端&#xff1a;主动连接服务器&#xff0c;和服务器进行通信 服务器&#xff1a;被动被客户端连接&#xff0c;启动新的线程或进程&#xff0c;服务器客户端&#xff08;并发服务器&#xff09; 这里重复TCP和UDP特点 TCP&#x…...

实验4基于神经网络的模式识别实验

实验原理 1. BP学习算法是通过反向学习过程使误差最小&#xff0c;其算法过程从输出节点开始&#xff0c;反向地向第一隐含层(即最接近输入层的隐含层)传播由总误差引起的权值修正。BP网络不仅含有输入节点和输出节点&#xff0c;而且含有一层或多层隐(层)节点。输入信号先向前…...

Rust网络编程实战:全面掌握reqwest库的高级用法

一、开篇导引 1.1 对比Python Requests解释为何reqwest是Rust生态的标杆HTTP客户端 在Python生态中&#xff0c;Requests 库以其简洁易用的API成为了HTTP客户端的首选。它使得开发者能够轻松地发送各种HTTP请求&#xff0c;处理响应&#xff0c;而无需过多关注底层细节。然而…...

【漫话机器学习系列】211.驻点(Stationary Points)

驻点&#xff08;Stationary Points&#xff09;&#xff1a;理解函数导数为零的关键位置 在数学分析、机器学习优化、物理建模等领域中&#xff0c;驻点&#xff08;Stationary Points&#xff09;是一个非常重要的概念。它们是函数图像中“停下来的点”&#xff0c;即导数为…...

图 - 最小生成树算法 - Kruskal - Prim

目录 前言 什么是最小生成树算法 Kruskal 克鲁斯卡尔 Prim 普利姆 结语 前言 在图中一共有两类算法&#xff0c;一种是最短路径&#xff0c;还有一种就是本篇要讲解的最小生成树算法了 其中&#xff0c;最短路径一共有三种&#xff0c;而最小生成树一共有两种&#xff…...

linux kernel irq相关函数详解

在Linux内核驱动开发中&#xff0c;处理中断涉及一系列关键函数&#xff0c;正确使用这些函数对确保驱动的稳定性和性能至关重要。以下是disable_irq、free_irq、platform_get_irq和request_irq等函数的详细解析&#xff0c;涵盖其功能、用法、注意事项及示例代码。 一、核心函…...

聊聊Doris的数据模型,如何用结构化设计解决实时分析难题

传统 OLAP 系统的局限 在大数据实时分析领域&#xff0c;数据模型设计直接决定了系统的查询性能、存储效率与业务适配性。Apache Doris作为新一代MPP分析型数据库&#xff0c;通过独创的多模型融合架构&#xff0c;在业内率先实现了"一份数据支持多种分析范式"的能力…...

[Swift]Xcode模拟器无法请求http接口问题

1.以前偷懒一直是这样设置 <key>NSAppTransportSecurity</key> <dict><key>NSAllowsArbitraryLoads</key><true/> </dict> 现在我在Xcode16.3上&#xff0c;这种设置方式在真机上能请求http&#xff08;应该是设备开启了开发者模式…...

kafka认证部署

首先启动 zookeeper /home/kafka/bin/zookeeper-server-start.sh /home/kafka/config/zookeeper.properties 创建SCRAM证书 /home/kafka/bin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config SCRAM-SHA-256[iterations8192,passwordliebe],SCRAM-SHA-512[p…...

基于STM32中断讲解

基于STM32中断讲解 一、NVIC讲解 简介&#xff1a;当一个中断请求到达时&#xff0c;NVIC会确定其优先级并决定是否应该中断当前执行的程序&#xff0c;以便及时响应和处理该中断请求。这种设计有助于提高系统的响应速度和可靠性&#xff0c;特别是在需要处理大量中断请求的实…...

Java 动态代理教程(JDK 动态代理)(以RPC 过程为例)

1. 什么是动态代理 在运行时为指定的接口自动生成代理对象&#xff0c;并通过 invoke 方法增强了这些对象的功能 2. 两个核心组件 java.lang.reflect.Proxy类 这个类提供了方法&#xff1a;newProxyInstance()用来创建一个代理对象 public static Object newProxyInstance(…...

Linux Privilege Escalation: LD_PRELOAD

声明&#xff1a;本文所有操作需在授权环境下进行&#xff0c;严禁非法使用&#xff01; 0x01 什么是 LD_PRELOAD&#xff1f; LD_PRELOAD 是 Linux 系统中一个特殊的环境变量&#xff0c;它允许用户在程序启动时优先加载自定义的动态链接库&#xff08;.so 文件&#xff09;&…...

Java 并发性能优化:线程池的最佳实践

Java 并发性能优化&#xff1a;线程池的最佳实践 在 Java 并发编程的世界里&#xff0c;线程池堪称提高应用性能与稳定性的神器。恰如其分地运用线程池&#xff0c;能让我们在多线程任务调度时游刃有余&#xff0c;既能避免线程频繁创建销毁带来的开销&#xff0c;又能合理管控…...

QML动画--ParallelAnimation和SequentialAnimation

一、ParallelAnimation ParallelAnimation 是 QML 中用于并行执行多个动画的容器动画类型&#xff0c;可以同时运行多个子动画。 基本用法 qml import QtQuick 2.15Rectangle {id: rectwidth: 100; height: 100color: "red"x: 0; y: 0; opacity: 1.0ParallelAnim…...

深入解析进程与线程:区别、联系及Java实现

引言 在现代操作系统中&#xff0c;进程和线程是并发编程的两大核心概念。理解它们的区别与联系对开发高性能、高可靠性的程序至关重要。本文将通过原理分析和Java代码示例&#xff0c;深入探讨这两个关键概念。 一、基本概念 1.1 进程&#xff08;Process&#xff09; 定义&…...

c++:线程(std::thread)

目录 从第一性原理出发&#xff1a;为什么需要线程&#xff1f; ✅ 本质定义&#xff1a; &#x1f4cc; 使用基本语法&#xff1a; 线程之间的“并发”与“并行”的区别 线程安全与数据竞争&#xff08;Race Condition&#xff09; 如何让线程“安全地”访问数据&#x…...

基于LSTM-AutoEncoder的心电信号时间序列数据异常检测(PyTorch版)

心电信号&#xff08;ECG&#xff09;的异常检测对心血管疾病早期预警至关重要&#xff0c;但传统方法面临时序依赖建模不足与噪声敏感等问题。本文使用一种基于LSTM-AutoEncoder的深度时序异常检测框架&#xff0c;通过编码器-解码器结构捕捉心电信号的长期时空依赖特征&#…...

[密码学基础]GM/T 0018-2023 密码设备应用接口规范深度解析:技术革新与开发者实践

GM/T 0018-2023 密码设备应用接口规范深度解析&#xff1a;技术革新与开发者实践 GM/T 0018-2023《密码设备应用接口规范》是中国密码行业的重要标准&#xff0c;于2023年12月4日发布&#xff0c;2024年6月1日正式实施&#xff0c;替代了2012年版标准。该标准旨在规范密码设备…...

深入理解 Java 多线程:锁策略与线程安全

文章目录 一、常见的锁策略1. 乐观锁&&悲观锁2. 读写锁3. 重量级锁&&轻量级锁4. 自旋锁5. 公平锁&&不公平锁6. 可重入锁 && 不可重入锁 二、CAS1. 什么是 CAS2. CAS 是怎么实现的3.CAS 有哪些应用1) 实现原子类2) 实现自旋锁 4. CAS 的 ABA 问…...

Java从入门到“放弃”(精通)之旅——数组的定义与使用⑥

Java从入门到“放弃”&#xff08;精通&#xff09;之旅&#x1f680;——数组⑥ 前言——什么是数组&#xff1f; 数组&#xff1a;可以看成是相同类型元素的一个集合&#xff0c;在内存中是一段连续的空间。比如现实中的车库&#xff0c;在java中&#xff0c;包含6个整形类…...

VsCode搭建

安全性问题的声明&#xff1a; VScode是一个由微软出品的开源软件编辑器 VScode下载 https://code.visualstudio.com/Download 官网直接下载即可&#xff0c;windows和linux的vscode使用命令是类似的。 VScode插件相关 为了方便安装&#xff0c;推荐设置并使用vscode插件的…...

【NLP 65、实践 ⑯ 基于Agent优化文章】

羁绊由我而起&#xff0c;痛苦也由我承担 —— 25.4.18 一、⭐【核心函数】定义大模型调用函数 call_large_model prompt&#xff1a;用户传入的提示词&#xff08;如 “请分析这篇作文的主题”&#xff09;&#xff0c;指导模型执行任务 client&#xff1a;Zhipu…...

【Redis】从单机架构到分布式,回溯架构的成长设计美学

前言 &#x1f31f;&#x1f31f;本期讲解关于分布式架构的发展相关知识介绍~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废…...

增量式PID基础解析与代码实例:温控系统

目录 1. 前言 2. 增量式PID控制的基本原理 2.1 PID控制的基本概念 2.2 增量式PID控制的特点 3. 增量式PID控制的Python实现&#xff1a;温控系统 3.1 构建增量式PID控制器 3.2 使用增量式PID控制器 3.3 运行模拟 3.4 完整代码 4. 参数调整与优化 4.1 参数选择 4.2…...

数据结构——栈以及相应的操作

栈(Stack) 在维基百科中是这样定义的&#xff1a; 堆栈(stack) 又称为栈或堆叠&#xff0c;是计算机科学中的一种抽象资料类型&#xff0c;只允许在有序的线性资料集合中的一端&#xff08;称为堆栈顶端&#xff0c;top&#xff09;进行加入数据&#xff08;push&#xff09;和…...

opencv 图像的旋转

图像的旋转 1 单点旋转2. 图片旋转&#xff08;cv2.getRotationMatrix2D&#xff09;3. 插值方法3.1 最近邻插值(cv2.INTER_NEAREST)3.2 双线性插值(cv2.INTER_LINEAR)3.3 像素区域插值&#xff08;cv2.INTER_AREA&#xff09;3.4 双三次插值&#xff08;cv2.INTER_CUBIC&#…...

P3916 图的遍历

P3916 图的遍历 题目来源-洛谷 题意 有向图中&#xff0c;找出每个节点能访问到的最大的节点 思路 每个节点的最大节点&#xff0c;不是最长距离&#xff0c;如果是每个节点都用dfs去找最大值&#xff0c;显然1e6*1e6 超时了&#xff0c;只能60分从第一个节点开始遍历&…...

Vue3 + Three.js 场景编辑器开发实践

文章目录 前言项目背景与意义项目技术栈在线演示核心功能实现1. 智能化场景管理2. 专业级模型处理3. 可视化材质与照明4. 相机与渲染引擎5. 场景操作 项目优势开发目标1. 几何模型和模型导入&#xff0c;场景新建按钮增加2. 提供场景内容的可视化编辑功能3. 渲染器场景&#xf…...

Vue3 本地打包启动白屏解决思路!! !

“为什么我访问 http://127.0.0.1:5501/index.html 白屏&#xff0c;删了 index.html 再访问 / 就又活过来了&#xff1f;” —— 你的项目与 SPA 路由的“宫斗大戏” 一、问题复现 场景 本地通过 VSCode Live Server&#xff08;或其他静态服务器&#xff09;启动了打包后的 V…...

Ubuntu 安装 Docker 教程(官方推荐方式)

✅ 步骤 1&#xff1a;卸载旧版本&#xff08;如果有&#xff09; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done---### ✅ 步骤 2&#xff1a;更新 APT 索引并安装依赖项bash sudo a…...

WPF 点击按钮,显示隐藏另一个控件

<Button Content"显示隐藏" Click"operationDetails_Click" /> private void operationDetails_Click(object sender, RoutedEventArgs e) { 另一个控件的Name.Visibility 另一个控件的Name.Visibility Visibility.Visible ? Visibility.Col…...

RBAC的使用

1、简述RBAC的作用及工作流程 Rbac基于角色访问控制&#xff0c;用于管理用户对集群资源的访问权限&#xff0c;通过定义角色和绑定规则&#xff0c;将用户与权限进行关联&#xff0c;作用&#xff1a;权限精细化管理&#xff0c;操作便捷与统一管理&#xff0c;动态调整权限。…...