Вопрос

У меня есть существующее приложение 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>, но исключение говорит, что он не может загрузить тип

System.Collections.generic.hashSet`1 [System.int32].

Я сделал ошибку в том, как я уточнил тип в web.config? Есть ли другая причина?

Все это происходит в Visual Studio 2010 SP1 с выбором среды выполнения .NET 4.

Это было полезно?

Решение

Оказывается, что, отличается от генеракодицетагкода, List<T> требует полностью квалифицированного имени сборки.

System.Collections.generic.hashSet`1 [[System.int32]], system.core, version= 4.0.0.0, культура= нейтральная, publicketeken= b77a5c561934e089

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top