如何将自定义web.config文件包含在包中?

时间:2012-11-13 19:11:46

标签: sharepoint-2010

我是SharePoint 2010的新手。我右键单击该项目,如果要在本地部署,请选择“部署”。项目上的站点URL设置为我的本地计算机。如果我想部署到QA服务器,我选择Deploy,导航到Debug / Release文件夹,获取.wsp文件,登录QA上的管理中心,撤消解决方案,然后通过powershell执行Add-SPsolution <path to wsp file>,返回中央管理员,单击该软件包的部署解决方案。工作良好。

我本地计算机上的web.config有一个自定义连接字符串和appsettings。当我在QA服务器上部署包时,我手动更改特定于QA的连接字符串和appsettings。我想自动化这个过程。我希望web.config成为包的一部分,它有自己的自定义连接字符串(一个用于本地,一个用于QA,用于生产)和appsettings。我该怎么做?目标是在新机器上,我应该能够部署wsp和appsettings + web.config应该都是正确的,而无需手动修改任何内容。我该如何做到这一点?

1 个答案:

答案 0 :(得分:1)

我非常确定web.config修改不能只用包文件/ CAML 完成。

但是,可以完成的是部署WebApplication Feature Reciever,它通过SPWebApplication.WebConfigModifications修改web.config。

以下是我项目中的代码片段,有关详细信息,请参阅the the Code Project KB :(第一位只是一个带有一些注释的方便功能。)

// For WebConfigModifications access,
// see http://www.codeproject.com/KB/sharepoint/SPWebConfigModTool.aspx
// Hints:
// app.WebConfigModifications.Add(new SPWebConfigModification
//    {
//        Type =     [add/update child node?]
//        Path =     [XPath of parent node]
//        Name =     [XPath to identify child node UNIQUELY]
//        Owner =    [Use GUID to identify as ours]
//        Sequence = [Sequence number, likely 0 for only one]
//        Value =    [XML node to add/update]
//    });
void ModfiyWebConfig (SPWebApplication app, string path, string name, XElement node)
{
    app.WebConfigModifications.Add(new SPWebConfigModification
    {
        Type = SPWebConfigModificationType.EnsureChildNode,
        Path = path,
        Name = name,
        Owner = OwnerId,
        Sequence = 0,
        Value = node.ToString(),
    });
}

获取/初始化SPWebApplication

var app = properties.Feature.Parent as SPWebApplication;

队列/设置修改

ModfiyWebConfig(app,
            "configuration/system.webServer/modules",
            "add[@name='ASPxHttpHandlerModule']",
            new XElement("add",
                new XAttribute("name", "ASPxHttpHandlerModule"),
                new XAttribute("type", aspxHandlerModule)));

应用修改

app.WebService.ApplyWebConfigModifications();
app.Update();