Динамически добавлять файлы в проект развертывания 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, если вы хотите перезаписать даже ранее скопированные файлы только для чтения
Метод проще в проекте, чем в файлах, да. Помимо файлов, он копирует только измененные / отсутствующие файлы в каждой сборке, но вынуждает вас поддерживать проект при каждой модификации пакета данных. Зависит от всего размера данных и изменчивости вашего пакета данных.
Также остерегайтесь оставшихся файлов, если вы удалите некоторые из своего пакета данных и восстановите без очистки целевой папки.
Удачи.