Блокировка регистрации при сбое политики
В качестве примера я создал политику регистрации из этой статьи MSDN (код просто копируется / вставляется).
Это работает нормально, появляется, когда я пытаюсь пройти регистрацию, однако это выглядит как предупреждение. Так что я могу проигнорировать это, просто нажав Check In снова. Как я могу изменить код, указанный в URL, чтобы он возвращал ошибку, а не предупреждение. Я не вижу никаких свойств на PolicyFailure, чтобы сделать это.
По сути, я хочу, чтобы это выглядело как ошибка на этом скриншоте:
РЕДАКТИРОВАТЬ: Вот точный код, который я использую. Теперь он немного изменен по сравнению с исходным кодом, но не так сильно, как я бы подумал. К сожалению, я не могу публиковать скриншоты, но постараюсь описать все, что я сделал.
Итак, у меня есть DLL из кода ниже, я добавил ее в папку C:\TFS\CheckInComments.dll. Я добавил раздел реестра под Checkin Policies с путем к DLL, имя строкового значения совпадает с моим DLL (минус.dll). В настройках моего проекта в системе контроля версий я добавил эту Политику регистрации.
Кажется, все работает нормально, если я попытаюсь пройти регистрацию, появится предупреждение "Пожалуйста, предоставьте некоторые комментарии о вашей регистрации", чего я и ожидаю, и я хотел бы, чтобы он остановил регистрация, если какие-либо политики не соблюдаются, однако я все же хотел бы, чтобы пользователь мог при необходимости выбрать Переопределить. На данный момент, несмотря на предупреждение, если бы я нажал кнопку "Регистрация", он успешно зарегистрировал бы код.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.TeamFoundation.VersionControl.Client;
namespace CheckInComments
{
[Serializable]
public class CheckInComments : PolicyBase
{
public override string Description
{
get
{
return "Remind users to add meaningful comments to their checkins";
}
}
public override string InstallationInstructions
{
get { return "To install this policy, read InstallInstructions.txt"; }
}
public override string Type
{
get { return "Check for Comments Policy"; }
}
public override string TypeDescription
{
get
{
return "This policy will prompt the user to decide whether or not they should be allowed to check in";
}
}
public override bool Edit(IPolicyEditArgs args)
{
return true;
}
public override PolicyFailure[] Evaluate()
{
string proposedComment = PendingCheckin.PendingChanges.Comment;
if (String.IsNullOrEmpty(proposedComment))
{
PolicyFailure failure = new PolicyFailure("Please provide some comments about your check-in", this);
failure.Activate();
return new PolicyFailure[1]
{
failure
};
}
else
{
return new PolicyFailure[0];
}
}
public override void Activate(PolicyFailure failure)
{
MessageBox.Show("Please provide comments for your check-in.", "How to fix your policy failure");
}
public override void DisplayHelp(PolicyFailure failure)
{
MessageBox.Show("This policy helps you to remember to add comments to your check-ins", "Prompt Policy Help");
}
}
}
1 ответ
Политика регистрации всегда будет возвращать предупреждение, и если ваш пользователь имеет разрешение на их игнорирование, он может это сделать.
Пользователи всегда могут переопределить политику. Вы можете запросить у хранилища TFS отчет о пользователях, нарушивших политики, и их причинах нарушения, если они их предоставили. Или настройте оповещение всякий раз, когда кто-то игнорирует эти вежливые предупреждения.
Нет никакого способа добиться этого из самой политики. Только из плагина на стороне сервера, как описано Neno в цитируемом вами сообщении. Такой плагин на стороне сервера может быть создан на 2012 или 2010 год. Процесс объясняется здесь.
Я только что преодолел эту проблему, включив анализ кода в моем проекте - щелкните правой кнопкой мыши свой проект, выберите "Свойства", перейдите в "Анализ кода", выберите "Конфигурация" и выберите "Все конфигурации", выберите "Включить анализ кода при сборке".,
Сделайте сборку и убедитесь, что у вас нет ошибок / предупреждений.
Это поможет вам преодолеть любые политики, требующие анализа кода при сборке.