26

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

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

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

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

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

4

3 回答 3

26

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

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

经过一番研究,我还发现了这个似乎很受欢迎的预构建事件(这个变通方法似乎不起作用,也许它在以前版本的 VS / .NET 框架中起作用)

更新:替代解决方案

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

于 2013-04-24T16:52:15.120 回答
7

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

这篇文章说:

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

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

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

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

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

于 2013-06-18T10:02:37.960 回答
1

将新图像添加到我的 Web 项目后,我收到此错误。

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

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

希望对某人有所帮助。

于 2016-04-11T15:33:55.867 回答