我有一个Visual Studio 2008项目,我将其“升级”到了Visual Studio 2010。自从升级以来,我一直在这个项目中遇到很多问题(我想要补充的是,该项目在2008年仍然非常稳定)。
第一个问题是,构建主可执行文件会锁定该文件,导致后续重建失败。这在相关问题中有描述:Visual Studio locks output file on build,我从中找到了解决方法:
if exist "$(TargetPath).locked" del "$(TargetPath).locked"
if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"
但这个解决方法只能有效地使用一次。.locked 文件会被 devenv.exe 锁定,必须将其移动。我通过添加 .1.locked、.2.locked 等来解决此问题。文件可以在 devenv.exe 关闭时删除。
调试器不必使用即可导致此问题,这表明了 2010 构建系统存在相当严重的问题。
我认为可以排除以下一些理论:
- 杀毒软件或其他后台任务:如果这是一个问题,2008 年版本似乎也会失败。但是,作为完美主义者,我完全删除了 avast!系统,但没用。
更新:该项目在没有杀毒软件和备份实用程序的计算机上出现了相同的症状。办公室的计算机都运行 XP SP3 32 位操作系统,我的本地计算机是 Windows 7 64 位操作系统。这似乎与操作系统无关。
- 调试器锁定文件:只需重复构建过程而不进行调试即可复现此问题。ProcessExplorer 显示 devenv.exe 是锁定的持有者,而不是 vshost;杀死 vshost.exe 不会移除锁。
一旦文件被锁定,我遇到了一个次要问题:表单设计器停止加载并出现“找不到程序集”错误。我认为这些问题与早期的锁定问题有关,因为在构建之前,设计器会立即启动,但是进行任何更改并重新构建后,所有设计器都会出现该错误(即使我已经打开并作为当前视图)。更改 "dummy=1" 为 "dummy=2" 可以强制重新编译完全无关联的程序集,从而导致表单关闭至白色错误屏幕。
更新:我尝试了一些其他疗法:未选中“启用 .NET 源代码步进”,因此这不是问题。删除 .SUO(解决方案用户选项)仅能在正常重启可以解决问题的时间内有效(两个构建:第一个是因为没有锁定文件,第二个是因为有一个,但是脚本可以将其重命名)。
Error 28 Unable to copy file "obj\Debug\PolicyTracker3.exe" to "bin\Debug\PolicyTracker3.exe".
The process cannot access the file 'bin\Debug\PolicyTracker3.exe' because it is being used by another process.