通过持续集成.NET CORE进行自动部署失败,因为它无法修改文件'xxx.exe'

时间:2017-01-05 18:48:07

标签: iis asp.net-core tfs2015 continuous-deployment msbuild-4.0

我创建了一个新的ASP.NET核心Web应用程序。我正在使用TFS(2015 Update 2)MS Build流程来构建我的应用程序并将其部署到我的Dev / QA服务器。我正在窗口服务器上运行带有Kesrel / IIS配置的代码。

我的构建步骤是:

  1. 命令行:dotnet Restore - 恢复我的nuget包
  2. 命令行:dotnet build -c Dev - 构建我的开发人员简介
  3. 命令行:dotnet publish --framework netcoreapp1.1 --runtime win7-x64 --output“C:_work \ dev \ svc”--configuration DEV --no-build
  4. 发布构建工件:从第3步的输出文件夹到我的网络服务器。
  5. 问题: 我遇到的主要问题是新的核心应用程序都作为控制台应用程序运行,因此除运行的w3svc.exe IIS应用程序外,还有一个“xxx.exe”文件正在运行。当我的Publish Build Artifacts步骤运行时,该过程失败,因为'xxx.exe'文件正在使用中,并且无法修改。

    据我所知,你必须使用“dotnet”CLI来构建和发布你的CORE应用程序,你不能使用VS Build步骤。

    我已尝试将“dotnet publish”命令直接指向Web服务器,但这有同样的问题。您可以在我的“dotnet publish”命令中看到我指示要使用的配置(DEV)。但是,即使我在VS中设置DEV进行webdeploy,“dotnet publish”命令也会忽略该命令,并将代码放在默认发布位置或我在命令中指定的位置。所以这不像旧的.net框架那样工作。

    我的托管团队不会授予我访问运行远程PowerShell脚本以停止IIS应用程序和控制台应用程序的权限,而且我没有看到任何其他构建步骤来构建CORE应用程序。

    我正在使用TFS 2015 Update 2.我们很快就会进入Update 3,但我不知道这是否会给我提供修复此功能的功能。如果有人知道,我很乐意听到它!

    如果我停止IIS应用程序池并确保控制台应用程序也已停止,我的构建和部署步骤完美地运行,但我不希望每次构建之前都必须手动停止IIS应用程序池。

2 个答案:

答案 0 :(得分:0)

由于停止IIS应用程序池可以解决问题,您可以尝试安装IIS Utilities来停止或启动应用程序池。

答案 1 :(得分:0)

ASP.NET Core仍然尊重app_offline.htm文件的存在,因此如果您可以在步骤4之前将具有该名称的文件复制到服务器上的应用程序目标,并在步骤4之后删除该文件,则部署应该工作。 ASP.NET Core模块监视此文件并关闭托管进程(.exe)。

我确信您可以从VSTS运行msdeploy任务,并且msdeploy有一个参数可以为您创建app_offline.htm文件(尽管ASP.NET Core模块中当前存在一个错误,该错误部署到Azure,其中文件包含是小写字母)。 Msdeploy确实可以将已发布的Core应用程序部署到IIS。