SharePoint 2010 - ошибка получения при попытке использования SPWebConfigModification

Я создаю компонент SharePoint и в своем FeatureReceiver пытаюсь добавить SPWebConfigModification. Я следую подходу, описанному в это сообщение в блоге.

Вот отрывок из моего приемника функций:

public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
    var webApp = (SPWebApplication)properties.Feature.Parent;

    var debugMode = new SPWebConfigModification
                    {
                        Path = "configuration/system.web/customErrors",
                        Name = "mode",
                        Value = "Off",
                        Sequence = 0,
                        Type = SPWebConfigModification.SPWebConfigModificationType.EnsureAttribute,
                        Owner = "MyWebConfigMods"
                    };

    webApp.WebConfigModifications.Add(debugMode); // <------ Error is thrown at this line
    webApp.WebService.ApplyWebConfigModifications();
    webApp.Update();
}

Вот трассировка стека ошибки, отображаемая в средстве просмотра SharePoint ULS:

Feature receiver assembly 'MyCompany.SharePoint, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxx', class 'MyCompany.SharePoint.Features.WebConfig.WebConfigFeatureReceiver', method 'FeatureActivated' for feature '3a07b91c-0968-4f14-b2bc-ae0e3f109cf9' threw an exception: System.Xml.XPath.XPathException: '' is an invalid expression.    
at MS.Internal.Xml.XPath.XPathScanner..ctor(String xpathExpr)    
at MS.Internal.Xml.XPath.XPathParser.ParseXPathExpresion(String xpathExpresion)    
at MS.Internal.Xml.XPath.QueryBuilder.Build(String query, Boolean allowVar, Boolean allowKey)    
at System.Xml.XPath.XPathExpression.Compile(String xpath, IXmlNamespaceResolver nsResolver)    
at System.Xml.XPath.XPathNavigator.Select(String xpath)    
at System.Xml.XmlNode.SelectSingleNode(String xpath)    
at Microsoft.SharePoint.Administration.SPWebConfigFileChanges.ApplyModificationsWebConfigXmlDocument(XmlDocument xdWebConfig, String filepath)    
at Microsoft.SharePoint.Administration.SPWebApplication.ApplyWebConfigModifications()    
at Microsoft.SharePoint.Administration.SPWebService.ApplyWebConfigModifications()    
at MyCompany.SharePoint.WebConfigModificationFeatureReceiver.FeatureActivated(SPFeatureReceiverProperties properties)    
at Microsoft.SharePoint.SPFeature.DoActivationCallout(Boolean fActivate, Boolean fForce)

Где-то во время обновления в выражении XPath указывается пустой путь. Это не в моей особенности. Любые идеи?


person Wallace Breza    schedule 13.08.2010    source источник


Ответы (3)


customErrors не имеет атрибута с именем debug, вы должны иметь в виду элемент compilation

person Vladi Gubler    schedule 13.08.2010
comment
Извините, мой образец был неверным. Я обновил его, но все еще сталкиваюсь с той же ошибкой. - person Wallace Breza; 13.08.2010
comment
Мне кажется, все в порядке, можете ли вы внести другие изменения в werb.config с помощью той же функции? Кажется, не удалось найти нужный элемент, но я не понимаю, почему ... - person Vladi Gubler; 16.08.2010
comment
Нет, никаких модификаций вроде не работает. Я пробовал другие простые изменения, например, добавление элемента в <appSettings />. - person Wallace Breza; 16.08.2010
comment
Я отправлю код, который мы используем, завтра. Я не вижу проблем с вашим кодом, но это может быть что-то очень простое, например пространство имен XPath или что-то в этом роде. - person Vladi Gubler; 16.08.2010
comment
У меня такая же проблема. Устранение неполадок затруднено. - person NLV; 07.02.2011

Это код, который мы используем:

                SPWebApplication wappCurrent = (SPWebApplication)properties.Feature.Parent;
                SPWebConfigModification modAuthorizedType = new SPWebConfigModification();
                modAuthorizedType.Name = "authorizedType[@Assembly='Infowise.AssociatedTasks, Version=1.0.0.0, Culture=neutral, PublicKeyToken=23853b1f8d5855a5']";
                modAuthorizedType.Owner = "Infowise.Actions";
                modAuthorizedType.Path = "configuration/System.Workflow.ComponentModel.WorkflowCompiler/authorizedTypes";
                modAuthorizedType.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode;
                modAuthorizedType.Value = @"<authorizedType Assembly=""Infowise.AssociatedTasks, Version=1.0.0.0, Culture=neutral, PublicKeyToken=23853b1f8d5855a5"" Namespace=""Infowise.Sharepoint.V3.Fields.Workflow"" TypeName=""*"" Authorized=""True"" />";
                wappCurrent.WebConfigModifications.Add(modAuthorizedType);
                wappCurrent.Update();
                wappCurrent.Farm.Services.GetValue<SPWebService>().ApplyWebConfigModifications();

Надеюсь, если поможет

person Vladi Gubler    schedule 17.08.2010

В моем случае wappCurrent.WebConfigModifications имел некоторые старые значения с недопустимым свойством Path. Очистка массива устранила проблему.

person John    schedule 06.10.2017
comment
Пожалуйста, попробуйте правильно отформатировать свой ответ и, возможно, предоставить пример кода для очистки массива. - person Tim Visée; 06.10.2017