Управление версиями файлов решения
Инструмент SolutionPackager можно использовать с любой системой контроля версий. После того как ZIP-файл решения будет извлечен в папку, просто добавьте и отправьте файлы в систему управления версиями. Затем эти файлы можно синхронизировать на другом компьютере, где они могут быть упакованы в новый идентичный ZIP-файл решения.
Важным аспектом при использовании извлеченных файлов компонентов в системе управлении версиями является то, что добавление всех файлов в систему управления версиями может вызвать ненужное дублирование. См. Справочник по файлам компонентов решений, чтобы увидеть, какие файлы создаются для каждого типа компонента, и какие файлы рекомендуется использовать в системе контроля версий.
Поскольку для решения необходимы дополнительные настройки и изменения, разработчики должны редактировать или настраивать компоненты с помощью существующих средств, снова экспортировать, чтобы создать ZIP-файл, и извлечь сжатый файл решения в ту же папку.
Внимание
За исключением разделов, описанных в статье Когда редактировать файл настроек, ручное редактирование извлеченных файлов компонентов и ZIP-файлов не поддерживается.
Когда средство SolutionPackager извлекает файлы компонентов, оно не будет перезаписывать существующие файлы компонентов с одинаковыми именами, если содержимое файлов идентично. Кроме того, инструмент учитывает атрибут "только для чтения" в файлах компонентов, создавая в окне консоли предупреждение о том, что определенные файлы не были записаны. Это позволяет пользователю извлекать из системы контроля версий минимальный набор файлов, которые меняются. Параметр /clobber
может быть использован для переопределения и записи или удаления файлов только для чтения. Параметр /allowWrite
может использоваться для оценки того, какое влияние оказывает операция извлечения, фактически не вызывая запись или удаление каких-либо файлов. Использование параметра /allowWrite
с подробным ведением журнала эффективно.
После завершения операции извлечения с минимальным набором файлов, извлеченных из системы контроля версий, разработчик может отправить измененные файлы обратно в систему контроля версий, как это делается с любым другим типом исходного файла.
Коллективная разработка
Когда несколько разработчиков работают над одним и тем же компонентом решения, может возникнуть конфликт, когда изменения от двух разработчиков приводят к изменениям в одном файле. Такие случаи сводятся к минимуму путем разделения каждого отдельно редактируемого компонента или подкомпонента в отдельный файл. Рассмотрим следующий пример.
Разработчики A и B оба работают над одним и тем же решением.
На независимых компьютерах они оба получают новейшие исходные файлы решения из системы контроля версий, упаковывают и импортируют ZIP-файл неуправляемого решения в независимых организациях Microsoft Dataverse.
Разработчик А настраивает системное представление "Активные контакты" и основную форму для сущности "Контакт".
Разработчик B настраивает основную форму для сущности "Организация" и изменяет "Представление подстановки контакта".
Оба разработчика экспортируют ZIP-файл неуправляемого решения и извлекают его.
Разработчику A необходимо получить один файл для основной формы контакта и один файл для представления "Активные контакты".
Разработчику B необходимо получить один файл для основной формы организации и один файл для "представления подстановки контакта".
Оба разработчика могут отправлять файлы в любом порядке, так как их соответствующие изменения коснулись разных файлов.
После завершения обеих отправок они могут повторить шаг № 2, затем продолжить вносить дальнейшие изменения в свои независимые организации. У каждого из них есть оба набора изменений, без перезаписи их собственной работы.
Предыдущий пример работает только при наличии изменений в отдельных файлах. Неизбежны случаи, когда независимые настройки требуют изменений в одном файле. Основываясь на примере, показанном выше, допустим, что разработчик B настраивал представление "Активные контакты", в то время как разработчик A также настраивал его. В этом новом примере порядок событий становится важным. Правильный процесс выхода из этого затруднительного положения, описанный полностью, заключается в следующем.
Разработчики A и B оба работают над одним и тем же решением.
На независимых компьютерах они оба получают новейшие исходные файлы решения из системы контроля версий, упаковывают и импортируют ZIP-файл неуправляемого решения в независимых организациях.
Разработчик А настраивает системное представление "Активные контакты" и основную форму для сущности "Контакт".
Разработчик B настраивает основную форму для сущности "Организация" и изменяет представление "Активные контакты".
Оба разработчика экспортируют ZIP-файл неуправляемого решения и распаковывают его.
Разработчику A необходимо получить один файл для основной формы контакта и один файл для представления "Активные контакты".
Разработчику B необходимо получить один файл для основной формы организации и один файл для представления "Активные контакты".
Разработчик А готов первым.
Прежде чем разработчик А отправляет файлы в систему контроля версий, он должен получить последние исходные файлы, чтобы перед возвратом убедиться, что не будет конфликтов с изменениями.
Там нет никаких конфликтов, поэтому разработчик А может отправлять.
Разработчик B готов следующим после разработчика А.
Прежде чем разработчик B отправляет файлы, он должен получить последние исходные файлы, чтобы перед возвратом убедиться, что не будет конфликтов с изменениями.
Возник конфликт, поскольку файл для представления "Активные контакты" был изменен с момента последнего получения новейших исходных файлов разработчиком В.
Разработчик B должен урегулировать конфликт. Возможно, что возможности используемой системы контроля версий могут помочь этому процессу; в противном случае все следующие варианты являются возможными.
Разработчик B через журнал контроля версий, если таковой имеется, может видеть, что разработчик A внес предыдущее изменение. Через прямое общение они могут обсудить каждое изменение. Затем разработчик B должен только обновить свою организацию с согласованным разрешением. Затем разработчик B экспортирует, извлекает и перезаписывает конфликтующий файл и отправляет.
Разрешить системе контроля версий перезаписать локальный файл. Разработчик B упаковывает решение и импортирует его в свою организацию, затем оценивает состояние представления и повторно настраивает его по мере необходимости. Затем разработчик B может экспортировать, извлечь и перезаписать конфликтующий файл.
Если предыдущее изменение может быть сочтено ненужным, разработчик B разрешает своей копии файла перезаписать версию в системе контроля версий и отправляет ее.
Независимо от того, выполняется ли работа в общей организации или в независимых организациях, разработка рабочей группой решений в Dataverse требуют, чтобы те, кто активно работает над общим решением, были осведомлены о работе других. Инструмент SolutionPackager не полностью устраняет эту необходимость, но позволяет легко объединять неконфликтующие изменения на уровне систему контроля версий и проактивно выделяет краткие компоненты, в которых возникли конфликты.
Следующие разделы представляют собой общие процессы для эффективного использования инструмента SolutionPackager в системе контроля версий при разработке с рабочими группами. Они работают в равной степени с независимыми организациями или совместно используемыми организациями при разработке, хотя в совместно используемых организациях экспорт и извлечение, естественно, будут включать все изменения, присутствующие в решении, а не только изменения, сделанные разработчиком, выполняющим экспорт. Аналогично, при импорте ZIP-файла решения возникает естественное поведение для перезаписи всех компонентов.
Создание решения
Следующая процедура идентифицирует типичные шаги, используемые при первом создании решения.
В чистой организации создайте решение на сервере Dataverse, затем добавьте или создайте компоненты по мере необходимости.
Когда вы будете готовы зарегистрировать файлы, сделайте следующее.
Экспортируйте неуправляемое решение.
С помощью инструмента SolutionPackager извлеките решение в файлы компонентов.
Из этих извлеченных файлов компонентов добавьте необходимые файлы в систему контроля версий.
Отправьте эти изменения в систему контроля версий.
Изменение решения
Следующая процедура идентифицирует типичные шаги, используемые при изменении существующего решения.
Синхронизируйте или получите новейшие исходные файлы компонентов решения.
С помощью инструмента SolutionPackager упакуйте файлы компонентов в ZIP-файл неуправляемого решения.
Импортируйте файл неуправляемого решения в организацию.
Настройте и отредактируйте решение по мере необходимости.
Когда вы будете готовы вернуть изменения в систему контроля версий, сделайте следующее.
Экспортируйте неуправляемое решение.
С помощью инструмента SolutionPackager извлеките экспортированное решение в файлы компонентов.
Синхронизируйте или получите последние исходные файлы из системы контроля версий.
Согласуйте, если какие-либо конфликты существуют.
Отправьте изменения в систему контроля версий.
Шаги 2 и 3 должны быть выполнены до того, как в организации разработки будут выполнены дальнейшие настройки. На шаге 5 шаг b должен быть завершен до шага c.
См. также
Справочник по файлам компонентов решения (SolutionPackager)
Инструмент SolutionPackager