VS2010并不总是在构建之前释放dll

时间:2010-09-17 14:40:51

标签: visual-studio-2010

使用Visual Studio 2010构建时,我经常遇到问题。 有时它拒绝使用如下错误消息构建:

错误102无法将文件“xxxxx \ Debug \ Services.dll”复制到“bin \ Debug \ Services.dll”。该进程无法访问文件'bin \ Debug \ Services.dll',因为它正由另一个进程使用。

我发现的唯一补救措施是重新启动Visual Studio。关闭解决方案是不够的。 我试图找到Process Explorer的罪魁祸首,因为我怀疑我自己的一个线程没有按原样关闭。但是,该过程是devenv.exe,即Visual Studio本身。此外,即使在构建升级的VS 2008项目时,我也只能使用VS 2010获得此症状。我从未在VS 2008下的相同项目中遇到过这个问题。

我有很多自定义的WPF用户控件,我有一个理论认为,WPF设计器有时会在控件的依赖dll的时候保留它们的构建版本。该理论尚未完善,因为这是一个周期性问题,有时它会在没有设计开放的情况下发生。我对Windows窗体项目也有同样的问题。有时我会在没有锁定dll的情况下度过一天。有时它是其他所有的构建。

我已经向微软询问了这个问题,他们告诉我要转储Visual Studio并调试转储。我没有发现这是一个合理的建议。

有没有人经历过类似的事情?真的很烦人。

更新1

由于这似乎是一个Visual Studio错误,微软已回复说他们不打算对此做任何事情,我想鼓励所有使用自定义用户控件的人在connect.microsoft.com上对此错误进行投票。

此处报告错误:https://connect.microsoft.com/VisualStudio/feedback/details/587281和我https://connect.microsoft.com/VisualStudio/feedback/details/568672

更新2 我已经破解了一个简单的Visual Studio宏,它在构建之前关闭所有.XAML文件。到目前为止,我没有经历过这个宏的锁定。 在Visual Studio中添加以下宏并分配给您喜欢的构建快捷方式。也许/也许不会解决这个问题。

Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
Imports System.Diagnostics

Public Module CloseXamlAndBuildModule
    Sub CloseXamlAndBuild()
        For Each myDocument As EnvDTE.Document In DTE.Documents
            If myDocument.Name.EndsWith(".xaml") Then
                myDocument.Close()
            End If
        Next
        DTE.Solution.SolutionBuild.Build()
    End Sub

End Module

4 个答案:

答案 0 :(得分:3)

我终于找到了一个稳定的工作解决方案。我意识到问题的根源是在WCF服务和WPF控件的构造函数中初始化代码。在将构造函数从任何依赖关系清理到其他程序集之后,一切都很好。

答案 1 :(得分:2)

尝试使用VSCommands插件。 它有“Apply Fix”选项,允许你关闭任何保持文件锁定的进程(通常是vshost进程可以被杀死)。

alt text alt text

答案 2 :(得分:1)

这是一个关于VS2010的相当持久的抱怨,尽管它没有广泛传播。我还没有看到它的良好诊断。要监视的反馈项是this one,它似乎是大多数重复项的收集器。更快地解决它可能需要在Microsoft支持中打开一个案例。

答案 3 :(得分:0)

我实际上已经向Microsoft Connect报告了这个问题,但是有一段时间没有检查过这个问题。 我向Microsoft提交的原始报告是here

评论中有一种用自定义用户控件重现问题的方法(我怀疑)。

微软刚刚回复了标准“感谢您的反馈,您的建议不符合要解决的标准”。谢谢微软。我想我将不得不忍受每小时重启几次Visual Studio。