9

自动生成的 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.

内容:

<precompiledApp version="2" updatable="true"/>

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

除了在部署时停止网站之外,任何人都可以提出解决方法吗?

亲切的问候

4

1 回答 1

1

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

部署最佳实践:

压缩您的预编译站点,上传,然后在服务器上远程运行 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\

“plink”是一个免费的 Windows SSH 工具(命令行),你需要在你的开发机器上使用它

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

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

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

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

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

于 2015-05-01T11:05:53.500 回答