Не удалось найти XML-файл в указанном расположении

Поиск и удаление "битых" решений (solutions) в SharePoint 2010, из-за которых возникают примерно вот такие ошибки:

Не удалось найти XML-файл в указанном расположении: '14\Template\Features\FetureDir\feature.xml'

Или по-английски вот такие:

Failed to find the XML file at location: '14\Template\Features\FetureDir\feature.xml'

Решение

Смысл решения заключается в следующем: мы перебираем все фичи (feature), пробуем получить какое-нибудь свойство этой фичи, заставляя тем самым SharePoint считать данные из файла-определения фичи (feature.xml). В случае возникновения исключения мы удаляем эту фичу.

Фичи на уровне фермы

"Битые" фичи на уровне фермы можно удалять примерно так:

  1. // Получаем локальную ферму
  2. var farm = SPFarm.Local;
  3. // Перебираем фичи
  4. foreach (var featdef in farm.FeatureDefinitions)
  5. {
  6.     try
  7.     {
  8.         // Пробуем получить Title
  9.         featdef.GetTitle(System.Threading.Thread.CurrentThread.CurrentCulture);
  10.     }
  11.     catch
  12.     {
  13.         // Удаляем фичу
  14.         featdef.Delete();
  15.     }
  16. }

Фичи на уровне коллекции сайтов

В случае с коллекцией сайтов мы поступаем аналогично:

  1. using (var site = new SPSite(siteUrl))
  2. {
  3.     // Перебираем фичи
  4.     foreach (var featdef in site.FeatureDefinitions)
  5.     {
  6.         try
  7.         {
  8.             // Пробуем получить Title
  9.             featdef.GetTitle(System.Threading.Thread.CurrentThread.CurrentCulture);
  10.         }
  11.         catch
  12.         {
  13.             // Удаляем фичу
  14.             featdef.Delete();
  15.         }
  16.     }
  17. }

PowerShell

И напоследок PowerShell-скрипт для удаления "битых" фич (feature)

  1. Foreach ($feature in Get-SPFeature)
  2. {
  3.     try
  4.     {
  5.         $featureTitle = $feature.GetTitle(1033)
  6.     }
  7.     catch
  8.     {
  9.         $feature.Delete()
  10.     }
  11. }

Поделиться

Коментарии