如何在仍然使用 sysnative 虚拟文件夹的同时使用 Visual Studio 的 Exec 代码 -1 避免错误 MSB3073

Posted

技术标签:

【中文标题】如何在仍然使用 sysnative 虚拟文件夹的同时使用 Visual Studio 的 Exec 代码 -1 避免错误 MSB3073【英文标题】:How can I avoid error MSB3073 with code -1 from Exec with visual studio while still using sysnative virtual folder 【发布时间】:2020-05-26 03:41:10 【问题描述】:

这是我之前问过的question 的后续。简而言之,我从 Visual Studio(它是 32 位应用程序)运行 64 位版本的 cmd。我这样做是因为我需要运行一个只能从 64 位版本的 cmd 访问的命令 oscdimg.exe。

  <Target Name="AfterBuild">  
    <Exec Command="%windir%\sysnative\cmd.exe /c &quot;$(ProjectDir)test.bat UPLOAD&quot;" WorkingDirectory="$(ProjectDir)" />
  </Target>

现在虽然这工作正常,但我收到以下错误。

错误 MSB3073:命令 "%windir%\sysnative\cmd.exe /c "C:\XXXX\XXX\XXX\test.bat UPLOAD"" 退出,代码为 -1。

虽然此错误不会干扰我的工作,这意味着批处理成功执行其任务,但修复此错误消息仍然很好,因为我团队中的其他人质疑此错误消息。

我假设触发了此错误,因为尽管 Visual Studio 是 32 位应用程序,但构建或 exec 调用可能是 64 位应用程序的 Windows 操作系统应用程序。而64位应用看不到sysnative virtual folder.

有没有办法解决这个错误?

编辑:在命令中添加了参数以模拟实际使用并显示我添加 &amp;quot; 的原因。

【问题讨论】:

edited with code -1 通常意味着您键入的命令有语法错误。所以请尝试&lt;Exec Command="%windir%\sysnative\cmd.exe /c $(ProjectDir)test.bat" WorkingDirectory="$(ProjectDir)" /&gt; @PerryQian-MSFT 嗨,佩里,非常感谢您的回复。不幸的是,由于在实际场景中需要使用空格作为参数,如果我删除也会出错的引号。 请将MSBuild project build output verbosity 设置为Normal,它可以输入任何其他错误信息吗?在我这边,我只是在 c# 控制台项目中使用您的命令行,它运行良好,这表明您的 test.bat 文件中可能存在一些错误。首先,请以管理员身份重新打开VS,然后重建您的项目,以防无法访问系统盘。二、打开C:\Windows\SysWOW64\cmd.exe,直接输入你的test.bat,测试是否有效。 1.我跑的很冗长,但我只看到 EXEC(0,0) 文件名与 Windows NT 3.5 2 不兼容。%windir%\sysnative\cmd.exe /c "$(ProjectDir)test.bat UPLOAD"C:\Windows\SysWOW64\cmd.exe 运行没有问题。 如上所述,我相信您对.bat 上的问题是正确的。我最近的一个惊喜是 robocopy 在成功完成复制时返回 1,VS 将其拾取并将其解释为错误。由于 oscdimg 是我在批处理文件中的最后一个命令,我假设 oscdimg 在成功后返回非零值?我找不到有关 oscdimg 的支持文件。 【参考方案1】:

我最近的一个惊喜是robocopy returns 1 when it finishes the copy successfully,作者@Valamas 以斜体显示

当没有文件被复制时会出现混乱 = VS 中没有错误。然后,当发生更改时,文件确实被复制,VS 错误,但开发人员想要的一切都完成了。

当 robocopy 是批处理文件中的最后一个命令时,VS 会拾取此返回值并将其解释为错误。

在 robocopy 的情况下,VS 返回 1 而不是 -1,所以它与我目前的情况略有不同。但是,由于我的批处理文件按预期运行,一旦批处理完成且没有错误,我觉得返回 0 是足够安全的。

exit 0

我再也看不到 MSB3073。

对于这篇文章的问题,由于 oscdimg 是我在批处理文件中的最后一个命令,我假设 oscdimg 在成功后返回非零值。

我找不到有关 oscdimg 的支持文档。

【讨论】:

以上是关于如何在仍然使用 sysnative 虚拟文件夹的同时使用 Visual Studio 的 Exec 代码 -1 避免错误 MSB3073的主要内容,如果未能解决你的问题,请参考以下文章

使用 SysNative 在 Visual Studio 中创建 64 位应用程序

如何使用 ptree(boost) 遍历 XML 文件中的同名子级?

linux上不了网,宿主机ping虚拟机通,虚拟机内部ping的同,但ping宿主机外网不通

版本更新后如何使用 Google Chrome 和虚拟主机,在 Quantum Firefox 中仍然有效

如何验证在 Tosca 的同一测试用例中创建的数据?

如何在 Android 的同一行中显示 2 个文本视图