mvc核心中的卷影副本

时间:2017-06-21 22:50:30

标签: c# asp.net-core-mvc

在Asp.Net中,卷影复制可以在不卸载应用程序域的情况下更新应用程序域中使用的程序集。 由于Mvc Core不支持AppDomain而无法加载不同版本的程序集。 我正在寻找一种在运行时更新程序集而无需卸载或停止站点的方法。 我的目标是使用新版本更新站点(如果在远程服务器上可用)。

3 个答案:

答案 0 :(得分:1)

您可以在此处找到解决方法:The site DLL seems to be intermittently locked when publishing。诀窍包括创建一个子目录(例如。/ PREVIOUS),移动旧的'在该目录中的文件,将web.config更改为指向该目录中的exe,发布新站点并再次更改web.config。当然,这应该是脚本化的...如果您已设置'删除目的地的其他文件'您无法使用子目录,但您可以将该目录放在其他位置(只要IIS可以访问它)。

答案 1 :(得分:1)

我也想这样。我所知道的当前最佳解决方法 - 当您要覆盖正在使用的程序集时,将文件放在名为的文件夹中:

  

app_offline.htm

...这会暂时使网站脱机,允许您覆盖文件。完成后删除或重命名文件。

如果您编写脚本,则影响最小。

答案 2 :(得分:0)

我找到了解决方案,该解决方案为我解决了VS2017中由于IIS Express产生的dotnet.exe进程锁定程序集而导致的构建错误问题。我刚刚将预构建脚本添加到ASP.NET Core Web应用程序中,触摸了位于隐藏的.vs目录中的applicationhost.config文件,IIS Express将其用作配置文件。它在.csproj文件中看起来像这样:

  <Target Name="PreBuild" BeforeTargets="PreBuildEvent">
    <Exec Command="IF EXIST &quot;$(SolutionDir)\.vs\config\applicationhost.config&quot; (pushd $(SolutionDir)\.vs\config\ &amp; copy /b applicationhost.config +,, &amp; popd)" />
  </Target>

一旦脚本触碰到文件,IIS Express将终止dotnet.exe进程,从而使构建成功进行。新的dotnet.exe进程是在对Web应用程序的下一个请求中产生的。