这个很奇怪。 Visual Studio 2008似乎没有释放其为我的项目创建的.DLL的句柄,所以我构建的第二次(以及后续时间),当Studio尝试覆盖更改的.dll时,它会获得访问被拒绝错误。在构建一次Visual Studio后,我也无法复制/删除有问题的.dll(Tasks.dll)。 Process Explorer告诉我该文件正在被devenv.exe使用,所以我知道Visual Studio在构建完成后没有放弃它。
以前有人见过这个,如果有的话,我该怎么办呢?显然,在每个构建之间打开和关闭visual studio都不是一个可接受的解决方案,并且问题一直持续到系统重启。
更多背景:我在另一个项目的UsingTask MSBuild指令中使用导致错误的项目的DLL(Tasks.dll),我们称之为Test。设置项目构建顺序,以便在Test之前构建Tasks,然后Test的AfterBuild任务从/bin/debug/Tasks.dll调用任务。
答案 0 :(得分:2)
不确定。我们遇到了同样的问题。我不知道问题究竟何时发生以及重现它的条件是什么,但在我们的情况下,它发生在我们有多个模块的项目中,每个模块引用了多个其他模块,引用的模块也引用了其他模块等。
这真的很烦人,我们失去了很多时间试图找出问题所在,以及如何解决,但未成功。
我们无法重构项目以简化参考(太昂贵),我们也不能花更多时间来调查问题所以我们找到了解决方法 - 不完美,但它帮助了我们,我们在该项目中使用了多年。这有点复杂,但我会尝试描述它:
首先 - 示例项目结构
- MyProject(dir)
- Bin(dir)
* Proj1.exe
* Proj2.dll
* Proj3.dll
- Src(dir)
- Proj1(dir)
- Proj2(dir)
- bin(dir)
- Proj3(dir)
- bin(dir)
Proj1(我们假设是控制台/ windows应用程序 - * .exe)将输出目录设置为MyProject / Bin
Proj2(.dll)默认将构建输出设置为MyProject / Src / Proj2 / bin / ... 在postbuild事件中,我们将结果复制到“MyProject / Bin”
复制“$(TargetDir)\ $(TargetName).dll”“$(SolutionDir)Bin”
复制“$(TargetDir)\ $(TargetName).pdb”“$(SolutionDir)Bin”
Proj3(.dll)默认将构建输出设置为MyProject / Src / Proj3 / bin / ... postbuild与Proj2
现在引用。假设Proj1需要引用Proj2,而Proj2需要引用Proj3。
上述方法存在的主要问题:
答案 1 :(得分:0)
在这种情况下,您可以做的最简单的事情是使用taskkill
命令来终止Visual Studio进程及其所有子进程。
您可以从命令提示符或PowerShell中调用此方法。
taskkill -IM devenv.exe /F /T
两个参数用于/F
orce,/T
也会杀死子进程。
注意:在命令行中输入taskkill -?
以获取更多信息。