Как можно избежать ошибки MSB3073 с кодом -1 из Exe c в Visual Studio при использовании виртуальной папки sysnative - PullRequest
0 голосов
/ 10 февраля 2020

Это продолжение вопроса , который я задавал ранее. В двух словах, я запускаю 64-битную версию cmd из visual studio (32-битное приложение). Я делаю это потому, что мне нужно запустить команду oscdimg.exe, которая доступна только из 64-битной версии cmd.

  <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-битным приложением, сборка или exe c требует приложения windows операционной системы, которое может быть 64-битным приложением. И 64-разрядное приложение не может видеть виртуальную папку sysnative .

Есть ли способ устранить эту ошибку?

РЕДАКТИРОВАТЬ: Добавлен аргумент в команду для имитации реального использования и показать причину, которую я добавляю &quot;.

1 Ответ

0 голосов
/ 12 февраля 2020

Одним из недавних сюрпризов для меня является то, что robocopy возвращает 1, когда успешно завершает копирование , автор @Valamas показывает на итальянском c

Путаница наступит, когда файлы не будут скопированы = нет ошибок в VS. Затем, когда есть изменения, файлы действительно копируются, ошибки VS, но все, что хотел разработчик, было сделано.

VS подхватывает и интерпретирует это возвращаемое значение как ошибку, когда robocopy является последней командой в командном файле.

В случае робокопии VS возвращает 1, а не -1, поэтому он немного отличается от моей текущей ситуации. Однако, поскольку мой пакетный файл функционирует должным образом, я чувствовал себя достаточно безопасно, чтобы вернуть 0, как только пакет завершен без ошибок.

exit 0

И я больше не вижу MSB3073.

Для проблема этого поста, так как oscdimg - моя последняя команда в командном файле, я предполагаю, что oscdimg возвращает ненулевое значение после успешного завершения.

Я не смог найти подтверждающий документ относительно oscdimg.

...