ASP.Net无法创建/卷影副本

时间:2009-06-17 13:58:03

标签: asp.net assemblies web-config

在开发ASP.Net应用程序时,我反复收到此错误:

  Cannot create/shadow copy 'XXXXX' when that file already exists

XXXXX是一个随机DLL。通常,DLL是Microsoft企业库中的DLL之一,但它有所不同。

这是非常随机的,而且非常令人沮丧。我会花几个小时没有收到错误,然后每10-20分钟得到一次这个错误。

我见过几种解决方案。例如,this question。我尝试过使用Clean Solution选项,我也只是重新启动了我的本地IIS。但是,它仍然以相同的随机但持续的频率发生。

我也看到很多人提到在配置文件中使用此选项:

<hostingEnvironment shadowCopyBinAssemblies="false" />

然而,其他人已经提到它存在问题,绝对不应该用于生产。

那么,我应该放弃并尝试使用shadowCopyBinAssemblies选项吗? (并确保不要将此更改复制到其他环境。)我是唯一经常遇到此问题的人吗?

注意:我正在使用Visual Studio 2008.

12 个答案:

答案 0 :(得分:39)

在10-30秒之间等待并点击刷新。出于某种原因,这总是对我有用。

答案 1 :(得分:23)

以下变通方法来自this now defunct connect issue

  • <hostingEnvironment shadowCopyBinAssemblies="false" />添加到您的web.config文件的<system.web>部分。
  • 遇到问题时重新启动Cassini
  • 如果出现错误,请停止调试器,右键单击解决方案并“清除解决方案”。按F5重新启动调试器。这真的很烦人,因为它对我有50%的失败率,你会认为不应该是CLEAN SOLUTION的手动选项!这个1200美元的POS应用程序应该自动为你清理它! / LI>
  • 这是另一种可能对某些人更有吸引力的解决方法,由Gary Farr提供(http://blogs.claritycon.com/blogs/gary_farr/archive/2007/03/09/2888.aspx)。
  • 将以下内容添加到预构建事件中:

    IF EXIST $(TargetPath).LOCKED (del $(TargetPath).LOCKED) ELSE (IF EXIST $(TargetPath) (move $(TargetPath) $(TargetPath).LOCKED))

  • 为我完成这项工作的解决方法是使用“Build”使用“Build Solution”而不是使用“Build”

  • 成功构建后,我数到10,然后刷新我的网络表单。
  • 我发现通过向IIS重新注册ASP.NET,问题“消失了” - 我从未遇到过这个问题。您需要在命令行上运行以下命令:
    C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i。这很可能对所有人都不起作用 - 这是一个复杂的问题。
  • 重启VS。
  • 清理解决方案时,会发出一些有关无法删除的文件的警告。这些文件具有只读属性集。将这些文件的属性设置为读/写后,问题就解决了。
  • 重新启动IIS

编辑:从an old version of the page检索的项目(由archive.org提供)。

答案 2 :(得分:5)

重新启动Visual Studio,这对我有用。

答案 3 :(得分:1)

打开项目属性,打开Web选项卡,确保未选中Enable Edit and Continue选项。

答案 4 :(得分:1)

在我的情况下,只有iisreset有效。

答案 5 :(得分:0)

在使用我们创建的导入DLL时,我经常遇到此问题。

尝试停止发生失败,甚至引入了不同的问题,但无论什么时候发生,我都会做一个重建解决方案,问题会立即消失。

此外,自从使用Visual Studio 2002以来,我没有看到这个问题。2008年没有我所知道的这个问题,2005年也没有。你使用的是旧的VS吗?

答案 6 :(得分:0)

转到设计模式然后右键单击并在浏览器中点击视图,问题就会消失 Anil Madan

答案 7 :(得分:0)

在预构建事件命令行中添加这些行,它基本上解锁了Visual Studio中的DLL:

 IF EXIST $(TargetPath).LOCKED  (del $(TargetPath).LOCKED)
  ELSE (IF EXIST $(TargetPath) (move $(TargetPath) $(TargetPath).LOCKED))

重新编译,无法复制DLL错误。

答案 8 :(得分:0)

如果您使用实体框架:

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

<强>解决方案: “等待几秒钟刷新页面。”

有关详细信息,请访问:Advanced Entity Framework 6 Scenarios for an MVC 5 Web Application (12 of 12)

答案 9 :(得分:0)

我遇到了同样的问题,将此代码放在web.config中为我工作。

<hostingEnvironment shadowCopyBinAssemblies="false" />

答案 10 :(得分:0)

您只需刷新(F5)您的页面。

答案 11 :(得分:0)

清理并再次构建它。它帮助我,它经常为我工作