Как я могу исключить сбор файлов с помощью тепла (WiX 3.5)?

Я хотел бы собрать папку с большим количеством файлов с помощью heat.exe. Но вместо того, чтобы собирать все файлы, я хотел бы исключить определенные расширения файлов, такие как «* .txt» или что-то в этом роде. Как я могу это сделать?


person Marcus    schedule 17.09.2010    source источник


Ответы (3)


Я думаю, что на данный момент единственный вариант - собрать всю папку и применить преобразование к полученному файлу .wxs (см. Переключатель -t:<xsl>), чтобы исключить то, что не требуется (файлы txt в вашем случае). Впрочем, версию heat 3.5 я не пробовал (судя по 3.0), но не думаю, что в этой области есть какие-то изменения.

person Yan Sklyarenko    schedule 17.09.2010
comment
У вас есть дополнительная информация по этому поводу? Я бы хотел сделать то же самое, но с файлами .cs. Я рыскал по сети в поисках примеров, но ничего не дал. - person Sean Anderson; 30.12.2011
comment
Что ты имеешь в виду? Основная идея здесь в том, что heat.exe соберет для вас все содержимое папки, а затем вы должны отфильтровать результат либо с помощью XSLT и поддерживаемого переключателя -t, либо любым другим настраиваемым способом. Я также настоятельно рекомендую вам прочитать и понять ответ @Cristopher ниже об опасности этого подхода. - person Yan Sklyarenko; 30.12.2011

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

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

Я знаю, что Боб Арнсон соглашался с этой точкой зрения:

http://www.mail-archive.com/[email protected]/msg03420.html

Но теперь в WiX 3.5 я начинаю видеть возможности, поддерживающие динамическое связывание, и я просто не понимаю, почему они пошли по этому пути. Я бы предпочел обновить файл WXS и снова проверить его в системе управления версиями, а затем рискнуть поставить процесс развертывания на автопилот.

