2

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

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

4

1 回答 1

1

我很确定仅使用包文件/ CAML无法完成 web.config 修改。

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

这是我项目中的代码片段,有关更多详细信息,请参阅代码项目 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();
于 2012-11-13T19:14:20.233 回答