Visual studio 2008 无法覆盖Visual Studio 2008.dll文件,访问被拒绝

Visual studio 2008 无法覆盖Visual Studio 2008.dll文件,访问被拒绝,visual-studio-2008,dll,Visual Studio 2008,Dll,这个很奇怪。Visual Studio 2008似乎没有释放为我的项目创建的.dll的句柄,因此在我构建第二次(以及后续时间)时,当Studio尝试覆盖更改的.dll时,它会收到一个拒绝访问错误。当Visual Studio在我构建一次后处于打开状态时,我也无法复制/删除有问题的.dll(Tasks.dll)。Process Explorer告诉我devenv.exe正在使用该文件,因此我知道Visual Studio在生成完成后不会放弃它 以前有人见过这个吗?如果有,我能做些什么?显然,在每个

这个很奇怪。Visual Studio 2008似乎没有释放为我的项目创建的.dll的句柄,因此在我构建第二次(以及后续时间)时,当Studio尝试覆盖更改的.dll时,它会收到一个拒绝访问错误。当Visual Studio在我构建一次后处于打开状态时,我也无法复制/删除有问题的.dll(Tasks.dll)。Process Explorer告诉我devenv.exe正在使用该文件,因此我知道Visual Studio在生成完成后不会放弃它

以前有人见过这个吗?如果有,我能做些什么?显然,在每个构建之间打开和关闭VisualStudio并不是一个可接受的解决方案,而且这个问题在系统重新启动时一直存在


更多背景信息:我正在另一个项目的UsingTask MSBuild指令中使用导致错误的项目DLL(Tasks.DLL),我们称之为Test。设置项目生成顺序,以便在测试之前生成任务,然后测试的后生成任务从/bin/debug/Tasks.dll调用任务。

确定。我们也有同样的问题。我无法确切说明问题发生的时间以及重现问题的条件,但在我们的情况下,问题发生在我们有多个模块的项目中,每个模块引用了多个其他模块,引用的模块也引用了其他模块等

这真的很烦人,我们花了很多时间试图找出问题所在,以及如何解决问题,但都没有成功

我们不能重构项目来简化引用(太贵),我们也不能花更多的时间来研究问题,所以我们找到了解决方法——虽然不完美,但它帮助了我们,我们在该项目中使用了多年。这有点复杂,但我将尝试描述它:

  • 首先-示例项目结构
    -MyProject(目录)
    -Bin(dir)
    *Proj1.exe
    *Proj2.dll
    *Proj3.dll
    -Src(dir)
    -Proj1(dir)
    -项目2(目录)
    -bin(dir)
    -项目3(目录)
    -bin(dir)

  • Proj1(假设它是console/windows应用程序-*.exe)的output dir设置为MyProject/Bin

  • Proj2(.dll)的生成输出默认设置为MyProject/Src/Proj2/bin/。。。 在后期生成事件中,我们将结果复制到“MyProject/Bin”

    复制“$(TargetDir)\$(TargetName).dll”“$(SolutionDir)Bin”
    复制“$(TargetDir)\$(TargetName).pdb”“$(SolutionDir)Bin”

  • Proj3(.dll)的生成输出默认设置为MyProject/Src/Proj3/bin/。。。 后期生成与Proj2相同

  • 现在是参考文献。假设Proj1需要引用Proj2,而Proj2需要引用Proj3

    • 这是第一次只生成Proj3,因此在生成后事件命令的结果中,它将被复制到MyProject/Bin
    • 现在要添加对程序集MyProject/Bin/Proj3.dll的引用(浏览到程序集文件,不要引用项目)。在“项目依赖项”对话框中,手动设置此项目需要先生成Proj3。随后生成“Proj2”,以便将其复制到MyProject/Bin(后期生成事件命令)
    • 最后,在Proj1中添加对程序集MyProject/Bin/Proj2.dll的引用(再次浏览到程序集)。在“项目依赖项”中,手动设置此项目需要Proj2来生成FIR。从现在起,您可以构建整个解决方案
  • 上述方法的主要问题:

    • 配置和维护复杂,尤其是在项目不断增长且经常添加新项目时
    • 当您将项目签出到fresh目录,并且使用诸如ReSharper之类的工具来分析代码时,在第一次构建之前,它将报告大量错误
    • 为了减少编译时间,您需要为每个不应在本地复制的引用手动设置
    • 某些文件在使用时仍然会发生这种情况,但在我们的环境中,这种情况有时每周发生一次,有时每月发生一次

    在这种情况下,最简单的方法是使用
    taskkill
    命令终止Visual Studio进程及其所有子进程

    您可以从命令提示符或PowerShell调用此命令

    taskkill -IM devenv.exe /F /T
    
    这两个参数用于
    /F
    orce和
    /T
    也会杀死子进程


    注意:有关详细信息,请在命令行上输入
    taskkill-?

    您是将其他项目作为项目引用,还是直接从其\bin引用其DLL?是否将bin目录添加到源代码管理并将其锁定?该项目不受源代码管理,因此至少没有问题…编辑以解决其他问题您是否厌倦了清理解决方案。然后生成?您是否在生成之间进行调试,如果是,您是否有导致后台WcfSvcHost.exe运行并保留DLL句柄的WCF服务?