加载ASP.Net配置文件时出错

时间:2012-07-27 02:17:45

标签: asp.net-mvc-4 asp.net-profiles

我有一个使用AspNetSqlProfileProvider的现有MVC 4应用程序,配置如下:

<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中。

1 个答案:

答案 0 :(得分:0)

事实证明,与List<T>不同,HashSet<T>需要一个完全限定的程序集名称。

  

System.Collections.Generic.HashSet`1 [[System.Int32]],System.Core,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089