关于.net:在这个版本中,“退出代码9009”是什么意思?

What does “exited with code 9009” mean during this build?

此错误消息意味着什么?我可以做些什么来纠正这个问题?

AssemblyInfo.cs exited with code 9009

该问题可能是作为Visual Studio中.NET解决方案的后期生成步骤的一部分发生的。


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

由于Visual Studio 2008中的xcopy生成后事件命令,我得到了9009错误。

The command "xcopy.exe /Y C:\projectpath\project.config C:\compilepath\" exited with code 9009.

但在我的例子中,它也是间歇性的。也就是说,错误消息一直持续到计算机重新启动,并在计算机重新启动后消失。在我还没有发现一些与远程相关的问题之后,它又回来了。

但是,在我的例子中,提供命令的完整路径解决了这个问题:

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

而不仅仅是:

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

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

另外,如本文注释中所述,如果完整路径中有空格,则需要在命令周围加引号。例如。

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

注意,这个关于空间的例子没有经过测试。


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


当您缺少使用Microsoft Visual Studio 2010 x86工具的某些环境设置时,就会发生这种情况。因此,请尝试将添加为构建后步骤中的第一个命令:

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

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


很可能在结果路径中有空间。

您可以通过引用路径来解决这个问题,从而允许使用空格。例如:

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


在Win 7中,改变了环境变量的路径变量后,具有相同的变量。改回默认值有帮助。


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


如果脚本确实执行了它需要执行的操作,并且只是Visual Studio在向您发出错误通知,您可以添加:

1
exit 0

到脚本的结尾。


我在修改路径环境变量时导致了这个错误。编辑之后,我不小心将Path=添加到了路径字符串的开头。有了这样一个格式错误的路径变量,我无法在命令行运行xcopy(找不到任何命令或文件),Visual Studio拒绝运行生成后步骤,并引用了代码9009的错误。

xcopy通常位于c:windowssystem32中。一旦path环境变量允许xcopy在DOS提示符下得到解决,Visual Studio就很好地构建了我的解决方案。


我的准确错误是

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

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

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


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


在我的例子中,在调用命令之前,我必须先"cd"(更改目录)到正确的目录,因为我调用的可执行文件在我的项目目录中。

例子:

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


在我的例子中,当我尝试在命令行上使用命令来处理我的测试类库中的后期生成事件时,出现了问题。当使用这样的引号时:

1
2
3
"$(SolutionDir)\packages
Unit.Runners.2.6.2\tools
unit""$(TargetPath)"

或者如果您正在使用控制台:

1
2
3
"$(SolutionDir)\packages
Unit.Runners.2.6.2\tools
unit-console""$(TargetPath)"

这解决了我的问题。


另一种变体:

今天我从win32中的cron调用python解释器,并使用exitcode(%errorlevel%)9009,因为cron使用的系统帐户没有到python目录的路径。


另外,确保项目上的后期生成事件编辑窗口中没有换行符。有时,当Xcopy命令是多行的时候,从Web上复制它并将其粘贴到VS中会导致问题。


我在预构建步骤的行尾添加了">myfile.txt",然后检查文件是否存在实际错误。


但由于路径中有空格,找不到文件的另一个变体。在我的例子中,在msbuild脚本中。我需要在exec命令中使用html样式的字符串。

1
2
3
4
5
<!-- 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" />

TFA的答案被否决了,但实际上可能导致这个问题。多亏了Hanzolo,我在输出窗口中找到了以下内容:

1
2
3
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中遇到此错误,请检查输出窗口,查看问题是否是未设置的环境变量。


和其他答案一样,在我的案例中,这是因为缺少文件。要知道丢失的文件是什么,可以转到输出窗口,它将立即显示丢失的文件。

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

  • CTRL+ALT+O
  • 视图>输出
  • enter image description here


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


    对我来说,它发生在一个大的解决方案中(大约80个项目)将nuget包从一个Postshar版本升级到下一个版本之后。对于在预生成事件中有命令的项目,我有编译器错误。

    "cmd"不能被识别为内部或外部命令、可操作程序或批处理文件。C:Program Files(x86)msbuild14.0inmicrosoft.common.currentversion.targets(1249,5):错误MSB3073:命令"cmd/C:gitrepsmainserviceinterfacesdev.configprebuild.cmd serviceinterfaces"退出,代码为9009。

    路径变量已损坏,变得太长,具有与postsharp.patterns.diagnostics相关的多个重复路径。当我关闭并再次打开Visual Studio时,问题得到了解决。


    这是很基本的,我有这个问题,和尴尬的简单失败。

    应用程序使用命令行参数,我删除了它们,然后重新添加。突然,这项工程失败了。

    Visual Studio->Project属性->Verify that you use'debug'tab(not'build events'tab)->command line arguments

    我使用了和后期/预构建文本区域,这在本例中是错误的。


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

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


    我通过简单地重新启动Visual Studio来解决这个问题—我刚在控制台窗口中运行了dotnet tool install xxx,而vs还没有接收到已更改的新环境变量和/或路径设置,所以快速重新启动解决了这个问题。


    我的解决方案很简单:你试过一次又一次地关闭它吗?所以我重新启动了计算机,问题就消失了。


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


    我认为在我的例子中,path中有俄语符号(所有项目都在用户文件夹中)。当我把解决方案放在另一个文件夹(直接放在磁盘上)中时,一切都正常了。


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

    作品:

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

    不起作用:

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

    实际上,我注意到,由于某种原因,有时会擦除%windir%环境变量。对我有用的是将windir环境变量重新设置为c:windows,重新启动vs,就这样。这样可以避免修改解决方案文件。


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


    您需要确保已在全局安装Grunt


    当我将app.config的属性更改为始终复制时,就会发生这种情况。

    并通过撤消所有编辑来修复它,然后构建以确保它工作正常

    最后,再次重置它。始终复制并生成它。