11

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

无法写入输出文件 'D:\Projects\Examples\StringBuilderVsString\obj\Release\StringBuilderVsString.exe' - '目录名称无效。'

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

运行进程监视器时,我只看到 csc.exe 访问的文件成功,我看不到任何查询或写入不存在的位置。

欢迎任何有关解决此问题的想法。

4

5 回答 5

13

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

原因

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

我已将这些路径移至更快的 SSD 驱动器以加快编译速度。驱动器崩溃并且操作系统不再找到它(如ServerFault 上所报告的),因此,移动的位置(互联网缓存、我的文档和临时文件)变得无法访问。

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

解决方案

修复%USERPROFILE%or%TEMP%环境变量,(如果你忘记了,它在这里:System > Advanced > Environment Variables)。

注意:典型和默认的 TEMP 设置是使用 USERPROFILE 环境变量,就像默认的%USERPROFILE%\AppData\Local\Temp. 这有效,但前提是在注册表中,下面的键HKCU\Environment\TEMP是 typeREG_EXPAND_SZ而不是REG_SZ.

于 2010-08-03T17:46:07.133 回答
1

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

于 2018-02-01T06:14:21.830 回答
0

就我而言,当我尝试将文件 (Database.mdf) 添加到文件夹 (App_Data) 时会发生这种情况。

通过在添加文件(Database.mdf)之前手动添加文件夹(App_Data)来解决它

当 .sln 注册一个文件夹(这就是它出现在 Visual Studio 中的原因)而该文件夹实际上并不存在于磁盘上时,就会发生这种情况。

于 2021-01-20T07:18:42.423 回答
-1

我也收到了类似的错误无法写入输出文件'......................' - '目录名称无效。'

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

"c:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets(3397,13):错误 MSB6003:无法运行指定的任务可执行文件“cmd.exe”。找不到目录路径: C:\Users\Administrator\AppData\Local\Temp\2\"

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

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

顺便说一句,我们只在我们所有的云实例上注意到了这一点。与虚拟化有关吗?.. 真的不知道

于 2011-08-26T20:28:49.940 回答
-1

将该文件移动到其他地方,然后尝试运行它。它对我有用。

于 2021-01-14T14:09:14.597 回答