2013-06-12 2 views
16

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

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, и на самом деле не нашел много, что может мне помочь. Итак, мой вопрос в том, что я делаю неправильно? Абсолютные пути испортили его? Любая помощь здесь ценится.

ответ

19

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

+0

Это исправило проблему для меня. Добавлен новый модуль, в котором используются те же файлы, что и в случае события post build. Я добавил новые зависимости, и он снова работал. – vasquez

12

Предпочитаете задачу «Копировать» 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> 
+1

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

+0

Даже лучше, если вы укажете файл, используя метаданные, а не жесткий путь, например. Исходники, = "$ (TargetPath)". –

+0

@ Ник Карлсон, где я действительно добавляю это? Что вы подразумеваете под файлом проекта? Например, MainWindow.xaml? –

7

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

1

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

0

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

3

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

+0

это спасательное решение :) –

0

Это слишком поздно, но выставляю свой опыт для людей, которые смотрят на него позже: - В MS VS 2010 у меня была такая же проблема. Это было разрешено, поставив кавычки в post build copy command args, которые содержали пробелы !!!

Проект Свойства -> Свойства конфигурации -> Build Events -> Post-Build Event -> Командная строка изменена

копия $ (ProjectDir) а \ Ь \ с $ (OutputPath)

к

копия «$ (ProjectDir) а \ Ь \ с» «$ (OutputPath)»

0

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

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

a. Ограничьте файлы, скопированные, т. Е. Вместо xcopy $ (TargetDir) .»... вместо того, чтобы сделать хсор "$ (TargetDir) $ (Имя_целевого_объект). *" ...

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

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

с. User Robocopy вместо хсора

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

0

Пост-Build Event (в разделе «События сборки», в свойствах диалог) импортированного проекта, имеет переменную среды, которая не была определена.
Переместился на Control Panel\All Control Panel Items\System\Advanced system settings, чтобы добавить соответствующий environment variable, and doing no more, чем перезапуск VS2017 разрешил ошибку.

Смежные вопросы