Fody插件Validar失败。无法从程序集mscorlib加载类型'Validar.ValidationTemplateAttribute'

时间:2014-11-26 11:04:01

标签: .net wpf validation fody fody-validar

我正在尝试使用Validar在我的课程中注入验证。我的解决方案包括多个(现在5个,将来会变得更多)项目,我想在其中注入验证。所以我在其中一个中定义了ValidationTemplate类,并将ValidationTemplateAttribute放在每个程序集中,如下所示:

using Validar;

[assembly: ValidationTemplate(typeof(IMS.General.Validation.ValidationTemplate))]

当我建立时,我收到一个我不理解的错误,但阻止我走得更远:

  

C:\的Windows \ Microsoft.NET \框架\ v4.0.30319 \ Microsoft.WinFx.targets(268,9):   错误MC1000:未知的生成错误,'无法加载类型   程序集'mscorlib''Validar.ValidationTemplateAttribute',   Version = 4.0.0.0,Culture = neutral,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) => { };
    }
}

我做错了什么,如何解决这个问题?

修改 拜托了伙计们!!有没有人可以帮助我解决这个问题。我应该制作一个测试解决方案来显示问题吗?请指教!我真的需要一个解决方案! Fody通常效果很好,在保持课堂干净整洁的同时为我节省了大量的工作!

1 个答案:

答案 0 :(得分:3)

在与Validar的程序员直接联系后,他发现不同版本的.Net框架以不同的方式对待importing into modules。他解决了已发布的版本1.4.6 的问题。这解决了这个问题。

所以我的建议:使用Fody和Validar。它运行良好,具有良好的支持并保持代码清洁,同时在WPF应用程序(或使用INotifyDataErrorInfo的任何其他框架)中进行漂亮的验证。