Как исправить ошибку MSB3073 в моем событии после сборки?

Я работаю над проектом, который требует, чтобы библиотеки DLL, созданные при создании моего решения, копировались из папки bin в другую папку, обе из которых находятся на моей машине, на моем диске C. Я написал пакетный файл, который использует xcopy для этого, которые вы можете увидеть здесь:

xcopy /s /y /q "C:UsersscoganDocumentsVisual Studio 2012ProjectsOrganizrServerbinDebugOrganizr.Services.dll" "C:inetpubwwwrootAppServerbin"
xcopy /s /y /q "C:UsersscoganDocumentsVisual Studio 2012ProjectsOrganizrServerbinDebugOrganizr.Services.pdb" "C:inetpubwwwrootAppServerbin"

теперь я пробовал множество итераций этого файла, который находится по адресу:

C:UsersscoganDesktopCopyFiles.bat

поэтому моя командная строка события после сборки выглядит так:

call C:UsersscoganDesktopCopyFiles.bat

Я этот пакетный файл сам по себе с двумя текстовыми файлами в папках на моем рабочем столе, и он отлично работает. Я также запустил его как есть с файлами, которые мне нужно скопировать самостоятельно, и это тоже отлично работает. Однако, когда я пытаюсь запустить это как событие после сборки, я получаю этот вывод:

1>  Organizr -> C:UsersscoganDocumentsVisual Studio 2012ProjectsOrganizrClientbinDebugOrganizr.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:WindowsMicrosoft.NETFrameworkv4.0.30319Microsoft.Common.targets(4291,5): error MSB3073: The command "call C:UsersscoganDesktopCopyFiles.bat" exited with code 4.

Я провел некоторое исследование и обнаружил, что код ошибки 4 означает, что "произошла ошибка инициализации. Недостаточно памяти или дискового пространства, или вы ввели недопустимое имя диска или недопустимый синтаксис в команде линия."

Я также посмотрел, что такое MSB3073, и на самом деле не нашел многого, что может мне помочь. Итак, мой вопрос в том, что я делаю неправильно? Абсолютные пути все портят? Любая помощь здесь приветствуется.

11 ответов


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


предпочитают задачу MsBuild "копировать" в целевой объект AfterBuild над событием после сборки.

добавьте эту цель в файл проекта и удалите PostBuildEvent.

<Target Name="AfterBuild">
    <Copy SourceFiles="C:\Users\scogan\Documents\Visual Studio 2012\Projects\Organizr\Server\bin\Debug\Organizr.Services.*" 
          DestinationFolder="C:\inetpub\wwwroot\AppServer\bin\" 
          OverwriteReadOnlyFiles="true" 
          SkipUnchangedFiles="false" />
</Target>

для чего это стоит, проблема в моем случае была вызвана с помощью '/' в качестве разделителя каталогов в . Необходимо использовать обратные косые черты.


в моем случае dll, которую я создавал, создавая проект, все еще использовался в фоновом режиме. Я убил приложение, а затем xcopy работал нормально, как и ожидалось.


Если проблема все еще сохраняется даже после установки after build в правильном проекте, попробуйте использовать "copy" вместо xcopy. Это сработало для меня.


Это слишком поздно, но публикация моего опыта для людей, смотрящих на него позже:- В MS VS 2010 у меня была такая же проблема. Он был разрешен путем размещения кавычек для публикации команд сборки копирования, которые содержали пробелы !!!

в свойствах проекта --> свойства конфигурации --> события сборки --> событие после сборки --> командная строка изменена

копировать $(ProjectDir) a\b\c $(OutputPath)

до

копировать "$(Каталог_проекта)а\б\с" "$(поле "выходной путь")"


указанная ошибка связана с событием post built. Каким-то образом VS tool не может скопировать файлы в папку назначения. Для этого может быть много причин. Чтобы проверить точную причину ошибки, перейдите в инструменты > опция> проект и решение > Built and run и меняем "MSBuild проект сборки вывода многословие "to"Диагностика". Это даст вам достаточно информации, чтобы обнаружить реальную проблему.


У меня была та же проблема для моего тестового проекта. Я узнал, почему мое событие сборки post не работает, и это потому, что я копировал файлы перед запуском $(ProjectName).команда exe и некоторые из этих файлов были необходимы для самого тестового проекта. Следовательно, просто перемещая $(ProjectName).exe в качестве первой команды исправить эту проблему.


Я обнаружил, что проблема возникает, когда у вас есть несколько проектов, строящихся параллельно, и один или несколько проектов пытаются скопировать те же файлы, создавая условия гонки, которые приведут к случайным ошибкам. Так как же ее решить?

есть много вариантов, так как выше просто изменение вещей вокруг может решить проблему для некоторых людей. Были бы более надежные решения...

a. Ограничить копируемые файлы, т. е. вместо xcopy $(TargetDir)."... вместо этого сделайте xcopy " $(TargetDir)$(TargetName).*"...

b. Поймайте ошибку и повторите попытку i.e

:loop
xcopy /Y /R /S /J /Q  "$(TargetDir)$(TargetName).*" "somewhere"
if ErrorLevel 1 goto loop

c. Пользователь robocopy вместо xcopy

d. Вероятно, вы не захотите этого делать, так как это увеличит время сборки, но вы можете уменьшить максимальное количество параллельных сборок проекта до 1... enter image description here


событие после сборки (в разделе События сборки в диалоговом окне Свойства) импортированного проекта имело переменную среды, которая не была определена.
Перейти Control Panel\All Control Panel Items\System\Advanced system settings добавить соответствующие переменная окружения, и не делать больше чем перезапуск VS2017 разрешил ошибку.
Кроме того, следуя от @Seans и другие ответы, касающиеся нескольких гонок/конфликтов проекта, создайте временную папку в выходной папке, например,

like so

и выберите проект, производящий предпочтительный результат:

enter image description here

и build (no rebuild / clean) - это быстрое решение.


Я решил это, сделав следующее: В Visual studio я пошел в Project - > Project Dependencies

Я выбрал XXX.Тестовое решение и сказал ему, что это также зависит от решения XXX, чтобы сделать события после сборки в XXX.Тестовое решение не генерирует эту ошибку (выход с кодом 4).

с уважением,