Как исправить ошибку MSB3073 в событии после сборки?
Я'работаю над проектом, который требует, чтобы DLL, созданные при сборке моего решения, были скопированы из папки bin в другую папку, обе из которых находятся на моей машине, на диске C. Я написал пакетный файл, который использует xcopy для выполнения этой задачи, который вы можете увидеть здесь:
xcopy /s /y /q "C:\Users\scogan\Documents\Visual Studio 2012\Projects\Organizr\Server\bin\Debug\Organizr.Services.dll" "C:\inetpub\wwwroot\AppServer\bin\"
xcopy /s /y /q "C:\Users\scogan\Documents\Visual Studio 2012\Projects\Organizr\Server\bin\Debug\Organizr.Services.pdb" "C:\inetpub\wwwroot\AppServer\bin\"
Теперь я попробовал множество итераций этого файла, который находится по адресу:
C:\Users\scogan\Desktop\CopyFiles.bat
поэтому моя командная строка событий после сборки выглядит следующим образом:
call C:\Users\scogan\Desktop\CopyFiles.bat
Я запустил этот пакетный файл самостоятельно с двумя текстовыми файлами в папках на рабочем столе, и он работает нормально. Я также запустил его как есть с файлами, которые мне нужно скопировать, и это тоже работает нормально. Однако, когда я пытаюсь запустить его как событие после сборки, я получаю следующий результат:
1> Organizr -> C:\Users\scogan\Documents\Visual Studio 2012\Projects\Organizr\Client\bin\Debug\Organizr.exe
1> File not found - Organizr.Services.dll
1> 0 File(s) copied
1> 0 File(s) copied
1> File not found - Organizr.Services.pdb
1>c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(4291,5): error MSB3073: The command "call C:\Users\scogan\Desktop\CopyFiles.bat" exited with code 4.
Я провел некоторое исследование и обнаружил, что код ошибки 4 означает, что "Произошла ошибка инициализации. Недостаточно памяти или места на диске, или вы ввели неверное имя диска, или неверный синтаксис в командной строке."
Я также посмотрел, что такое MSB3073, и не нашел ничего, что могло бы мне помочь. Итак, мой вопрос в том, что я делаю неправильно? Может, абсолютные пути все портят? Любая помощь будет принята с благодарностью.
Поиграв с различными свойствами проекта, я обнаружил, что проблема заключается в порядке сборки проекта. Проект, который генерировал файлы, которые я хотел скопировать, был построен вторым, но проект, который запускал пакетный файл как событие после сборки, был построен первым, поэтому я просто прикрепил событие сборки ко второму проекту, и все работает нормально. Спасибо всем за помощь.
Предпочтите задачу MsBuild "Копировать" в цели AfterBuild, а не в событии после сборки.
Добавьте эту цель в файл проекта и удалите событие PostBuildEvent.
Если уж на то пошло, проблема в моем случае была вызвана использованием '/' в качестве разделителя каталогов в команде
copy
. Необходимо использовать обратные слэши.