我的解决方案中有一个主要的ASP.Net MVC项目和其他插件项目。 构建一个插件项目时,他们的文件(dll,views ......)会在一个构建后的事件中复制到主要的asp.net项目中。
xcopy“$(TargetDir)WebPortal.Plugin.MyPlugin.dll”“$(SolutionDir)WebPortal \ Plugins \ MyPlugin \”/ Y xcopy / E / Y“$(ProjectDir)Views”“$(SolutionDir)WebPortal \ Plugins \ MyPlugin \ Views \”
我的问题是插件DLL的副本。我第二次构建时出现“共享冲突”错误。
我找到的唯一解决方案是在构建插件时手动停止IIS服务器,以便从IIS进程中释放DLL。
我需要提示自动执行,因为它非常繁琐!
答案 0 :(得分:0)
您可以像这样在构建后事件中自动停止和启动万维网服务:
net stop w3svc
xcopy "$(TargetDir)WebPortal.Plugin.MyPlugin.dll" "$(SolutionDir)WebPortal\Plugins\MyPlugin\" /Y
xcopy /E /Y "$(ProjectDir)Views" "$(SolutionDir)WebPortal\Plugins\MyPlugin\Views\"
net start w3svc
如果您仍然面临共享冲突错误,那么您可以在停止 IIS 服务后在上面的脚本中休眠几秒钟。您需要在计算机上安装 PowerShell 才能使其正常工作:
net stop w3svc
powershell -command "Start-Sleep -s 5"
xcopy "$(TargetDir)WebPortal.Plugin.MyPlugin.dll" "$(SolutionDir)WebPortal\Plugins\MyPlugin\" /Y
xcopy /E /Y "$(ProjectDir)Views" "$(SolutionDir)WebPortal\Plugins\MyPlugin\Views\"
net start w3svc
如果您的 PC 上没有 powershell,请尝试 ping
命令,该命令对于引入睡眠来说有点笨拙,但会起作用:
net stop w3svc
ping -n 6 127.0.0.1 > nul
xcopy "$(TargetDir)WebPortal.Plugin.MyPlugin.dll" "$(SolutionDir)WebPortal\Plugins\MyPlugin\" /Y
xcopy /E /Y "$(ProjectDir)Views" "$(SolutionDir)WebPortal\Plugins\MyPlugin\Views\"
net start w3svc
我希望上述解决方案之一对您有用。