【问题标题】:Visual studio & ASP.Net : Sharing violation in post-build eventVisual Studio 和 ASP.Net:构建后事件中的共享冲突
【发布时间】:2015-11-02 11:10:20
【问题描述】:

我的解决方案中有一个主要的 ASP.Net MVC 项目和其他插件项目。 构建插件项目时,它们的文件(dll、视图...)将复制到主 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。

我需要一个提示来自动完成,因为它非常乏味!

【问题讨论】:

  • 首先,你为什么要使用插件?是否适用于实际实现不同的多租户解决方案?还有什么?我问这个的原因是我已经看到在单个实现中使用插件样式架构来“简化”,它除了做任何事情之外。
  • 是的,它适用于多租户解决方案。我使用 MEF 和附加控制器。
  • 这是对特定功能有不同的实现吗?还是别的什么?
  • 就是在泛型页面中添加具体功能,并添加整个具体页面。

标签: asp.net visual-studio


【解决方案1】:

您可以像这样在构建后事件中自动停止和启动万维网服务:

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

我希望上述解决方案之一对您有用。

【讨论】:

    猜你喜欢
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多