You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET部署至IIS Web服务器后代码变更不生效

解决.NET Framework IIS部署后代码变更不稳定的问题

1. 确认文件复制是否完全覆盖

  • 检查生产服务器上Login.aspx.cs的修改时间,确保是你最新部署的版本。文件复制失败常因IIS进程锁定文件,建议用命令强制覆盖,或先停站点再复制:
    iisreset /stop
    xcopy "本地发布目录\Login.aspx.cs" "服务器站点目录\Login.aspx.cs" /Y /R
    iisreset /start
    
  • 同时确认服务器上Login.aspx文件的CodeFile属性指向正确:CodeFile="Login.aspx.cs",避免路径或文件名错误导致加载旧文件。

2. 调整应用程序池回收规则

  • 应用程序池自动回收会导致加载旧编译文件,临时禁用定时回收排查:
    1. 打开IIS管理器,找到对应站点的应用程序池
    2. 右键→高级设置
    3. 将“回收”下的“固定时间间隔(分钟)”设为0,同时检查“私有内存限制(KB)”是否过低导致频繁回收

3. 验证ASP.NET编译模式

  • 临时开启实时编译确认缓存问题:在站点web.config中修改:
    <compilation debug="true" batch="false" />
    
    开启后每次请求会重新编译页面,若变更稳定生效,说明之前缓存未彻底清除。生产环境改回debug="false",但部署时需确保编译程序集完全替换。

4. 指定专属临时编译目录

  • 多应用共享Temporary ASP.NET Files可能导致缓存清理不彻底,在web.config中设置专属临时目录:
    <compilation tempDirectory="D:\CustomASPNetTemp" />
    
    部署后删除该目录下的文件,精准清理当前站点的编译缓存。

5. 检查文件系统权限

  • 确保IIS应用程序池身份(如IIS AppPool\你的池名称)对站点目录及临时目录拥有读取+写入权限,权限不足会导致ASP.NET无法编译新代码,只能加载旧版本。

6. 排查预编译站点冲突

  • 如果之前站点是预编译部署的,直接替换cs文件不会生效——预编译后cs文件已被打包成程序集。确认当前采用的是非预编译的FileSystem发布方式,若之前是预编译,需重新预编译整个站点再部署。

内容的提问来源于stack exchange,提问作者Cj Cabug-os

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 21:12:03