在这个构建过程中,“exited with code 9009”是什么意思?

339

这个错误信息是什么意思?我应该怎么解决这个问题?

AssemblyInfo.cs 以代码9009退出


这个问题可能发生在Visual Studio中.NET解决方案的后构建步骤中。


8
楼主不会回来修复这个问题,但它有很多答案和谷歌搜索引擎优化效果。所以,我们尝试推断一下问题的原因? - Anthony Mastrean
16
输出窗口让我对这个问题有了一些了解,而我也遇到了类似的问题。 - hanzolo
36个回答

255

您尝试过在预构建或后构建事件命令中输入正在运行的命令的完整路径吗?

我在Visual Studio 2008中使用xcopy后构建事件命令时遇到了9009错误。

  

命令"xcopy.exe /Y C:\projectpath\project.config C:\compilepath\"以代码9009退出。

但在我的情况下,这也是间歇性的。也就是说,错误消息会持续到计算机重新启动之前,并且在计算机重新启动后消失。在我尚未发现的某些远程相关问题之后,它会再次出现。

然而,在我的情况下,提供命令的完整路径解决了此问题:

c:\windows\system32\xcopy.exe /Y C:\projectpath\project.config C:\compilepath\ 

不要只是:

xcopy.exe /Y C:\projectpath\project.config C:\compilepath\

如果我没有完整的路径,程序在重新启动后会运行一段时间,然后停止。

正如此帖子的评论中提到的那样,如果完整路径中有空格,则需要在命令周围加上引号。例如:

"C:\The folder with spaces\ABCDEF\xcopy.exe" /Y C:\projectpath\project.config C:\compilepath\

请注意,关于空格的这个例子没有被测试过。


47
我也遇到了在构建前后事件中出现的 9009 错误。在 Visual Studio 的输出标签中查看问题。在我的情况中,我试图访问包含空格的路径。 - Phil Hale
16
我曾遇到过类似的问题,但是那是因为文件夹名称里有空格。把路径放在引号中 ("$(SolutionDir)packages\NUnit.2.5.10.11092\tools\"nunit-console "$(TargetPath)") 解决了这个问题。 - Justin Morgan
1
我遇到了一个类似的问题,那是由于一个预构建事件使用Java小程序来预编译JS和CSS...事实证明,我们忘记在服务器上安装Java运行时。 - saluce
2
PATH 环境变量会不会有可能丢失?我时不时会遇到这个错误。我已经将 npm install 设置为预构建事件,最初它可以正常工作(所以我认为一切都设置好了),但是随机地在一天内停止工作(通常是在切换解决方案/分支时),然后它就不再知道 npm 了。重新启动 VS 可以“修复”它...这意味着我的 PATH 已经正确设置,但似乎被 VS 搞砸了。如果有一种方法可以从 VS 内部查看环境变量,我可以确认这一点。 - jamiebarrow
2
如果您想保护您的构建在不同环境中崩溃,比如安装在D:\上的Windows,请结合@thehhv的答案使用环境变量:%systemroot%\System32\xcopy ... - Dorival
显示剩余7条评论

142

错误代码 9009 表示文件未找到。这里的所有根本原因都是找出问题所在的好灵感,但错误本身只是意味着路径错误。


1
我的问题是文件未找到,在 csproj 文件中的引用是 $(PROGRAMFILES)\Microsoft SDKs\TypeScript\tsc,应该改为 $(PROGRAMFILES)\Microsoft SDKs\TypeScript\1.0\tsc。 - RHAD
感谢您实际回答了第一个问题。 - AntonK
这意味着找不到尝试命令涉及的任何文件,因此即使找不到命令本身也是如此。我使用了 delete 而不是 del。那样也会显示 9009。 - Mircea Ion

88

当您缺少使用Microsoft Visual Studio x86工具所需的某些环境设置时,会发生这种情况。
因此,请在您的后期构建步骤中作为第一条命令尝试添加以下内容:

对于Visual Studio 2010,请使用:

call "$(DevEnvDir)..\Tools\vsvars32.bat"

如 @FlorianKoch 在评论中提到的那样,对于 VS 2017,请使用:

call "$(DevEnvDir)..\Tools\VsDevCmd.bat"

该命令应放置在任何其他命令之前。
它将设置环境以使用Microsoft Visual Studio x86工具。


3
你能帮我一下吗 - 我需要知道在哪个文件里添加这行代码 call "$(DevEnvDir)..\Tools\vsvars32.bat" - surfmuggle
2
我必须将一个条目添加到我的“Path”环境变量中。请检查输出窗口以获取更多信息。 - crthompson
注意。这将在许多构建服务器上失败:http://blogs.clariusconsulting.net/kzu/devenvdir-considered-harmful/ - George Mauer
2
谢谢您,对于x64位工具链,我是这样解决的:"$(DevEnvDir)..\VC\vcvarsall.bat" - codekiddy
1
对于VS 2017,该文件为"$(DevEnvDir)..\Tools\VsDevCmd.bat" - Florian Koch
显示剩余2条评论

58

很可能您的结果路径中有空格。

您可以通过给路径加引号来解决这个问题,从而允许包含空格。例如:

xcopy "$(SolutionDir)\Folder Name\File To Copy.ext" "$(TargetDir)" /R /Y /I

9
+1 - 这正是我遇到的问题。在本地构建项目时,我的后构建命令能够正常工作,但在构建服务器上构建时失败了。我只需将该命令放置在双引号之间即可修复它。谢谢。 - sheikhjabootie
那么,推测错误9009是“文件未找到”是否合理呢?个人认为,“什么是MSBuild错误9009?”这个问题作为一个独立的问题应该是完全可以的,但需要向微软进行查询! - The Dag

12

在Win 7的环境变量中修改了PATH变量后,遇到了相同的变量问题。恢复默认值即可解决。


10

当我的后构建事件脚本尝试运行一个在指定路径中不存在的批处理文件时,出现了错误9009。


8
我的确切错误是:
命令“iscc /DConfigurationName=Debug "C:\Projects\Blahblahblah\setup.iss"”退出,代码为9009。
9009表示找不到文件,但实际上它找不到命令中的“iscc”部分。
我通过将";C:\Program Files\Inno Setup 5 (x86)\"添加到系统环境变量"path"中来修复它。

6
在我的情况下,在调用命令之前,我必须先“CD”(更改目录)到正确的目录,因为我要调用的可执行文件位于我的项目目录中。
示例:
cd "$(SolutionDir)"
call "$(SolutionDir)build.bat"

1
这对我解决了在运行Visual Studio的devenv.exe时遇到的问题,但你不需要第二次指定文件夹,只需“调用build.bat”即可。 - FrinkTheBrave

6
当我编辑环境变量时,不小心在路径字符串的开头添加了Path=,导致环境变量格式错误。因此在命令行中无法运行XCopy(出现“未找到命令或文件”提示),Visual Studio也因代码9009错误而无法执行后构建步骤。
XCopy通常位于C:\Windows\System32目录下。一旦环境变量允许在DOS提示符下解析XCopy,Visual Studio就能成功构建我的解决方案。

5
如果脚本实际上已经做了它需要做的事情,只是Visual Studio让你困扰于错误,那么你可以添加以下内容:
exit 0

到脚本的末尾。


6
隐藏潜在错误不是正确的做法。 - igelineau
1
我同意这个不应该被掩盖。 - AltF4_

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接