Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio Visual Studio生成后事件MT.exe命令失败,代码为9009_Visual Studio_Post Build Event - Fatal编程技术网

Visual studio Visual Studio生成后事件MT.exe命令失败,代码为9009

Visual studio Visual Studio生成后事件MT.exe命令失败,代码为9009,visual-studio,post-build-event,Visual Studio,Post Build Event,您好,我正在从生成后事件运行以下命令: C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\mt.exe -manifest "$(ProjectDir)$(TargetName).exe.manifest" -updateresource:"$(TargetDir)$(TargetName).exe;#1" 失败,退出代码为9009。。。我不明白为什么会这样;有什么建议吗?这里有一个潜在的解决方案: 您可以使用生成后事件 visualstudi

您好,我正在从生成后事件运行以下命令:

C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\mt.exe -manifest "$(ProjectDir)$(TargetName).exe.manifest" -updateresource:"$(TargetDir)$(TargetName).exe;#1"

失败,退出代码为9009。。。我不明白为什么会这样;有什么建议吗?

这里有一个潜在的解决方案:

您可以使用生成后事件 visualstudio的功能 这将在上面键入命令:mt.exe -manifest app.manifest-outputresource:myapplication.exe#1.这可能不起作用,而且视觉效果不佳 Studio将给您一个错误,如 “…以代码9009退出…”

您必须使用以下命令编辑csproj文件 例如,记事本和取消注释 与目标相关的XML标记 Name=“AfterBuild”(您可以找到它们 通常在文件末尾)。那么, 放置与所选对象相关的标记 相关标记中的PostBuildEvent 到后构建,然后重新加载 项目和编译。它将产生一个 需要执行的.exe文件 具有管理员权限


尝试在
mt.exe
路径周围添加引号,例如:

“C:\Program Files\Microsoft SDK\Windows\v7.0A\bin\mt.exe”

此外,请确保路径有效


希望这有帮助。我整天都在和代码9009做斗争,一条完整的引用路径似乎能让它工作

退出代码9009是一个文件未找到错误。生成后命令路径中存在的空格会导致命令提示符中出现错误,除非在整个路径和可执行文件名周围加引号。本质上,在生成后命令中,它试图使用以下参数执行
C:\Program

  • 文件\Microsoft
  • SDKs\Windows\v7.0A\bin\mt.exe
  • -manifest“$(ProjectDir)$(TargetName.exe.manifest”
  • -updateresource:“$(TargetDir)$(TargetName.exe;#1”
由于根目录中显然没有名为
Program
的文件,因此整个命令失败。将路径和可执行文件封装在引号中将导致整个表达式作为单个命令进行计算,因此,如果将生成后命令更改为:

"C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\mt.exe" -manifest "$(ProjectDir)$(TargetName).exe.manifest" -updateresource:"$(TargetDir)$(TargetName).exe;#1"
或用于Windows x64中的VisualStudio x86

"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\mt.exe"

在读到这篇文章之前,我愚蠢地假设VS知道mt.exe的位置+1至

由于当前SDK没有内置宏,因此我依赖于system envar,
windowssdkdir

 "%windowssdkdir%\bin\mt.exe"

这个答案比投票结果更高、得到认可的答案要好得多。并非所有“未找到文件”错误都与报价相关。谢谢您的回答。还要确保运行生成的用户可以访问文件系统位置My PC的可能副本没有此类环境变量defined@DaveInCaz其他人也报告了失踪的恩瓦尔。对于我的回答,我指的是大约6年前投入使用的Windows7工作站。我不记得envar是如何设置的。虽然我没有那个特定的环境变量,但我同意,根据本文,我还假设您可以在生成后事件中使用mt.exe: