Visual Studio 预构建 powershell 脚本以代码 9009 退出且构建失败

Visual Studio prebuild powershell script exiting with code 9009 and failing to build

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

我使用 Set-Content Powershell 命令。

当我在 Powershell 控制台中测试它时,一切正常。

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

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

可能是什么问题?

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

I use Set-Content Powershell command for it. What could be the problem?

问题原因:

1.VS 将调用 cmd.exe 之类的东西来执行您在 Build Events.

中键入的命令

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

2.Like boxdog 表示,VS中的code9009确实表示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到运行(设备到运行 Set-content直接在CMD,它会导致错误)。

相反,我们可以在 cmd.exe 中调用 powershell 到 运行 PS 脚本或 PS 命令,您可以找到许多关于如何 运行 PS 来自在线CMD的脚本。参见 run PS command in cmd, run PS from CMD, How to run PS in CMD。不过更像是另外一个问题,这里就不多说了:)

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