Visual Studio生成失败:无法复制EXE

更新:重现此错误的示例项目可以在此处找到Microsoft Connect。 我还测试并验证了下面接受的答案中给出的解决方案适用于该示例项目。 如果这个解决方案不适合你,你可能会遇到一个不同的问题(属于一个单独的问题)。


这是一个在Stack Overflow和其他地方都提到过的问题,但是我发现的这些建议都没有帮助我,所以我只需要尝试提出一个新问题。

情景:我有一个简单的Windows窗体应用程序(C#,.NET 4.0,Visual Studio 2010)。 它有大量其他形式继承的基本形式,它使用实体框架(和POCO类)进行数据库访问。 没有花哨,没有多线程或任何东西。

问题:一切都很好。 然后,当我即将启动应用程序时,Visual Studio无法构建出来。 我收到警告“无法删除文件'... bin Debug [ProjectName] .exe'。访问路径'... bin Debug [ProjectName] .exe'被拒绝。” 和错误“无法复制文件'obj x86 Debug [ProjectName] .exe'到'bin Debug [ProjectName] .exe'。进程无法访问文件'bin Debug [ProjectName] .exe '因为它正在被另一个进程使用。“ (我在运行重建时遇到了警告和错误,但运行Build时只有错误 - 不认为这是相关的?)

我完全理解这个警告和错误消息说的是什么:Visual Studio显然是在尝试覆盖exe文件,同时出于某种原因锁定它。 但是,这并不能帮助我找到问题的解决方案......我发现的唯一工作是关闭Visual Studio并重新启动它。 然后建立和启动工作,直到我对一些表单进行更改,然后再次遇到同样的问题,必须重新启动...非常令人沮丧!

正如我上面提到的,这似乎是一个已知的问题,所以有很多建议的解决方案。 我只列出我已经在这里尝试过的东西,所以人们知道该跳过什么:

  • 创建一个新的干净的解决方案,只是从旧的解决方案复制文件。
  • 将以下内容添加到项目的预生成事件中:

    if exist "$(TargetPath).locked" del "$(TargetPath).locked"
       if not exist "$(TargetPath).locked" if exist "$(TargetPath)" move "$(TargetPath)" "$(TargetPath).locked"
    
  • 将以下内容添加到项目属性(.csproj文件)中:

    <GenerateResourceNeverLockTypeAssemblies>true</GenerateResourceNeverLockTypeAssemblies>
    
  • 但是,他们中没有人为我工作,所以你可能会明白为什么我开始有点沮丧。 我不知道还有什么可以看的,所以我希望有人能给我一些东西! 这是VS中的错误,如果有的话,是否有补丁? 或者我做错了什么,有没有循环参考或类似的,如果有的话,我怎么能找到?

    任何建议都非常感谢:)

    更新:正如下面评论中提到的,我也检查过使用Process Explorer,它实际上是锁定文件的Visual Studio。


    这听起来很愚蠢,但我尝试了所有这些解决方案,在Windows 7上运行VS2010。除了重命名和构建之外,它们都没有工作,这是非常乏味的。 最终,我追查了罪魁祸首,我发现很难相信。 但我在AssemblyInfo.cs中使用以下代码...

    [assembly: AssemblyVersion("2.0.*")]
    

    这很常见,但出于某种原因,将版本更改为2.0.0.0可以使事情重新开始。 我不知道它是否是Windows 7特有的东西(我只用了3-4周),或者它是随机的,或者是什么,但它是为我修复的。 我猜测VS对每个生成的文件都保留了句柄,所以它会知道如何增加内容​​? 我真的不确定,从来没有见过这种情况发生过。 但如果其他人也在拉他们的头发,试试看。


    我找到了一个简单的解决方案,只需为项目文件夹和子文件夹禁用Windows索引服务即可


    由于我没有得到任何关于这个问题的更多反馈,我想我只是分享最终成为我的解决方案的东西:

    正如Barry在对原始文章的评论中所建议的,手动将'... bin Debug [ProjectName] .exe'重命名为其他内容(例如'[ProjectName] 1.exe')是一种解决方法(I'但是我不能自己删除这个文件,而且我必须说我觉得有点奇怪,因为人们会相信同一个锁可以防止重命名......)。 这不是一个好的解决方案,但它合理快速(至少在你做了好几次之后,它几乎成了一个例程),至少比重新启动Visual Studio更快,这是我在开始时所做的。

    如果有人想知道,我还可以补充说,我只是半随机地看到这个问题。 它通常发生在我对表单的设计模式做了一些改变之后(但并不总是)。 如果我只更改业务逻辑代码或非可视相关代码(但有时它确实......),通常不会发生这种情况。 确实令人沮丧,但至少我有一个适合我的黑客 - 让我们只希望我的下一个项目也不会遇到这个问题......

    @Barry:如果您希望得到您的评论的荣誉,请随时发布它作为答案,我会确保接受它:)

    链接地址: http://www.djcxy.com/p/44207.html

    上一篇: Visual Studio build fails: unable to copy exe

    下一篇: Visual Studio 2010 C# Run/Debug on Remote Machine