• iis发布DLL,进程无法访问该文件,因为它正在被其他进程使用


    (.net6)iis发布DLL,进程无法访问该文件,因为它正在被其他进程使用

    问题

    虽然最近使用了.net6,但是公司服务器仍然是windows,于是还是跟往常一样部署在iis.
    但是再使用过程中发现iis发布站点后,无法像以前.net framework那样可以直接替换DLL文件来发布。会提示进程无法访问该文件,因为它正在被其他进程使用。
    经过上海.net群里大石头的指导,发现可以修改webconfig文件来解决这个问

    解决思路

    .NET 6 Preview 3的更新改动中有这样一段描述

    IIS 中的浅拷贝支持
    我们在 IIS 的 ASP.NET Core 模块中添加了一个新功能,以增加对浅拷贝应用程序程序集的支持。目前,.NET 在 Windows 上运行时锁定了应用程序的二进制文件,使得在应用程序仍在运行时无法替换二进制文件。虽然我们的建议仍然是使用应用程序脱机文件,但我们认识到在某些情况下(例如 FTP 部署)不可能这样做。

    在这种情况下,你可以通过自定义 ASP.NET Core 模块处理程序设置来启用浅拷贝。在大多数情况下,ASP.NET Core 应用程序的web.config不在源代码版本控制中,你可以修改它(它们通常是由 SDK 生成的)。你可以添加这个web.config示例来开始。

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <!-- To customize the asp.net core module uncomment and edit the following section.
      For more info see https://go.microsoft.com/fwlink/?linkid=838655 -->
    
      <system.webServer>
        <handlers>
          <remove name="aspNetCore"/>
          <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModulev2" resourceType="Unspecified"/>
        </handlers>
        <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout">
          <handlerSettings>
            <handlerSetting name="experimentalEnableShadowCopy" value="true" />
            <handlerSetting name="shadowCopyDirectory" value="../ShadowCopyDirectory/" />
            <!-- Only enable handler logging if you encounter issues-->
            <!--<handlerSetting name="debugFile" value=".\logs\aspnetcore-debug.log" />-->
            <!--<handlerSetting name="debugLevel" value="FILE,TRACE" />-->
          </handlerSettings>
        </aspNetCore>
      </system.webServer>
    </configuration>
    

    解决方法

    先下载Hosting Bundle,iis部署所需要的扩展包,具体看下图。

    image

    链接地址 https://dotnet.microsoft.com/en-us/download/dotnet/6.0

    修改iis生成的配置文件

    添加红框内修改的地方即可。实际测试下来只有Runtime 6.0.3以上版本才有效

    image

    重启IIS或者重启服务器

    现在已经可以覆盖DLL,也可以使用FTP的方式来发布文件了

  • 相关阅读:
    Python的命名空间及作用域
    STM32 RTC时钟的配置
    STM32 输入捕获配置
    stm32 看门狗配置
    led灯的驱动电流和电阻
    STM32中TIMx的映射及其通道
    STM32中断定时,控制LED灯
    STM32 用c语言控制4个LED灯从左向右无限流动
    SYSTEMsyssys.c:33:7: error: expected '(' before 'void' __ASM void MSR_MSP(u32 addr)
    STM32 PWM输出(映射)
  • 原文地址:https://www.cnblogs.com/harpz/p/16174876.html
Copyright © 2020-2023  润新知