Миграция политик регистрации

Вот как перенести пользовательские политики регистрации в Team Foundation Version Control (TFVC). Вы можете обновить код, можно использовать предопределенный метод для дальнейшего автомиграции и использовать обходное решение для удаления устаревших политик.

Это важно

Выполните действия по миграции перед удалением существующих политик.

Обновления кода

Чтобы перенести пользовательские политики, выполните приведенные далее действия.

  1. Создайте новый класс с теми же методами, но наследуя CheckinPolicyBase класс (IPolicyCompatibilityJson для IPolicyCompatibility) вместо PolicyBase класса.

    Ниже приведен устаревший пример.

     [Serializable]
     public class Simple : PolicyBase
     {
        public override string Description => "SimplePolicyDescription";
        ...
     }
    

    Ниже приведен обновленный пример.

     [Serializable]
     public class SimpleNew : CheckinPolicyBase
     {
         public override string Description => "SimplePolicyDescription";
         ...
     }
    
  2. Если GetBinaryFormatter был переопределён, также реализуйте GetJsonSerializerSettings. Используйте ту же логику сериализации. Настройте JsonSerializerSettings, установив TypeNameHandling на Objects.

    Ниже приведен устаревший пример.

     [Serializable]
     public class Simple : PolicyBase
     {
         public override BinaryFormatter GetBinaryFormatter()
         {
             BinaryFormatter formatter = new BinaryFormatter();
             formatter.Binder = new SimpleBinder();
             return formatter;
         }
         ...
     }
    

    Ниже приведен обновленный пример.

     [Serializable]
     public class SimpleNew : CheckinPolicyBase
     {
         public override JsonSerializerSettings GetJsonSerializerSettings()
         {
             return new JsonSerializerSettings()
             {
                 SerializationBinder = new SimpleNewSerializationBinder(),
                 TypeNameHandling = TypeNameHandling.Objects
             };
         }
         ...
     }
    

    Для расширений, предназначенных для Visual Studio версии 16 и более ранних версий, требуется следующий дополнительный код, даже если BinaryFormatter ранее не был переопределен.

     public class CheckinSerializationBinder : ISerializationBinder
     {
         public void BindToName(Type serializedType, out string assemblyName, out string typeName)
         {
             Assembly assembly = serializedType.Assembly;
             assemblyName = assembly.FullName;
             typeName = serializedType.FullName;
         }
    
         public Type BindToType(string assemblyName, string typeName)
         {
             throw new NotImplementedException();
         }
     }
    
     [Serializable]
     public class SimpleNew : CheckinPolicyBase
     {
         public override JsonSerializerSettings GetJsonSerializerSettings()
         {
             return new JsonSerializerSettings()
             {
                 SerializationBinder = new CheckinSerializationBinder(),
                 TypeNameHandling = TypeNameHandling.Objects
             };
         }
         ...
     }
    
  3. В новом типе политики пропустите частные свойства, которые ранее были сериализованы. Добавьте [JsonProperty] , чтобы убедиться, что они сохраняются в базе данных.

    Рассмотрим пример.

     [Serializable]
     public class SimpleNew : CheckinPolicyBase
     {
         [JsonProperty]
         private List<String> pathFilters;
         ...
     }
    
  4. Замените устаревшие API-интерфейсы загрузки политик.

    Например, следующие устаревшие методы устарели: GetCheckinPoliciesForServerPaths, GetCheckinPoliciesи SetCheckinPolicies. Используйте следующие методы из пакета, соответственно: GetCheckinClientPoliciesForServerPaths, GetCheckinClientPoliciesи SetCheckinClientPolicies.

    Автоматическая миграция политик поддерживается только для пользовательских политик. Встроенные политики Visual Studio поддерживают новую модель политики и миграцию.

Использование предопределенного метода для переноса политик на сервере

Дальнейшая автомиграция доступна только для пользовательских политик. Стандартные политики Visual Studio не поддерживают эту возможность. Если вы не планируете использовать метод миграции, предоставленный пакетом NuGet, можно пропустить этот раздел и перейти к следующему разделу в этой статье.

  1. Добавьте интерфейс IPolicyMigration для каждой устаревшей настраиваемой политики. Этот интерфейс не рекомендуется и предназначен для удаления в будущем выпуске вместе с PolicyBase и IPolicyCompatibility.

    Это важно

    Устаревшие политики, которые не наследуют этот интерфейс, пропускаются во время миграции. Они не сохраняются как новые правила.

  2. Реализировать метод ToNewPolicyType в устаревшей политике. Этот метод должен:

    • Возвращает экземпляр нового класса политики.
    • Заполните новый экземпляр значениями из устаревшей политики.

    Рассмотрим пример.

     [Serializable]
     public class Simple : PolicyBase, IPolicyMigration
     {
         ...
         public CheckinPolicyBase ToNewPolicyType()
         {
             return new SimpleNew();
         }
     }
    
  3. Вызовите метод MigrateFromOldPolicies .