我有一个现有的MVC 4应用程序,它使用AspNetSqlProfileProvider,配置如下:
<properties>
<add name="MyTypeAs"
type="System.Collections.Generic.List`1[[My.Namespace.MyTypeA, My.Namespace, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" serializeAs="Binary" />
</properties>
现在我想更新系统(不删除旧的配置文件)如下:
<properties>
<add name="MyTypeAs"
type="System.Collections.Generic.List`1[[My.Namespace.MyTypeA, My.Namespace, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" serializeAs="Binary" />
<add name="MyHashOfInts"
type="System.Collections.Generic.HashSet`1[System.Int32]" serializeAs="Binary" />
</properties>
我在以前的项目中添加其他属性没有问题。如果序列化的数据来自未定义附加属性的早期版本,则加载该属性产生默认值(T)。然而,有了这个变化,当我的控制器执行以下行时:
List<MyTypeA> myTypeAs =
(List<MyTypeA>)HttpContext.Current.Profile.GetPropertyValue("MyTypeA");
抛出异常:
试图加载此属性的类型导致以下错误:无法加载类型"System.Collections.Generic.HashSet `1[System.Int32]"。
注意,我引用了一个类型为List<MyTypeA>
的属性,但Exception表示它无法加载类型
System.Collections.Generic.HashSet`1[System.Int32].
我在web.config中指定类型的方式是否出错?还有其他原因吗?
所有这些都发生在选择了.NET 4运行时的Visual Studio 2010 SP1中。
事实证明,与List<T>
不同,HashSet<T>
需要一个完全限定的程序集名称。
System.Collections.Generic.HashSet`1[[System.Int32]],System.Core,版本=4.0.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089