Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Вот как перенести пользовательские политики регистрации в Team Foundation Version Control (TFVC). Вы можете обновить код, можно использовать предопределенный метод для дальнейшего автомиграции и использовать обходное решение для удаления устаревших политик.
Это важно
Выполните действия по миграции перед удалением существующих политик.
Обновления кода
Чтобы перенести пользовательские политики, выполните приведенные далее действия.
Создайте новый класс с теми же методами, но наследуя
CheckinPolicyBaseкласс (IPolicyCompatibilityJsonдляIPolicyCompatibility) вместоPolicyBaseкласса.Ниже приведен устаревший пример.
[Serializable] public class Simple : PolicyBase { public override string Description => "SimplePolicyDescription"; ... }Ниже приведен обновленный пример.
[Serializable] public class SimpleNew : CheckinPolicyBase { public override string Description => "SimplePolicyDescription"; ... }Если
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 }; } ... }В новом типе политики пропустите частные свойства, которые ранее были сериализованы. Добавьте
[JsonProperty], чтобы убедиться, что они сохраняются в базе данных.Рассмотрим пример.
[Serializable] public class SimpleNew : CheckinPolicyBase { [JsonProperty] private List<String> pathFilters; ... }Замените устаревшие API-интерфейсы загрузки политик.
Например, следующие устаревшие методы устарели:
GetCheckinPoliciesForServerPaths,GetCheckinPoliciesиSetCheckinPolicies. Используйте следующие методы из пакета, соответственно:GetCheckinClientPoliciesForServerPaths,GetCheckinClientPoliciesиSetCheckinClientPolicies.Автоматическая миграция политик поддерживается только для пользовательских политик. Встроенные политики Visual Studio поддерживают новую модель политики и миграцию.
Использование предопределенного метода для переноса политик на сервере
Дальнейшая автомиграция доступна только для пользовательских политик. Стандартные политики Visual Studio не поддерживают эту возможность. Если вы не планируете использовать метод миграции, предоставленный пакетом NuGet, можно пропустить этот раздел и перейти к следующему разделу в этой статье.
Добавьте интерфейс
IPolicyMigrationдля каждой устаревшей настраиваемой политики. Этот интерфейс не рекомендуется и предназначен для удаления в будущем выпуске вместе сPolicyBaseиIPolicyCompatibility.Это важно
Устаревшие политики, которые не наследуют этот интерфейс, пропускаются во время миграции. Они не сохраняются как новые правила.
Реализировать метод
ToNewPolicyTypeв устаревшей политике. Этот метод должен:- Возвращает экземпляр нового класса политики.
- Заполните новый экземпляр значениями из устаревшей политики.
Рассмотрим пример.
[Serializable] public class Simple : PolicyBase, IPolicyMigration { ... public CheckinPolicyBase ToNewPolicyType() { return new SimpleNew(); } }Вызовите метод
MigrateFromOldPolicies.