当我们编写自定义的类型转换器比如从 TypeConverter、ExpandableObjectConverter 等继承,首次编译后,修改属性值是正常的,当再次编译后,再次修改属性则会提示如下错误:
属性“属性名”的代码生成失败。错误是: “类型转换器类名”无法将“属性名”转换为“System.ComponentModel.Design.Serialization.InstanceDescriptor”
主要原因为类型转换器是直接进入 CLR 的类型信息缓存并不经过项目实现的类型解析服务系统。这意味着 CLR 将从程序集返回类型之前已加载,重新编译后不会再次加载,导致在设计器修改属性后提示转换将失败;我们可以通过每次编译前修改版本号强制 CLR 失效,使其重新加载新的类型转换器。
修改版本号的文章请参考:VS 在编译和发布时自动修改版本号(DotNet Framework)
原文地址: