2012-11-13 28 views
2

我是SharePoint 2010的新手。我右鍵單擊項目,選擇部署,如果我想本地部署。項目上的網站URL被設置爲我的本地機器。如果我想要部署到QA服務器,請選擇部署,導航到調試/發佈文件夾,獲取.wsp文件,登錄到QA的管理中心,收回解決方案,然後通過powershell執行Add-SPsolution <path to wsp file>,返回到中央管理員,點擊該部署的解決方案。工作正常。如何包含自定義web.config文件作爲包的一部分?

我本地機器上的web.config有一個自定義連接字符串和appsettings。當我在QA服務器上部署軟件包時,我手動更改特定於QA的連接字符串和appsettings。我想讓這個過程自動化。我希望web.config成爲包含自定義連接字符串(一個用於本地,一個用於QA,用於生產)和appsettings的包的一部分。我該怎麼做?目標是在一臺新機器上,我應該能夠部署wsp和appsettings + web.config應該都是正確的,而不需要手動修改任何東西。我該如何做到這一點?

回答

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(); 
+0

欣賞快速和詳細的反應!不過,我有些困惑。如果我採用此路線並修改特定於QA的web.config,則需要再次針對特定於生產的web.config進行更改,是否正確?如果是這樣,那麼它仍然是直接改變web.config而不是使用這個代碼。很確定我在這裏失去了一些東西。 – tempid

+0

@temp理想情況下,QA /測試和生產環境會相互模仿。但是你是正確的,因爲這仍然沒有解決所提出的一次性設置;如果找到這樣的「通用」配置,它*做的*是允許該過程被自動化*。 – 2012-11-13 19:37:30

+0

我明白你的意思了。感謝您指點我正確的方向。非常感激。 – tempid

相關問題