代码之家  ›  专栏  ›  技术社区  ›  Wallace Breza

SharePoint 2010-创建补充web.config文件

  •  5
  • Wallace Breza  · 技术社区  · 16 年前

    我目前正在为SharePoint2010开发一个新功能。随着我的功能的部署,我想将一些设置添加到 <appSettings/> 我的SharePoint应用程序web.config中的节。

    我发现了一些关于 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 回复  |  直到 13 年前
        1
  •  3
  •   Jason Weber    16 年前

    关于未应用于web.config的补充文件:来自 MSDN :“通过运行copyappbincontent stsadm命令行操作,可以将更改追溯应用到服务器的web.config文件。必须在部署中的每个前端Web服务器上运行该操作。“

        2
  •  5
  •   Tom Vervoort    16 年前

    正如Russ和Breischl建议的那样,您可以使用SPWebApplication对象的WebConfigModifications属性。要将它与您的特性一起部署,请将代码放在特性接收器中。这样,您可以在安装该功能时自动修改web.config。

    在功能接收器中,不要忘记调用SPWebApplication对象上的applyWebConfigModifications()属性。

    例子: http://weblogs.asp.net/wesleybakker/archive/2009/01/21/web.config-modifications-with-a-sharepoint-feature.aspx

    您可以将特性和特性接收器程序集打包到单个WSP程序包中。

        3
  •  3
  •   Wallace Breza    16 年前

    创建补充配置文件时,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();
    }
    

    道具 @ Jason Weber 因为他知道了这一点,但不幸的是,他把他的答案放在了评论而不是问题上。

        4
  •  1
  •   Divi    13 年前

    将其放入名为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
    
        5
  •  0
  •   Community Mohan Dere    9 年前

    我相信 this 会帮助你的。使用webconfigmodifications会被SharePoint记住,并自动写入物理web.config文件中供您使用,从而便于跨多个部署的站点进行维护。

        6
  •  0
  •   Brian Reischl    16 年前

    RUSS是正确的,您需要使用WebConfigModifications。 Here 是另一个只使用纯代码的资源。