SharePoint 2010 - создание дополнительного файла web.config - PullRequest
5 голосов
/ 10 августа 2010

В настоящее время я разрабатываю новую функцию для SharePoint 2010. Наряду с развертыванием моей функции я хотел бы добавить некоторые параметры в раздел <appSettings/> в моих приложениях SharePoint web.config.

Iнашел на MSDN некоторую информацию о добавлении дополнительных файлов .config во время развертывания, но я не смог заставить это работать.Этот подход показался мне наиболее чистым, поскольку я могу хранить все свои изменения в одном файле и развертывать их вместе с остальной частью моего приложения.

Я создал файл webconfig.MyApp.xml, как предлагается в документации, развернул его в папке <SharePoint 14 hive>\Config, но мои изменения не распространяются на мои приложения web.config.

Ниже приведен пример фрагмента из моего дополнительного файла конфигурации.

<?xml version="1.0" encoding="utf-8" ?>
<actions>
    <add path="configuration/appSettings">
        <add key="MyFeatureKey" value="MyFeatureValue" />
    </add>
</actions>

Я бы хотел избежать необходимости вручную редактировать файл web.config, поскольку эти изменения могут быть легко потеряны при обслуживании SharePoint и т. Д.

Если у вас есть идеи относительно альтернативного поддерживаемого подхода к развертыванию изменений web.config, у меня открыты уши.

ОБНОВЛЕНИЕ: Ответы, которые были даны до сих пор, великолепны, и яЯ уверен, что они будут работать.Но я ищу решение, которое можно упаковать в мой единый WSP и развернуть без каких-либо дополнительных действий.

Ответы [ 6 ]

5 голосов
/ 13 августа 2010

Как предлагают Russ и breischl, вы можете использовать свойство WebConfigModifications объекта SPWebApplication. Чтобы развернуть это вместе с вашей функцией, поместите свой код в приемник функций. Таким образом, вы можете вносить изменения в web.config автоматически при установке этой функции.

В приемнике функций не забудьте вызвать свойство ApplyWebConfigModifications () для вашего объекта SPWebApplication.

Пример: http://weblogs.asp.net/wesleybakker/archive/2009/01/21/web.config-modifications-with-a-sharepoint-feature.aspx

Вы можете упаковать как вашу функцию, так и сборку вашего приемника функций в один пакет wsp.

3 голосов
/ 16 августа 2010

Относительно того, что ваш дополнительный файл не применяется к web.config: с MSDN : "Вы можете задним числом применить изменения к файлам web.config сервера, запустив операцию командной строки copyappbincontent Stsadm.необходимо выполнить операцию на каждом интерфейсном веб-сервере в развертывании. "

3 голосов
/ 13 августа 2010

При создании дополнительного файла конфигурации, изменения web.config НЕ объединяются автоматически , пока вы не сделаете вызов stsadm -o copyappbincontent.

Вы также можете принудительно запустить эту команду через FeatureReceiver.

После изучения инструмента stsadm в отражателе я обнаружил, что операция copyappbincontent вызывает SPWebApplication.WebService.ApplyApplicationContentToLocalServer() '

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

Подсказывает @ Джейсону Веберу , чтобы выяснить это, но, к сожалению, он поставил свой ответ в комментарии, а не на вопрос.

1 голос
/ 10 августа 2010

Поместите это в файл с именем AddWebConfigMods.ps1

Param ($weburl, $WebConfigModifications )

$url = New-Object System.Uri($webUrl)

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") | Out-Null
$webApp = [Microsoft.SharePoint.Administration.SPWebApplication]::Lookup($url)


#delete mods by the owners being added
$ownerstodelete = $WebConfigModifications | Group-Object owner | Select-Object Name

foreach($owner in $ownerstodelete)
{
    $modstodelete = @()
    foreach($mod in $webApp.WebConfigModifications)
    {
        if($mod.Owner -eq $owner.Name)
        {
            $modstodelete += $mod
        }
    }

    Write-Host ("Deleting " + $modstodelete.Count + " mods for owner: " + $owner)

    foreach($delmod in $modstodelete)
    {
        Write-Host (" + Deleting " + $delmod.Value)
        $webApp.WebConfigModifications.Remove($delmod) | Out-Null
    }
}

#this is where we start to add mods
$i = 0;

Write-Host ("Adding " + $WebConfigModifications.Count + " webconfig modifications to " + $weburl) 

foreach($modEntry in $WebConfigModifications)
{
    Write-Host (" + Adding " + $modEntry.Value)

    $mod = New-Object Microsoft.SharePoint.Administration.SPWebConfigModification
    $mod.Path = $modEntry.Path
    $mod.Name = $modEntry.Name
    $mod.Sequence = $i++
    $mod.Owner = $modEntry.Owner
    $mod.Type = $modEntry.Type
    $mod.Value = $modEntry.Value

    $webApp.WebConfigModifications.Add($mod)

}

$webApp.Update()
$webApp.WebService.ApplyWebConfigModifications()

Затем создайте файл csv с вашими конфигами, например, так:

Name,Path,Owner,Type,Value
system.serviceModel,configuration,alinean-common,EnsureSection,<system.serviceModel/>
connectionStrings,configuration,alinean-common,EnsureSection,<connectionStrings />
appSettings,configuration,alinean-common,EnsureSection,<appSettings />
serviceHostingEnvironment,configuration/system.serviceModel,alinean-common,EnsureChildNode,<serviceHostingEnvironment aspNetCompatibilityEnabled='true'/>

Затем в другом скрипте ps1, в идеале тот, который выиспользуйте для развертывания вашего решения, импортируйте параметры конфигурации csv и вызовите функцию, созданную в первом блоке кода:

#read config mods from CSVs
$mods = Import-CSV .\config\admin-common.webconfigmods.csv

Write-Host "Applying configuration modifications"
#add web config mods to sharepoint using powershell script
&.\AddWebConfigMods "[sharepoint site url]" $mods
&stsadm -o execadmsvcjobs
0 голосов
/ 13 августа 2010

Русь верна, вам нужно использовать WebConfigModification. Здесь - это другой ресурс, который просто использует простой код.

0 голосов
/ 10 августа 2010

Я верю , это поможет вам. Использование WebConfigModification запоминается SharePoint и автоматически записывается в физические файлы web.config, что упрощает обслуживание на нескольких развернутых сайтах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...