Динамически добавлять файлы в проект развертывания Visual Studio - PullRequest
4 голосов
/ 21 июля 2009

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

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

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

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

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

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

Graeme

Ответы [ 5 ]

2 голосов
/ 17 мая 2012

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

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

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

0 голосов
/ 06 апреля 2011

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

0 голосов
/ 04 апреля 2010

Я решил проблему обходным путем:

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

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

0 голосов
/ 18 марта 2011

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

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

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

0 голосов
/ 24 июля 2009

Попробуйте

xcopy $ (ProjectDir) .. \ Data \ *. * $ (TargetDir) Данные / e / c / i [/ f] [/ r] / y

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

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

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

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

Удачи.

...