Visual Studio消失了:尝试编译时“目录名无效”错误

出于一些非常奇怪的原因,我的Visual Studio 2008在尝试编译C#项目时,尝试将可执行文件的输出写入与可执行文件同名的目录,至少看起来这就是错误消息所暗示的内容。 在我的任何项目上运行Compile后,CSC.EXE报告以下编译器错误:

无法写入输出文件’D:\ Projects \ Examples \ StringBuilderVsString \ _obj \ Release \ StringBuilderVsString.exe’ – ‘目录名无效。

当我查看obj\Releaseobj\Debug所有中间资源,如StringBuilderVsString.pdb都正确地写在该目录中。 目录中没有空格。 从命令提示符运行csc.exe时也会发生此错误。

运行Process Monitor时,我只看到csc.exe访问的文件的SUCCESS,我没有看到任何查询或写入不存在的位置。

任何解决这个问题的想法都是受欢迎的。

解决了! 感谢您的投入,我同时找到了解决方案。 原因很少见,但可能会发生在其他人身上,所以我决定在这里回答我自己的问题:

原因

不正确或无法访问的%TEMP%位置或无法访问的%USERPROFILE%路径。

我已经将这些路径移动到更快的SSD驱动器以加速编译。 驱动器崩溃,操作系统不再找到它(如此处的ServerFault报告),因此移动的位置(Internet缓存,我的文档和临时)已无法访问。

Visual Studio提到的错误具有误导性:它与文件名无关(虽然我仍然想知道它为什么要查询可执行文件作为目录),但错误是关于%TEMP%位置不好。

修复%USERPROFILE%%TEMP%环境变量,(如果您忘记了,它就在这里: 系统>高级>环境变量 )。

注意:典型的默认TEMP设置是使用USERPROFILE环境变量,如默认的%USERPROFILE%\AppData\Local\Temp 。 这是有效的,但只有在注册表中, HKCU\Environment\TEMP下的键是REG_EXPAND_SZ类型而不是REG_SZ

确保驱动器中有足够的可用空间,我遇到了同样的问题,在分配了更多可用空间后解决了问题。

我也得到了类似的错误无法写入输出文件’……………………..’ – ‘目录名无效。 “

我尝试删除文件夹,如上所述更改环境变量(即%USERPROFILE%或%TEMP%),但似乎没有任何效果。 当我再次查看VS 2008中输出窗格/窗口中的输出时,我找到了以下行

“c:\ Windows \ Microsoft.NET \ Framework \ v3.5 \ Microsoft.Common.targets(3397,13):错误MSB6003:无法运行指定的任务可执行文件”cmd.exe“。找不到目录路径: C:\用户\管理\应用程序数据\本地的\ Temp \ 2 \”

这条线让我找到了解决方案。 我刚刚在“C:\ Users \ Administrator \ AppData \ Local \ Temp”文件夹中创建了不存在的2文件夹。

 %USERPROFILE% = C:\Users\Administrator\AppData\Local\Temp 

顺便说一下,我们只在所有Cloud实例上都注意到了这一点。 虚拟化有什么用吗? ..真的不知道