【问题标题】:Visual Studio gone bonkers: 'The directory name is invalid' error when trying to compileVisual Studio 疯了:尝试编译时出现“目录名称无效”错误
【发布时间】:2011-03-24 18:47:49
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • the double projFilename.exe is intentional 为什么?
  • 我认为他的意思是 故意写的,但显然 VS 做错了什么来提出这个。
  • @Codesleuth:我的意思是:我写了它,因为这是 Visual Studio 尝试将输出写入的地方。它应该没有第二个名字,当然,它根本不应该尝试将输出写入与输出可执行文件名相同的目录。 @Kent:正是
  • 啊,明白了。在这种情况下,发布 .csproj 文件;可能很有启发性。
  • @all:在我更新问题以更准确地描述问题后,上述 cmets 已失效。

标签: c# visual-studio-2008 compiler-errors csc


【解决方案1】:

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

原因

%TEMP% 位置不正确或不可访问,或 %USERPROFILE% 路径不可访问。

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

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

解决方案

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

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

【讨论】:

  • 我遇到了同样奇怪的问题,无法将 .h 文件(即使它会添加 .cpp 文件)添加到我的 VS2015 项目中,并且出现相同的错误,这也解决了我的问题。我没有 USERPROFILE 环境变量,我将其设置为 c:\Users\ 并修复了它。
【解决方案2】:

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

【讨论】:

  • 好点!令人惊讶的是,这么多年过去了,这种情况仍然发生。您是否在使用最新版本的 Visual Studio(即 2017)时遇到此错误?
  • 是的,我也遇到了同样的问题,在磁盘中分配更多空间后解决了。
【解决方案3】:

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

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

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

【讨论】:

    【解决方案4】:

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

    我尝试删除文件夹,按照上面的建议更改环境变量(即 %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
    

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

    【讨论】:

    • 如果我理解正确,您首先将 %userprofile% 指向一个不存在的目录。当然,它指向的目录必须存在。您的错误也可能来自后/预编译器任务,该任务需要某个文件夹,而该文件夹并非在所有机器上都可用。通常,%temp% 下的文件夹是由需要它们的进程创建的(因为它永远无法确定它们下次是否存在)
    • 我将 %userprofile% 指向一个不存在的目录。 %userprofile% 已经指向一个不存在的目录。编译后任务一直存在,但有一天构建开始失败。如果后编译是问题,为什么在构建下的输出窗口的第一步开始时会出现错误?编译后步骤使用 MSBuild 和 Yahoo.Yui.Compressor 进行 CSS 和 JS 压缩
    • 嗯,恐怕我对您的情况还没有足够的了解,无法为您提供这些问题的可靠答案。考虑问一个 q。在 SO 针对您的具体情况(除非您认为它已经根据您在此线程中的额外答案解决了)。
    【解决方案5】:

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

    【讨论】:

    • 这个问题已经有一个公认的答案。这可能对您有用,但是您缺少现有答案已经给出的大量细节。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    相关资源
    最近更新 更多