使用批处理文件或.NET代码更改Web.config中的值

时间:2009-03-19 12:20:36

标签: c# .net asp.net vb.net sharepoint

我的计算机上有一个web.config文件。

我需要在文件中更改和添加很多内容。 (我实际上使用的是我的SharePoint web.config文件)

我可以使用批处理文件执行此操作,如果是这样,我该怎么做。 或者我如何使用VB.NET或C#代码?

任何想法的人?

编辑:我需要创建一个程序来改变web.config,让我说我放在我的桌面上的web.config而不是我项目的实际web.config

此致 艾蒂安

7 个答案:

答案 0 :(得分:4)

您可以从C#代码修改它,例如:

Configuration configuration = WebConfigurationManager.OpenWebConfiguration("~");     
AppSettingsSection appSettingsSection = (AppSettingsSection)configuration.GetSection("appSettings"); 

if (appSettingsSection != null) 
{
  appSettingsSection.Settings["foo"].Value = "bar"; 
  config.Save();
}

其中foo是键,并且显然要设置键的值。要删除值,请使用Settings.Remove(key);

有关OpenWebConfiguration方法的更多信息,请参阅msdn documentation

答案 1 :(得分:3)

您想要更改文件的上下文确实会影响您应该如何操作。如果您正在考虑相对频繁地执行更改,但是在管理域中,那么某种命令行工具是有意义的,在这种情况下,我同意JaredPar PowerShell将是一个有价值的工具。

另一方面,如果您发现自己需要在更具程序性的环境中修改web.config(例如,作为安装程序的一部分),那么使用编程技术可能会更有意义。我最近不得不这样做,Linq to Xml证明非常方便。

例如,要打开文档“C:\ foo \ bar.xml”,您可以执行类似(未经测试,目前没有方便的构建环境):

XDocument config = XDocument.Load(@"C:\foo\bar.xml");

然后你可以用API以通常的方式继续。请注意,如果您正在执行管理任务而不是编程任务,这可能会有点过头 - 学习像PowerShell这样的工具有很大的长期优势。

最后,如果您正在从正在使用web.config的程序中修改web.config,并且您没有做任何过于花哨或动态的事情,那么使用内置的{{1} }或ConfigurationManager可能是要走的路。

答案 2 :(得分:1)

您最好的选择是使用MSBuild脚本和MsBuild Community Tasks XML批量更新任务来更改它

答案 3 :(得分:1)

我个人建议使用PowerShell。这是微软的下一代命令行,它位于.Net之上。它是为了跨大型文件集进行批量编辑等项目而构建的。

答案 4 :(得分:1)

对于SharePoint环境中的web.config更改,您可以使用专门为此任务开发的类。您只需搜索SPWebConfigModification class

答案 5 :(得分:1)

加载任意.NET配置文件

string configLocation = @"C:\myconfigFile.Config";
ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap();


configFileName = configLocation;
configFileMap.ExeConfigFilename = configFileName;

Configuration configuration= ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None);

然后使用Razzie's code更改实际的配置设置

AppSettingsSection appSettingsSection = (AppSettingsSection)configuration.GetSection("appSettings"); 
if (appSettingsSection != null) 
{  
    appSettingsSection.Settings["foo"].Value = "bar";   
    configuration.Save();
}

答案 6 :(得分:0)

这是我需要做的.......感谢所有帮助!!!

// Read in Xml-file 
        XmlDocument doc = new XmlDocument();
        doc.Load("C:/Web.config");

        //SaveControl tag..........................................................
        XmlNode n = doc.SelectSingleNode("/configuration/SharePoint/SafeControls");

        XmlElement elemWeb = doc.CreateElement("SafeControl");
        elemWeb.SetAttribute("Assembly", "SamrasWebOption4");
        elemWeb.SetAttribute("Namespace", "SamrasWebOption4");
        elemWeb.SetAttribute("TypeName", "*");
        elemWeb.SetAttribute("Safe", "True");

        XmlElement elemSmartPart = doc.CreateElement("SafeControl");
        elemSmartPart.SetAttribute("Assembly", "Machine_Totals");
        elemSmartPart.SetAttribute("Namespace", "Machine_Totals");
        elemSmartPart.SetAttribute("TypeName", "*");
        elemSmartPart.SetAttribute("Safe", "True");

        //Appending the Nodes......................................................
        n.AppendChild(elemWeb);
        n.AppendChild(elemSmartPart);

        //Saving the document......................................................
        doc.Save("C:/Web.config");