person Christopher Painter    schedule 18.09.2010
comment
Что вы имеете в виду, говоря простыми словами, под обеспечением контроля изменений при использовании недетерминированного процесса? Что в этом контексте означает динамическое связывание, если не файлы .dll? Я думаю, вы пытаетесь сказать, что вам следует указать тот же список файлов во второй раз в WiX. Мне кажется, что это утомительно и подвержено ошибкам и должно быть автоматизировано. - person Anthony; 23.01.2012
comment
Я говорю, что деньги здесь останавливаются. Установки являются частью разработки и управления изменениями. Это часто связано с управлением сборкой / выпуском. Дело в том, что если нужно добавить новый файл в установщик или удалить файл из установщика, я хочу, чтобы это изменение произошло намеренно. Когда вы используете динамическое связывание файлов в восходящем направлении, проблемы в автоматизации могут привести к тому, что файлы волшебным образом появятся и исчезнут из установщика без предупреждения. Это никогда не заканчивается хорошо. Это подвержено ошибкам. Продолжение следует... - person Christopher Painter; 23.01.2012
comment
Однако наличие рабочего элемента, связанного с установщиком, в котором указано, что файл необходимо удалить или добавить, и задание разработчика внести изменения в систему управления версиями для реализации этого элемента не подвержено ошибкам. Это то, что можно построить и протестировать. Теперь, если возникают проблемы с восходящим потоком, вы не можете волшебным образом добавлять и удалять файлы. Это очень надежно. Кроме того, я работал над проектами с 20 000 файлов в установщике, и переход от сборки к сборке не очень велик. Вы достигли точки стабильности, когда больше не желаете, чтобы она была динамичной. - person Christopher Painter; 23.01.2012
comment
Я не убежден в том, что файлы волшебным образом появляются и исчезают. Если файлы находятся в содержимом веб-сайта, то появление этих файлов в установщике - это хорошо, иначе почему они вообще присутствуют? Если фактическое содержимое появляется только иногда недетерминированно, то генератор установщика работает с ошибками. Если нужные вам файлы появляются и исчезают из вашего исходного дерева, проблема не в установщике. ... - person Anthony; 24.01.2012
comment
С двумя разными списками файлов у вас может быть веб-контент, который присутствует в системе управления версиями, присутствует, когда разработчик выполняет отладку локально, но не присутствует при живой установке. Это приглашение к поиску ложных ошибок. Если файл содержимого отсутствует на работающем сайте, конечно, лучше удалить его полностью вверх по течению, а не только в установщике? Зачем нужны два разных инвентаря контента? Если они не разные, почему два одинаковых независимых друг от друга? ... - person Anthony; 24.01.2012
comment
Мы могли бы обсудить различные стратегии, и я рад, что ваш способ работы поддерживается, но я не думаю, что это единственный способ сделать это, или что инструменты должны ограничивать вас такой работой. - person Anthony; 24.01.2012
comment
Извините, я думаю, что инструменты должны быть хорошими шаблонами и практиками, а не антипаттернами. Слишком много разработчиков, которые ничего не знают об установщиках, которым поручено создавать установщики. Я видел все это за свой 16-летний опыт, и вы можете отнести это в банк, когда этот признанный в отрасли эксперт скажет вам, что это плохо кончится. - person Christopher Painter; 24.01.2012
comment
Ваше обращение к власти меня, безусловно, не убедило. Все проекты не одинаковы, и я не собираюсь говорить, что лучше всего подходит для ваших проектов, они звучат совсем не так, как мои. Но я согласен с тем, что инструменты и шаблоны должны быть проще - намного проще - в использовании для разработчиков, которые время от времени работают с установщиками, поскольку это обычный случай. Я до сих пор удивляюсь тому, что основная сложность создания установщика так сильно осложняется тупыми инструментами. - person Anthony; 25.01.2012
comment
Нет, основная сложность в том, что установщик - это не просто xcopy. Не в ожидании, что инструмент автоматически абстрагируется от него как такового. И меня также не удивляет, что вы не уверены. Ничего страшного, у меня была такая же реакция сотен разработчиков за мою карьеру, и все они в конце концов приходили к вам, когда осознавали серьезность ситуации. Честно говоря, меня не волнует, что ваша установка проблематична, это просто означает, что мне понадобится больше консультационной работы позже. - person Christopher Painter; 25.01.2012
comment
Это мнение, а не ответ на вопрос. Мнение может быть обоснованным и хорошо аргументированным, но все же не является ответом на (действительный) вопрос, поэтому, на мой взгляд, неконструктивным. - person chris; 01.02.2013
comment
Меня всегда учили требованиям, дизайну, конструкции и тому, что чем дальше, тем больнее менять. Если я избавлю кого-то от головной боли от того, чтобы пойти по дороге, о которой они сожалеют, тогда это будет конструктивно. Если вы не думаете, что это конструктивно, мне все равно. Иногда не делайте этого - правильный ответ. - person Christopher Painter; 01.02.2013
comment
В среде CI обновление исходного файла wix всякий раз, когда вы добавляете или удаляете файл в проекте, является контрпродуктивным. - person Oskar Emil; 24.09.2013
comment
Бред какой то. Если вас беспокоит добавление .CSPROJ к .SLN, вы можете потрудиться, добавив .DLL к .WXS. Это называется инженером-программистом. - person Christopher Painter; 19.11.2013
comment
Программа установки предназначена не только для аппаратных продуктов, таких как .DLL, .EXE и т.п. Это может быть ресурс / контент / пакеты данных. Например, если вы делаете какие-то веб-файлы, у вас действительно могут появиться миллиарды крошечных файлов, которые часто меняют свое местоположение, имена и количество - просто потому, что веб-ребята любят создавать свои веб-сайты таким образом. И нет, они не захотят ни добавлять каждый файл в главный список, ни удалять какой-либо отдельный файл из главного списка просто потому, что они используются в среде, которая существование файла в этой местоположение достаточно. Раздражает, но настоящая жизнь. - person quetzalcoatl; 22.02.2014
comment
Не поймите меня неправильно - я не очень разбираюсь в инструментах WiX и не хочу заводить еще одну дискуссию. Я только что видел много беглых наборов кода / контента, и я просто чувствую проблему с подходом к ведению списков вручную. У команд уже много работы, и если я скажу им сохранить дополнительный список из 1000+ файлов, они посмотрят и продолжат копирование;) Я считаю, что heat и другие генераторы действительно могут помочь - их просто нужно использовать правильно, как любой инструмент. - person quetzalcoatl; 22.02.2014
comment
@ quezalcoatl: отлично работает, пока не перестает. Это проблема. Скорее всего, если кто-то не успевает за своим приложением, он не успевает за предполагаемой автоматизацией. На моей последней работе 250 разработчиков работали в среде продуктовой линейки. Это означало десятки сервисных семейств, составляющих десятки продуктов в десятках филиалов. Типичный установщик содержит 15 000 файлов и 150 функций. Мы смогли поддерживать дорожную карту архитектуры продукта, и все разработчики внесли в нее свой вклад. Результатом стали пуленепробиваемые установщики и информированные разработчики. - person Christopher Painter; 22.02.2014
comment
PS, у меня есть новая функция, которую я хотел бы реализовать в ISWIX, если вы заинтересованы в ее написании. Думаю, тебе это понравится. - person Christopher Painter; 22.02.2014
comment
Это отличное обсуждение, к которому я хотел бы кое-что добавить; @ChristopherPainter, вы правы в принципе, так как мы получили информацию о недостающих или посторонних файлах; Однако есть и другие и (по моему скромному мнению) способы отслеживать файлы, которые должны быть включены в установщик, например, проверка фиксации и процессы автоматической проверки развертывания, которые проверяют как логику установщика, так и фактические установленные файлы. Выполнение еще одного ручного действия для каждого файла (особенно файлов с изображениями) - не единственный способ, и его не следует заставлять; только рекомендуется. - person Christian Rondeau; 29.06.2014
comment
@Christian, проблема в том, что я не видел готовых решений для таких вещей. Также, как правило, требуется много долларов, чтобы списать эти вещи один раз для одного магазина, и это полезно только в этой среде. Учитывая все обстоятельства, я стараюсь сделать изменения как можно меньшими. - person Christopher Painter; 29.06.2014

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

  1. Удалите "файлы", если они существуют.
  2. Создайте папку "файлы"
  3. Скопируйте файлы в папку "files". Я использую действие сборки robocopy, которое дает мне достаточно контроля, чтобы указать, какие файлы включить или исключить.
  4. Соберите всю папку.

У меня он настроен на запуск действия сбора урожая условно, только для отладочных сборок. Сборки выпуска создаются на нашем сервере TFS и используют сгенерированные файлы .wx из системы контроля версий. Запуск сбора урожая на сервере сборки должен быть в порядке, но это дополнительный шаг, и его отсутствие устраняет проблему «недетерминированного процесса», описанную Кристофер Пейнтер. Помимо этого шага, на сервере сборки выполняются те же шаги, что и на моей машине разработчика.

person Chris Miller    schedule 17.06.2014