Однажды при создании решения со столбцами сайта, типами контента и списками в результате небольшой ошибки в описании XML столбцов столкнулся с тем, что не могу ни обновить решение, ни удалить.

Visual studio выдавала сообщение об ошибке:

Error      1             Error occurred in deployment step 'Activate Features': Тип поля "Decimal" установлен неправильно. Перейдите на страницу параметров списка и удалите это поле.

 

При считывании колонок сайта через консоль SharePoint (PowerShell) получал аналогичную ошибку:

PS C:\Users\user> $spsite = Get-SPSite http://spdev/
PS C:\Users\user> $spweb = Get-SPWeb http://spdev/fis/
PS C:\Users\user> $spweb.Fields

Выводится список колонок сайта, прерывающийся на ошибке:

An error occurred while enumerating through a collection: Field type Decimal is
not installed properly. Go to the list settings page to delete this field. .
At line:1 char:8
+ $spweb. <<<< Fields
    + CategoryInfo          : InvalidOperation: (Microsoft.Share...on+SPEnumer
   ator:SPEnumerator) [], RuntimeException
    + FullyQualifiedErrorId : BadEnumeration

 

Что бы ни говорили в Microsoft про то, что нельзя трогать контентную базу SharePoint, изменение внутри базы – единственный способ устранения ошибки. Насколько мне известно, такой баг был заведен коллегами из других стран более года назад и он до сих пор не исправлен.

Внимание! В результате манипуляций, описанных ниже, Вы лишитесь поддержки Microsoft, если она есть и она нужна.

Задача по исправлению сводится к поиску удалению из таблицы "ContentTypes" записи о неправильном типе контента. В таблице ContentTypes хранятся записи о типах столбцов сайта и типах контента.

Поскольку я создавал решения для SPWeb и на уровне SPWeb активировал фичу добавления типов столбцов, то для сужения поиска нужных записей сделал запрос к таблице, где в условии Where указал название рабочего сайта 'fis'. Увидев в результате 4 записи добавил к условию "Definition like '%decimal%'":

Найдя одну запись и посмотрев на значения колонок в таблице, следующим запросом я удалил эту запись:

Сразу после этого ошибка пропала.

Как уже писал выше, от таких манипуляций пропадает поддержка Microsoft. Потому такие вещи можно делать ТОЛЬКО В ТЕСТОВЫХ СРЕДАХ!