在此构建过程中,“以代码9009退出”是什么意思?


292

此错误消息是什么意思?我该怎么做才能解决此问题?

AssemblyInfo.cs退出,代码为9009


该问题可能是在Visual Studio .NET解决方案中的后生成步骤中发生的。


7
OP并没有回来解决此问题,但它有很多答案和很多Google汁液。那么,让我们尝试推断问题吗?
安东尼·马斯特拉

13
输出窗口使我对这个问题也有所了解
hanzolo 2012年

Answers:


241

您是否尝试给出在构建前或构建后事件命令中运行的命令的完整路径?

由于xcopyVisual Studio 2008中的生成后事件命令,我收到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\

请注意,此示例有关空格未经过测试。


44
在发布后和构建前事件中,我还收到9009错误。在Visual Studio中检查“输出”选项卡将显示该问题。以我为例,我试图访问包含空间的路径
菲尔·黑尔

16
我有一个类似的问题,但这是文件夹名称中空格的结果。将路径放在引号("$(SolutionDir)packages\NUnit.2.5.10.11092\tools\"nunit-console "$(TargetPath)")中可以解决该问题。
贾斯汀·摩根

1
我在使用Java小程序来预编译JS和CSS的pre-build事件中遇到了类似的问题……事实证明,我们忽略了将Java Runtime放在服务器上的做法。
2012年

2
PATH环境变量是否有可能以某种方式丢失?我时不时地收到此错误。我已经将npm install安装程序设置为预构建事件,并且最初可以正常工作(因此我认为一切都已设置好了),但是随后它会在白天(通常在我相信在解决方案/分支之间切换时)会停止工作。知道npm。重新启动VS'修复'它...意味着我PATH的设置正确,但是似乎被VS唤醒了。如果有一种方法可以从VS内部查看env变量,则可以确认这一点。
jamiebarrow

2
如果您想保护自己的构建件免于在不同环境中崩溃,例如,将Windows安装在D:\上,请结合使用环境变量和@thehhv答案:%systemroot%\System32\xcopy ...
Dorival

110

错误代码9009表示找不到错误文件。答案中列出的所有潜在原因都是找出原因的良好灵感,但是错误本身仅意味着一条错误的道路。


1
我找不到文件的问题是csproj文件中的引用是$(PROGRAMFILES)\ Microsoft SDKs \ TypeScript \ tsc,必须是$(PROGRAMFILES)\ Microsoft SDKs \ TypeScript \ 1.0 \ tsc
RHAD 2014年

感谢您实际回答第一个问题。
AntonK '18

并且这意味着找不到尝试的命令可能涉及的任何文件,因此即使找不到命令本身也是如此。我使用的是删除而不是del。那也将给您9009。
Mircea Ion

84

当您缺少使用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 2012年

2
我必须在我的Path环境变量中添加一个条目。检查“输出”窗口以获取更多信息。
paqogomez 2013年

警告。这将在许多构建服务器上失败:blogs.clariusconsulting.net/kzu/devenvdir-considered-harmful
George Mauer

2
谢谢,对于x64位工具链,我像这样解决:“ $(DevEnvDir).. \ VC \ vcvarsall.bat”
codekiddy 2015年

1
对于VS 2017,文件为"$(DevEnvDir)..\Tools\VsDevCmd.bat"
Florian Koch

57

最终路径中很可能有空间。

您可以通过引用路径来解决此问题,从而留出空间。例如:

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

9
+1-这正是我遇到的问题。当我在本地构建项目时,构建后的命令有效,但是在构建服务器上构建该项目时,该命令失败。我只是将命令放在双引号之间进行修复。谢谢。
sheikhjabootie 2011年

因此,推测错误9009是“找不到文件”是合理的吗?我个人认为问题是什么“ MSBuild错误9009?” 作为一个独立的问题应该很好,但直接针对Microsoft!
The Dag 2013年


10

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


6

当我编辑路径环境变量时,导致发生此错误。编辑后,我不小心将Path=路径字符串添加到开头。使用这样格式错误的路径变量,我无法在命令行上运行XCopy(找不到命令或文件),并且Visual Studio拒绝运行构建后步骤,并引用了代码9009的错误。

XCopy通常位于C:\ Windows \ System32中。一旦Path环境变量允许在DOS提示符下解析XCopy,Visual Studio就可以很好地构建我的解决方案。


6

我的确切错误是

The command "iscc /DConfigurationName=Debug "C:\Projects\Blahblahblah\setup.iss"" exited with code 9009.

9009表示未找到文件,但实际上找不到命令的“ iscc”部分。

我通过添加";C:\Program Files\Inno Setup 5 (x86)\"到系统环境变量来修复它"path"


5

如果脚本确实执行了所需的操作,而这只是Visual Studio向您询问有关该错误的信息,则可以添加:

exit 0

到脚本的结尾。


5
隐藏任何潜在的错误不应该成为解决之道
igelineau

1
我同意不应掩盖
AltF4_

5

检查拼写。我试图调用一个可执行文件,但是名字拼写错误,它给了我exited with code 9009消息。


1
为此,添加一个检查您的系统上是否存在可执行文件的工具。
Joshua Drake

5

就我而言,由于调用的可执行文件位于我的项目目录中,因此在调用命令之前,我必须先将“ CD”(更改目录)更改为正确的目录。

例:

cd "$(SolutionDir)"
call "$(SolutionDir)build.bat"

1
这为我运行Visual Studio的devenv.exe修复了问题,但是您无需第二次指定文件夹,只需
FrinkTheBrave


4

在我的情况下,当我尝试在命令行上对Test Class Library中的Post-build事件使用命令时,便出现了问题。像这样使用引号时:

"$(SolutionDir)\packages\NUnit.Runners.2.6.2\tools\nunit" "$(TargetPath)" 

或者,如果您使用的是控制台:

"$(SolutionDir)\packages\NUnit.Runners.2.6.2\tools\nunit-console" "$(TargetPath)"

这为我解决了这个问题。


4

tfa的答案已被否决,但实际上可能导致此问题。感谢hanzolo,我在输出窗口中查找了以下内容:

3>'gulp' is not recognized as an internal or external command,
3>operable program or batch file.
3>D:\dev\<filepath>\Web.csproj(4,5): error MSB3073: The command "gulp clean" exited with code 9009.

运行后npm install -g gulp,我停止收到此错误。如果在Visual Studio中遇到此错误,请检查输出窗口,查看问题是否为未设置的环境变量。


3

另外,请确保项目的构建后事件编辑窗口中没有换行符。有时,在多行时从Web复制xcopy命令并将其粘贴到VS中会引起问题。


尽管jesse很好地指出了在xcopy命令的中间没有换行符,但是请注意,在一般情况下,在此字段中换行是有效的;每行应解释为自己的命令。
RJFalconer

3

我在预构建步骤的行末添加了“> myFile.txt”,然后检查了文件中的实际错误。


2

对我来说,磁盘空间很低,无法写入的文件有望在以后出现。其他答案提到缺少文件(或名称错误/名称引用不正确的文件),但是根本原因是磁盘空间不足。


2

对我来说,这是在大型解决方案(约80个项目)中将nuget软件包从一个PostSharp版本升级到下一个版本之后发生的。对于在PreBuild事件中具有命令的项目,我遇到了编译器错误。

无法将“ cmd”识别为内部或外部命令,可操作程序或批处理文件。C:\ Program Files(x86)\ MSBuild \ 14.0 \ bin \ Microsoft.Common.CurrentVersion.targets(1249,5):错误MSB3073:命令“ cmd / c C:\ GitRepos \ main \ ServiceInterfaces \ DEV.Config \ PreBuild.cmd ServiceInterfaces”退出,代码为9009。

PATH变量由于与PostSharp.Patterns.Diagnostics相关的多个重复路径而损坏,变得太长。当我关闭Visual Studio并再次打开它时,此问题已解决。


2

由于路径中有空格,因此找不到文件的另一个变体。就我而言,在msbuild脚本中。我需要使用HTML样式exec命令中的字符串。

<!-- Needs quotes example with my Buildscript.msbuild file --> 
<Exec Command="&quot;$(MSBuildThisFileDirectory)\wix\wixscript.bat&quot; $(VersionNumber) $(VersionNumberShort)" 
    ContinueOnError="false" 
    IgnoreExitCode="false" 
    WorkingDirectory="$(MSBuildProjectDirectory)\wix" />

2

与其他答案相同,在我的情况下是由于缺少文件。要知道丢失的文件是什么,您可以转到输出窗口,它将立即向您显示丢失的文件。

要在Visual Studio中打开输出窗口,请执行以下操作:

  1. Ctrl + Alt + O
  2. 查看>输出

在此处输入图片说明


2

我通过重新启动Visual Studio来解决此问题-我刚刚dotnet tool install xxx在控制台窗口中运行,而VS尚未选择新的环境变量和/或更改的路径设置,因此快速重新启动解决了该问题。


1

这是很基本的问题,我遇到了这个问题,而且令人尴尬的简单失败。

应用程序使用命令行参数,我删除了它们,然后又添加回去。突然项目无法建立。

Visual Studio->项目属性->确认您使用“调试”选项卡(而非“构建事件”选项卡)->命令行参数

我使用了and Post / Pre-build文本区域,这种情况是错误的。


1

我的解决方案很简单:您是否尝试过将其关闭然后再打开?因此,我重新启动计算机,问题消失了。


1

9009面对覆盖情况时,我也遇到了这个问题。

基本上,如果文件已经存在并且您没有指定/y开关(它将自动覆盖),则从构建运行时可能会发生此错误。


0

实际上,我注意到由于某些原因,有时会删除%windir%环境变量。对我有用的是将windir环境变量重置为c:\ windows,重新启动VS,仅此而已。这样,您无需修改​​解决方案文件。


0

至少在Visual Studio Ultimate 2013版本12.0.30723.00更新3中,不可能用换行符分隔if / else语句:

作品:

if '$(BuildingInsideVisualStudio)' == 'true' (echo local) else (echo server)

不起作用:

if '$(BuildingInsideVisualStudio)' == 'true' (echo local) 
else (echo server)

0

另一个原因:如果您的预构建事件引用了另一个项目bin路径,并且在运行msbuild而不是Visual Studio时看到此错误,则必须手动将项目安排在* .sln文件中(使用文本编辑器),这样您在事件中定位的项目是在事件的项目之前构建的。换句话说,msbuild使用项目在* .sln文件中列出的顺序,而VS使用项目依赖项的知识。在wixproj之后列出了一个创建数据库以包含在wixproj中的工具时,我发生了这种情况。



0

我的解决方案是创建文件的副本,并向构建任务添加一个步骤,以将文件复制到原始文件上。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.