【问题标题】:How to include custom web.config files as part of package?如何将自定义 web.config 文件作为包的一部分包含在内?
【发布时间】:2012-11-14 03:19:55
【问题描述】:

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

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

【问题讨论】:

    标签: sharepoint-2010


    【解决方案1】:

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

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

    这是我项目中的一个 sn-p 代码,有关更多详细信息,请参阅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();
    

    【讨论】:

    • 感谢快速详细的回复!不过,我有点困惑。如果我采用这条路线并修改特定于 QA 的 web.config,我需要再次对特定于生产的 web.config 进行更改,对吗?如果是这样,那么它仍然与直接更改 web.config 而不是使用此代码进行更改相同。很确定我在这里遗漏了一些东西。
    • @tempid 理想情况下,QA/测试和生产环境可以相互模仿。但是您是正确的,因为这仍然没有解决所提供的一次性设置;如果找到这样的“通用”配置,它所做 所做的是允许流程自动化
    • 我明白你在说什么。感谢您为我指明正确的方向。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 2023-01-30
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多