我在 c# .net 中构建了一个 Windows 服务。我添加了 Pre-Build 和 Post-Build 事件以在构建上自动部署我的服务。但有时我得到这个错误:
无法将文件“[CompletPath...]\bin\Debug\Business.Data.dll”复制到“bin\Debug\Business.Data.dll”。该进程无法访问文件“bin\Debug\Business.Data.dll”,因为它正被另一个进程使用。
在 Pre-Build 事件中,我将关闭服务,杀死所有使用 Debug 目录中文件的任务并卸载服务。我在 Pre-Build 事件中运行的 .bat 中有代码:
SET executionPath=%~dp0
SET serviceName=%1
SET frameworkPath=%2
SET targetServicePath=%3
SET targetBinPath=%~4
set targetBinPath=%targetBinPath:~0,-2%
net stop %serviceName%
powershell -NonInteractive -executionpolicy Unrestricted -file "%executionPath%\unlockfiles.ps1" "%targetBinPath%"
%frameworkPath%\installutil.exe /u %targetServicePath%
Exit /b 0
在我正在安装和启动服务的构建后事件中,即使这不是问题,也有代码,因为我在构建时遇到了错误,所以构建后事件没有执行。
SET serviceName=%1
SET frameworkPath=%2
SET targetServicePath=%3
%frameworkPath%\installutil.exe /ShowCallStack %targetServicePath%
net start %serviceName%
我并不总是有问题。我通常在第一次构建时遇到问题,我正在清理解决方案,再次构建并且通常它在此之后工作。