如何在仍然使用 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 "$(ProjectDir)test.bat UPLOAD"" 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.
有没有办法解决这个错误?
编辑:在命令中添加了参数以模拟实际使用并显示我添加 &quot;
的原因。
【问题讨论】:
edited with code -1
通常意味着您键入的命令有语法错误。所以请尝试<Exec Command="%windir%\sysnative\cmd.exe /c $(ProjectDir)test.bat" WorkingDirectory="$(ProjectDir)" />
。
@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宿主机外网不通