Копирование файлов проектов Visual Studio в выходной каталог во время сборки
когда я создаю проект Visual Studio, исполняемый файл записывается в выходной каталог, указанный на странице свойств проектов.
У меня есть проект, который имеет некоторые дополнительные файлы (например, .ini
file), которые используются программой.
Как я могу настроить проект для копирования файла в выходной каталог, чтобы при запуске программы в его CWD была копия другого файла?
Я проверил страницу свойств файла и ничего не было полезно, кроме опции, чтобы исключить его из сборки (которая отключена), и команда custom-build-tool пуста (плюс это простой текстовый файл, который не требует никакой обработки).
7 ответов
для копирования файлов в выходной каталог в Visual Studio 2003 можно использовать событие после сборки:
- щелкните правой кнопкой мыши на проекте - > свойства
- Общие Свойства->События Построения
-
установите командную строку события после сборки в:
xcopy /y $(ProjectDir)my_file.ini $(ProjectDir)$(OutDir)
OK и построить!
попробуйте выбрать файл в обозревателе решений. Затем вы сможете увидеть его свойства в окне свойств (нажмите Ф4 если он не виден). Вы найдете там два свойства:
- "действие при построении" и
- "копировать в выходной каталог"
установите " действие сборки "в" содержимое", а затем - выберите соответствующее значение для параметра" копировать в выходной каталог".
окно свойств файла с " действием сборки" и" копировать в выходной каталог " настройки
Если выше способ не работает для Вас, пожалуйста, прочитайте этот пост "копировать в выходной каталог с выпуска .inf-файл". И взгляните-ка на это!--20-->Visual Studio: действие сборки по умолчанию для нестандартных типов файлов"
надеюсь, что это поможет
пока я искал на странице свойств файла поле build-action, у меня возникла мысль: установите шаг пользовательской сборки в скопировать файл (вручную). Это оказалось проще, чем я думал. Я полагал, что это потребует использования cmd
или другой внешний исполняемый файл (xcopy
, robocopy
, etc.), но в этом нет необходимости.
Я установил шаг пользовательской сборки следующим образом:
Command Line : copy $(InputFileName) $(OutDir)
Description : Copying foobar...
Outputs : $(InputFileName)
установка поля выходов (правильно) была критической для того, чтобы не позволяйте VS всегда думать, что проект устарел и требует перестройки (я не уверен, что он должен быть префиксом $(OutDir)\
).
это отражается в окне "вывод", как например:
Copying foobar...
1 file(s) copied.
Compiling resources...
Linking...
для VS 2017 команда Дмитрий Павлов опубликовал бы следующее:
xcopy /y "$(ProjectDir)my_file.ini" "$(OutDir)"
кавычки важны, если в пути к каталогу проекта есть пробелы.
вам нужен дополнительный $(OutDir). В противном случае на шаге rebuild/clean он выбросит ваш источник.
CommandLine : copy "$(SolutionDir)last-script.js" "$(TargetDir)Debug"
Outputs : $(TargetDir)Debug\last-script.js
Улучшение Synetech ответ :
в командной строке VS 2013 C++ project: copy %(Identity) $(OutDir) описание : копирование foobar... Выходные Данные: %(Identity) Он работает , но это приводит к круговой зависимости, т. е. он будет выполняться каждый раз, когда вы требуете инкрементной сборки, ни один метр уже не был скопирован.
чтобы решить эту проблему, вы можете добавить этот элемент в целевую папку, изменить путь на $(OutDir) и использовать его в первом добавленном элементе в качестве вывода. Недостаток-два пункта с похожие названия есть в решении.
также полезно xcopy с параметрами /d /y в postbuild - копировать, только если дата целевого файла старше.
если это кому-то поможет, мне нужно было скопировать выходную dll проекта, который я строил в другой проект.
xcopy /y "$(ProjectDir)$(OutDir)$(TargetName)$(TargetExt)"
"C:\Application\MyApplicationName\bin\x86\Debug"
/y = overwrite file if already exists
$(ProjectDir) = location on your machine where the project lives
$(OutDir) = is where your current build setup outputs the build
$(TargetName) = What the project being built is set to be called. Ex: XXX of XXX.dll
$(TargetExt) = the extension of the build Ex: .dll of XXX.dll
"C:/..../x86/Debug" is the location to copy to.