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

配置.NET 6+IIS的shadow copy后dll仍被锁定如何解决

.NET 6 IIS环境下shadow copy功能dll锁定问题解决方案

常规排查步骤

  • 确认web.config配置位置正确性
    handlerSettings节点必须嵌套在aspNetCore节点内部,完整正确配置示例如下:
    <configuration>
      <system.webServer>
        <handlers>
          <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
        </handlers>
        <aspNetCore processPath="dotnet" arguments=".\你的项目.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess">
          <handlerSettings>
            <handlerSetting name="experimentalEnableShadowCopy" value="true" />
            <handlerSetting name="shadowCopyDirectory" value="C:\绝对路径\ShadowCopyDirectory\" />
          </handlerSettings>
        </aspNetCore>
      </system.webServer>
    </configuration>
    
    建议优先使用绝对路径配置shadowCopyDirectory,避免相对路径解析异常导致功能失效。
  • 验证基础环境配置
    1. 对应IIS应用池的.NET CLR版本需设置为「无托管代码」
    2. 确认.NET 6 Hosting Bundle安装顺序正确:必须先安装IIS服务,再安装Hosting Bundle,顺序颠倒会导致ASP.NET Core模块注册异常,需重新安装Hosting Bundle修复
    3. 如果你运行的是.NET 5项目,建议将项目框架升级至.NET 6,该实验性功能对低版本.NET的适配存在已知兼容问题
  • 检查目录权限
    给站点根目录、ShadowCopy目录都添加对应应用池身份(格式为IIS AppPool\你的应用池名称)的读取、写入、执行权限。
  • 调整IIS应用池配置
    关闭应用池的「重叠回收」功能,同时开启「禁用重叠回收」选项,避免旧进程未退出时仍持有原目录dll的句柄。

兜底解决方案

如果以上配置都正确仍存在锁定问题,可在项目.csproj文件中添加编译钩子,编译前后自动启停对应IIS应用池,配置示例如下:

<Target Name="StopAppPool" BeforeTargets="PreBuildEvent">
  <Exec Command="%windir%\system32\inetsrv\appcmd stop apppool /apppool.name:\"你的应用池名称\"" />
</Target>
<Target Name="StartAppPool" AfterTargets="PostBuildEvent">
  <Exec Command="%windir%\system32\inetsrv\appcmd start apppool /apppool.name:\"你的应用池名称\"" />
</Target>

使用该方案需要运行Visual Studio的账号拥有IIS操作权限。

内容的提问来源于stack exchange,提问作者Chris Roberts

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:06:04