Динамически добавлять файлы в проект развертывания Visual Studio

Я отчаянно искал ответ на этот вопрос и чувствую, что упускаю что-то очевидное.

Мне нужно скопировать папку, полную файлов данных, в TARGETDIR моего проекта развертывания во время компиляции. Я вижу, как добавить отдельные файлы (т. Е. Щелкнуть правой кнопкой мыши в "Файловой системе" и перейти в "Добавить-> Файл"), но у меня есть папка с файлами данных, к которым постоянно добавляются. Я бы предпочел не добавлять новые файлы каждый раз, когда я компилирую.

Я попытался использовать PreBuildEvent для копирования файлов:

копировать данные $(ProjectDir)..\Data*.* $(TargetDir) \

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

Заранее спасибо.

Graeme

5 ответов

Пошел по этому маршруту.

  • Создан новый проект (удален исходный файл по умолчанию Class1)
  • Добавлены файлы / папки, необходимые для проекта.
  • Добавлен проект как вывод проекта в установщик, выбрав опцию файлы содержимого.

Это устраняет сложность необходимости архивировать / разархивировать файлы, как предлагалось ранее.

Вероятно, ваша ошибка связана с тем, что в вашем пути есть пробелы, а у вас нет путей в кавычках.

ex copy "$ (ProjectDir).. \ Data *. *" "$ (TargetDir) Data \"

Мне нужно сделать аналогичную вещь. Думая о собственном действии...

Я решил проблему с помощью обходного пути:

  • Добавьте действие сборки, упаковав весь каталог (можно отфильтровать) в ZIP-файл.
  • Добавьте ссылку на пустой ZIP-файл в проект развертывания.
  • Добавьте пользовательское действие в проект развертывания, чтобы извлечь ZIP в папку назначения.

Это просто и стабильно.

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

Пытаться

xcopy $ (ProjectDir).. \ Data \ *. * $ (TargetDir) Data / e / c / i [/ f] [/ r] / y

/ e, чтобы обеспечить выполнение древовидной структуры (используйте / s, если вы хотите обойти пустые папки)
/ c продолжить при ошибке (пусть процесс сборки завершится)
/ мне необходимо создать папку назначения, если ее не существует
/ y принять "да" для перезаписи в случае ранее существующих файлов

[Optionnal]
/ f если вы хотите увидеть все пути, полученные в результате копирования
/ r, если вы хотите перезаписать даже ранее скопированные файлы только для чтения

Метод проще в проекте, чем в файлах, да. Помимо файлов, он копирует только измененные / отсутствующие файлы в каждой сборке, но вынуждает вас поддерживать проект при каждой модификации пакета данных. Зависит от всего размера данных и изменчивости вашего пакета данных.

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

Удачи.

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