Fody плагин Validar не работает. Не удалось загрузить тип 'Validar.ValidationTemplateAttribute' из сборки mscorlib
Я пытаюсь использовать Валидар для проверки правильности своих занятий. Мое решение состоит из нескольких (на данный момент 5, может стать больше в будущем) проектов, в которые я хочу внедрить валидацию. Итак, я определил мой ValidationTemplate
класс в одном из них и поместил ValidationTemplateAttribute
в каждой сборке вот так:
using Validar;
[assembly: ValidationTemplate(typeof(IMS.General.Validation.ValidationTemplate))]
Когда я строю, я получаю ошибку, которую я не понимаю, но мешает мне идти дальше:
C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.WinFx.targets (268,9): ошибка MC1000: неизвестная ошибка сборки, "не удалось загрузить тип" Validar.ValidationTemplateAttribute "из сборки" mscorlib, версия =4.0.0.0, Культура = нейтральная, PublicKeyToken=b77a5c561934e089'.'
Я использую Visual Studio 2013 профессиональное обновление 4, а целевой платформой является.Net Framework 4.5
Если это имеет какое-либо значение для вопроса, моя реализация ValidationTemplate
похоже:
namespace IMS.General.Validation
{
public class ValidationTemplate : INotifyDataErrorInfo
{
private readonly INotifyPropertyChanged target;
private readonly ValidationContext validationContext;
private readonly List<ValidationResult> validationResults;
public ValidationTemplate(INotifyPropertyChanged target)
{
this.target = target;
this.validationContext = new ValidationContext(target, null, null);
this.validationResults = new List<ValidationResult>();
Validator.TryValidateObject(this.target, this.validationContext,
this.validationResults, true);
target.PropertyChanged += Validate;
}
private void Validate(object sender, PropertyChangedEventArgs e)
{
this.validationResults.Clear();
Validator.TryValidateObject(this.target, this.validationContext,
this.validationResults, true);
var hashSet = new HashSet<string>(
this.validationResults.SelectMany(x => x.MemberNames));
foreach (var error in hashSet)
{
this.ErrorsChanged(this,
new DataErrorsChangedEventArgs(error));
}
}
public IEnumerable GetErrors(string propertyName)
{
return this.validationResults
.Where(x => x.MemberNames.Contains(propertyName))
.Select(x => x.ErrorMessage);
}
public bool HasErrors
{
get { return this.validationResults.Count > 0; }
}
public event EventHandler<DataErrorsChangedEventArgs>
ErrorsChanged = (s, e) => { };
}
}
Что я делаю не так и как я могу решить эту проблему?
Редактировать: Давай, ребята! Неужели никто не может мне помочь с этим. Должен ли я сделать тестовое решение, чтобы показать проблему? Пожалуйста, порекомендуйте! Я действительно нуждаюсь в решении! Фоди, как правило, прекрасно работает и экономит мне много работы, сохраняя при этом мои занятия красивыми и чистыми!
1 ответ
После прямого контакта с программистом Validar он обнаружил, что разные версии.Net Framework по- разному относятся к импорту в модули. Он исправил проблемы в выпущенной версии 1.4.6. Это решает проблему.
Итак, мой совет: используйте Fody и Validar. Он отлично работает, имеет хорошую поддержку и сохраняет ваш код чистым, в то же время прекрасно проверяя его в приложении WPF (или в любой другой среде, использующей INotifyDataErrorInfo
).