Visual Studio: есть ли способ включить ресурсы в сборку?

У меня есть проект C++ Visual Studio, который зависит от некоторых ресурсов (.glsl файлов).

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

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


Структура проекта следующая:

root
 |
 +-- resources
 |    |
 |    +- shaders
 |        |
 |        +- shader files (.glsl)
 |
 +- src files (.cpp/.h)

Текущий результат после сборки релиза:

Release
 |
 +- .exe
 +- .pdb
 +- DLLs

Желаемый результат:

Release
 |
 +-- resources
 |    |
 |    +- shaders
 |        |
 |        +- shader files (.glsl)
 |
 +- .exe
 +- .pdb
 +- DLLs

Редактировать

Как предложил Minxin Yu - MSFT, я попытался использовать события после сборки с помощью следующей команды:

PowerShell Copy-Item -Path $(SolutionDir)$(ProjectName)\resources  -Destination  $(SolutionDir)x64\Release\ -Recurse

Но сборка завершается со следующей ошибкой:

Build started...
1>------ Build started: Project: 02es, Configuration: Release x64 ------
1>Copy-Item : Impossibile trovare un parametro posizionale che accetta l'argomento
1>'Righi\Programmi\GitHub\Fondamenti-di-Computer-Graphics-M\laboratorio\02es\resources'.
1>In riga:1 car:1
1>+ Copy-Item -Path D:\Michele Righi\Programmi\GitHub\Fondamenti-di-Compu ...
1>+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1>    + CategoryInfo          : InvalidArgument: (:) [Copy-Item], ParameterBindingException
1>    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.CopyItemCommand
1>
1>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(149,5): error MSB3073: The command "PowerShell Copy-Item -Path D:\Michele Righi\Programmi\GitHub\Fondamenti-di-Computer-Graphics-M\laboratorio\02es\resources  -Destination  D:\Michele Righi\Programmi\GitHub\Fondamenti-di-Computer-Graphics-M\laboratorio\x64\Release\ -Recurse
1>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(149,5): error MSB3073: :VCEnd" exited with code 1.
1>Done building project "02es.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
========== Build started at 9:23 AM and took 02,321 seconds ==========

Привет, твоя проблема решена? PowerShell работает?

Minxin Yu - MSFT 12.04.2023 07:22

@ MinxinYu-MSFT Привет, извините за задержку и еще раз спасибо за терпение и помощь, я обновил вопрос с ошибкой, которую я получаю при использовании предложенной вами команды. Я уже пробовал это до использования robocopy, но забыл обновить ветку. Дайте мне знать, если вы хотите узнать подробности

mikyll98 12.04.2023 09:32

Эта проблема вызвана пробелами в пути. Я буду продолжать искать решение.

Minxin Yu - MSFT 12.04.2023 10:01
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
141
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Добавьте событие после сборки в событиях сборки свойств проекта.

Например.

PowerShell Copy-Item -Path $(SolutionDir)$(ProjectName)\resources  -Destination  $(SolutionDir)x64\Release\ -Recurse

Обновлять: Для пути с пробелами объедините "" и ''

PowerShell Copy-Item "-Path '$(SolutionDir)$(ProjectName)\resources'  -Destination  '$(SolutionDir)x64\Release\' -Recurse"

Спасибо за предложение, я пробовал использовать robocopy: robocopy "$(SolutionDir)$(ProjectName)\resources" "$(SolutionDir)x64\Release\resources" /s /e и ресурсы копируются правильно, но сборка завершается с ошибкой MSB3073: :VCEnd exited with code 1

mikyll98 07.04.2023 16:45

Привет, @ mikyll98 Я протестировал robocopy, и, похоже, он плохо работает с событиями сборки. (протестирован тот же код в командной строке и Visual Studio). Пожалуйста, рассмотрите возможность использования предоставленного сценария PowerShell

Minxin Yu - MSFT 10.04.2023 03:53

Другие вопросы по теме