【问题标题】:Visual Studio prebuild powershell script exiting with code 9009 and failing to buildVisual Studio prebuild powershell 脚本以代码 9009 退出并且无法构建
【发布时间】:2019-09-26 14:51:41
【问题描述】:

在我的项目中,我设置了更新 *.cs 和 *.xaml 文件(包含在正在构建的项目中)的内容的预构建事件。

我使用Set-Content Powershell 命令。

当我在 Powershell 控制台中对其进行测试时,一切正常。

但是当我在预构建事件中粘贴时,它会生成代码 9009 错误并阻止 VS 成功构建我的项目。

我已将构建输出详细程度设置为 Diagnostic,但没有更多信息。

可能是什么问题?

我目前的猜测是 VS 锁定文件以进行构建,因此 Powershell 命令无法修改它们。

【问题讨论】:

  • 错误 9009 可能意味着'XXX' is not recognized as an internal or external command, operable program or batch file,尽管Set-Content 听起来不太可能。作为测试,您能否让 Set-Content 写入另一个不相关的文件(来自 VS),以确保整个脚本正常工作?
  • @boxdog 正如我所说,我在 Powershell 控制台中对其进行了测试,那里一切正常。
  • 是的,但是您是否通过 VS 进行了测试以确保您所针对的特定文件存在问题?
  • @boxdog 用另一个文件测试过,同样的问题。

标签: c# .net visual-studio msbuild pre-build-event


【解决方案1】:

我为此使用 Set-Content Powershell 命令。可能是什么问题?

问题原因:

1.VS 会调用cmd.exe 之类的东西来执行你在Build Events 中输入的命令。

这意味着您正在尝试在cmd.exe 中运行Set-content 命令。

2.就像boxdog所说,code9009在VS中确实表示the command is not recognized

更具体地说,Set-content 是 PowerShell 命令,不是 cmd.exe 识别的命令。(参见 #1,VS 调用 cmd.exe 来运行命令)。

所以问题出现了:Type a PowerShell command in build events => VS calls cmd.exe to execute it => cmd.exe can't recognize a PS command. and throw error=> VS output log displays error code9009.

建议:

您不能直接在构建事件中输入Set-content 来运行(设备在CMD 中直接运行Set-content 会导致错误)。

我们可以调用powershell 来运行PS 脚本或cmd.exe 中的PS 命令,您可以在网上找到许多有关如何从CMD 运行PS 脚本的相关主题。请参阅run PS command in cmdrun PS from CMDHow to run PS in CMD。不过这更像是另外一个问题,这里就不多说了:)

总而言之:您可以选择创建一个新的 PS 脚本并将您的 Set-content 命令移入其中,然后在构建事件中键入 powershell -file path\xx.ps1 或简单的 powershell - command 之类的命令。然后Error9009 就会消失。 (我相信Error9009会消失,但是我看到太多关于其他错误代码的问题,其中大多数与路径问题有关,因此请注意脚本中定义的路径。)

【讨论】:

  • 太棒了!谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-31
  • 1970-01-01
  • 2012-10-24
  • 2014-05-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多