部署PrecompiledApp问题

Chr*_*sen 9 asp.net pre-compilation web-deployment

自动生成的PrecompiledApp.config让我有些头疼.我自动部署旧网站,50%的时间部署我得到这个错误:

System.IO.IOException: The process cannot access the file '\\web.prod.local\c$\Sites\Website\PrecompiledApp.config' because it is being used by another process.
Run Code Online (Sandbox Code Playgroud)

内容:

<precompiledApp version="2" updatable="true"/>
Run Code Online (Sandbox Code Playgroud)

据我所知,网站使用一些卷影复制功能,允许更新网站"运行时",如app.config等.但这1文件似乎是一个例外.

除了在部署时停止网站,有人可以建议一个解决方法吗?

亲切的问候

Ser*_*ltz 1

根据错误消息中的路径判断,我发现您在部署时尝试通过网络共享复制文件。直接通过网络共享或 FTP 等更新文件是不好的做法。实际上,这就是原因。网络部署速度很慢,虽然某些文件仍在更新/上传,但服务器上的 ASP.NET 已经尝试回收应用程序,将文件复制到“临时 ASP.NET 文件夹”等。

部署最佳实践:

对预编译站点进行 ZIP 压缩、上传,然后在服务器上远程运行 UNZIP

以下是远程运行 UNZIP 的方法:

plink -ssh -l USERNAME -pw PASSWORD web.prod.local c:\Sites\Website\unzip -q -o c:\Sites\Website\site.zip -d c:\Sites\Website\
Run Code Online (Sandbox Code Playgroud)

“plink”是一个免费的 Windows SSH 工具(命令行),您的开发计算机上需要它

“web.prod.local”是您的服务器地址。

“c:\Sites\Website\”是您的网站在服务器上的路径

您需要在服务器上安装 SSH 才能远程运行命令,最简单的选择是安装免费工具:“freesshd”(google 一下)

将“unzip.exe”也放到服务器上,您会看到它就在那里被调用。最简单的方法是将其直接放入 c:\Sites\Website\

附言。这只是一个例子,您可以提出自己的解决方案