【问题标题】:What causes the asp.net Cannot create/shadow copy error?是什么导致 asp.net 无法创建/卷影复制错误?
【发布时间】:2016-04-11 23:33:55
【问题描述】:

在运行我的 asp.net mvc4 项目时,我每天多次收到此错误。我不是在问这意味着什么,或者如何解决它,而是我在做什么来导致它?它真的开始困扰我了,如果我能通过改变我的工作流程让它消失,我会的。

当该文件已存在时,无法创建/卷影复制“”。

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

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

(无论是否附加调试器,我都会收到错误。)我将永远感谢任何可以告诉我如何避免此错误的人,并会及时发布您的赞美

【问题讨论】:

  • 你有没有弄明白这个?在 14 年 11 月使用 Visual Studio 2013 Update 4 时仍然存在此问题!
  • @JMK 正如公认的答案所暗示的那样,我只是在构建完成后停下来数到 3。它通常不再是问题了,因为实时重新加载会为我解决这个问题

标签: asp.net-mvc visual-studio


【解决方案1】:

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

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

经过一番研究,我也找到了this pre-build event which seems to be popular(这个变通方法好像不行,可能在以前版本的VS/.NET框架中是这样)

更新:替代解决方案

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

【讨论】:

  • 让我尝试一下 :) 关于清理/重建 ux.stackexchange.com/questions/11660/…
  • 我在快速工作时经常遇到此卷影复制异常,而且我从不清理。如果时间对我来说,重建和暂停可以 100% 解决它。
  • 我安装了 SSD,所以我怀疑是延迟。
  • 我看到了 Scott H. 和 Jonh G. 的 JumpStart,他们是 ASP.NET 的领导者,他们现场遇到了这个问题。然后,他们谈到了他们正在尝试尽快解决的 VS 2012 Bug。
  • 我无法挖掘你的 Twitter 个人资料,所以我只想在这里说声谢谢。 :)
【解决方案2】:

导致此错误的原因似乎是在进行卷影复制(说明显而易见...),即在一个文件夹中生成一个文件,然后读取它以将其复制到其他地方。我认为导致问题的原因是生成或不生成第一个文件,以及何时/如何复制它,无论您的操作是什么。第一个文件(将被影子复制)是否需要重新生成,因此需要重新影子复制?

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 检测到没有代码更改,因此,可能没有重做卷影副本?或者这一次卷影副本的时间略有不同,但它可以工作。

【讨论】:

  • 禁用卷影复制的问题是VS将无法在下一次构建时替换程序集;相反,程序集文件将被 Web 应用程序使用。卷影副本会创建要加载的程序集的副本,以便随时覆盖原始程序集。
【解决方案3】:

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

在 VS 中,每个图像都有一个名为“复制到输出目录”的属性。我选择了“始终复制”,然后我收到了消息。

我把它改成了“不要复制”——现在它很开心。

希望对某人有所帮助。

【讨论】:

    猜你喜欢
    • 2010-11-03
    • 1970-01-01
    • 2021-12-19
    • 2019-11-30
    • 2016-04-30
    • 1970-01-01
    • 2011-03-18
    • 2013-06-23
    • 2010-09-19
    相关资源
    最近更新 更多