自动生成的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个文件似乎是个异常(exception)。
除了在部署过程中停止网站外,任何人都可以建议解决方法吗?
亲切的问候
最佳答案
从错误消息中的路径判断,我看到您正在尝试在部署时通过网络共享复制文件。 这是一种不好的做法,直接通过网络共享或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\
“plink”是Windows上的免费SSH工具(命令行),您需要在开发计算机上使用它
“web.prod.local”是您的服务器地址。
“c:\Sites\Website\”是您的网站在服务器上的路径
您需要在服务器上安装SSH才能远程运行命令,最简单的选择就是也安装免费工具:“freesshd”(使用谷歌浏览器)
将“unzip.exe”也拖放到服务器上,您会看到它在那里被调用。最简单的方法是将其直接放入c:\Sites\Website\
PS。这只是一个例子,您可以提出自己的解决方案
关于asp.net - 部署PrecompiledApp问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19398090/