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

时间:2013-04-24 16:17:38

标签: asp.net-mvc visual-studio

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

  

无法创建/影子副本'<装配>'当该文件已存在时。

正如我上面提到的,该项目是一个MVC4应用程序。我的工作流程通常是。

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

(我在附加/没有附带调试器的情况下得到错误。)我将永远感谢任何能告诉我如何避免此错误的人,并会及时发推文赞美

3 个答案:

答案 0 :(得分:27)

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

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

经过一些研究后,我还发现了this pre-build event which seems to be popular(这种解决方法似乎不起作用,也许它在以前的VS / .NET框架版本中都有用)

更新:替代解决方案

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

答案 1 :(得分:6)

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

This post说:

  

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

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

<configuration>
    <system.web>
        <hostingEnvironment shadowCopyBinAssemblies="false" />
    </system.web>
</configuration>

This post谈到禁用索引和/或防病毒,这表明构建项目会生成新文件,防病毒(或索引服务)会访问它们并锁定它们,就像阴影副本试图复制完全相同的文件。

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

答案 2 :(得分:1)

我在向我的网络项目添加新图片后收到此错误。

在VS中,每个图像都有一个名为&#34;复制到输出目录&#34;的属性。我选择了&#34;永远复制&#34;然后我收到了消息。

我将其更改为&#34;不要复制&#34; - 现在很高兴。

希望能有所帮助。