将.Net Core发布到IIS - 进程无法访问文件

时间:2018-01-04 18:17:58

标签: iis asp.net-core .net-core

我正在使用FTP将我的ASP .Net Core 2.0应用程序部署到我的远程服务器。远程服务器正在使用IIS 8.当我发布我的应用程序时,我收到以下错误。

Unable to add 'Project.dll' to the Web site.  The process cannot access the file because it is being used by another process (550).

我能够通过首先在发布目录上手动创建app_offline.htm,然后通过Visual Studio 2017发布我的应用程序来绕过这一点。

我在想,有没有更简单的方法呢?或者有一种简单的方法可以编写脚本,以便在发布之前自动创建app_offline吗?发布后删除?

1 个答案:

答案 0 :(得分:3)

任何有点好奇的人,我放弃了依赖VS来发布我的.NET Core项目。我现在正在使用我创建的 WinSCP 和_PublishToWeb.bat脚本来完成任务。

我首先在根目录my publish文件夹中创建了一个名为_app.offline.htm的文件。然后当我需要发布时,我运行下面的脚本。

此脚本执行以下操作:
 1.将.NET Core项目构建到特定文件夹,我们称之为“_dist”文件夹  2.连接到我的ftp服务器/发布文件夹并将“_app_offline.html”重命名为“app_offline.html”,以便服务器脱机。
 3.将_dist文件夹与发布文件夹同步  4.完成后,将“app_offline.htm”更改为“_app_offline.html”,以便重新启动网站。

<强> _PublishToWeb.bat

echo off
echo Publishing to ProjectName (Optional)
set ProjectRemoteFolder=RemoteFolderName
set ConnectionString=ftp://username:password@serverIp:serverPort
set WinSCP="path to WinSCP.com"
set ProjectDistPath="a folder where dotnet publish will build the project to"
set WebAppProject="path of the project. dotnet publish will run here"

rem Build project and put it in to distribution folder
cd %WebAppProject%
dotnet publish -c Release -o %ProjectDistPath%

rem Connect to FTP and synchronize folder
%WinSCP% /command "open %ConnectionString%/%ProjectRemoteFolder%/" "mv _app_offline.htm app_offline.htm" "synchronize remote %ProjectDistPath%" "mv app_offline.htm _app_offline.htm" "exit"

rem pause

我确信那里有更好的解决方案,但到目前为止,这对我来说一直很好。