是什么导致asp.net无法创建/卷影复制错误?

26 asp.net-mvc visual-studio

我一天有几次在运行我的asp.net mvc4项目时收到此错误.我不是在问这意味着什么,或者如何解决它,而是我在做什么来引起它呢?它真的开始让我感到烦恼,如果我能通过改变我的工作流程而让它消失,我会的.

当该文件已存在时,无法创建/卷影复制'<assembly>'.

如上所述,该项目是一个MVC4应用程序.我的工作流程通常是.

  • 进行更改(代码或html)
  • 如果是代码,重建项目(使用键盘快捷键CTRL + SHIFT + B)
  • 刷新页面
  • 看到恼人的错误
    • 清理解决方案
    • 重建解决方案
    • 刷新页面
  • 验证变更
  • 转到10

(我在附加/不附带调试器的情况下得到错误.)我将永远感谢任何能告诉我如何避免此错误的人,并会立即发表推文

dan*_*wig 26

我觉得这也很烦人.当您在构建完全完成之前尝试在浏览器中刷新页面时,似乎会发生这种情况.在构建完成后尝试计数到三千,然后在浏览器中刷新.应该通过该点完成创建/卷影复制.

我也认为你不应该"清理解决方案".我相信重建是一个干净的+构建,所以你可能会清理两次.

经过一番研究后,我发现这个预制活动似乎很受欢迎. (这种解决方法似乎不起作用,也许它在先前版本的VS/.NET框架中做到了)

更新:替代解决方案

另一种方法是,当您看到YSOD时,只需在浏览器中输入不同的URL并加载它即可.然后单击后退按钮并刷新以首先进入您尝试重新加载的页面.


Thi*_*y_S 7

导致此错误的原因似乎是做阴影副本(说明显而易见的......),即在一个文件夹中生成文件然后将其读取以将其复制到其他位置.我认为造成这个问题的原因是生成或不生成第一个文件,以及何时/如何复制它,无论你的行为是什么.这个第一个文件(将被复制阴影)是否需要重新生成,因此重新复制阴影?

这篇文章说:

默认情况下,在ASP.NET创建的每个appdomain上都启用了卷影副本.加载的程序集将复制到卷影副本缓存目录,并将从那里使用.这样原始文件就不会被锁定并且可以被修改.

他们的修复方法是防止影子复制.但是我并没有完全理解asp.net上下文中阴影副本的作用,也许有人可以澄清是否有任何不良副作用来禁用它:

<configuration>
    <system.web>
        <hostingEnvironment shadowCopyBinAssemblies="false" />
    </system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)

这篇文章讨论了禁用索引和/或防病毒,这表明构建项目会生成新文件,并且防病毒(或索引服务)会访问它们并锁定它们,就像卷影副本试图复制完全相同的文件一样.

我经常得到他的错误,从来没有发现我做的具体行动导致错误.我进行了代码更改,按F5(运行/播放按钮),在Web浏览器中获取错误,关闭Web浏览器,再次按F5.它现在有效.我不干净,我不重建.但是,使用第二个F5/Run,我相信VS检测到没有代码更改,因此,可能没有重做阴影副本?或者也许这次阴影副本的时间略有不同而且有效.

  • 禁用卷影副本的问题是VS无法替换下一个版本的程序集; 相反,Web应用程序将使用程序集文件.卷影副本创建要加载的程序集的副本,允许随时覆盖原始程序集. (2认同)