读取并替换存储在 C# 中不同项目位置的 web.config 中特定标签的值

Read and replace Values of a particular tag in web.config stored at a different project locations in C#

我需要编写一个程序,我可以在其中替换给定 config.xml.

中多个项目位置的 web.config 文件的特定标签的值

config.xml

<?xml version="1.0" encoding="utf-8" ?>
<ReplaceFile>
<File>
<tag>connectionStrings</tag>
<FilePath>C:\Users\abc\Documents\Visual Studio2013\Projects\WebApplication1\WebApplication1\web.config</FilePath>
<Repstring>"some string "</Repstring>
</File>
<File>
<tag>connectionStrings</tag>
<FilePath>C:\Users\abc\Documents\Visual Studio 2013\Projects\WebApplication2\WebApplication2\web.config</FilePath>
<Repstring>" some string "</Repstring>
</File>     
</ReplaceFile>

Web.config

<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <connectionStrings>
    <add name="FEConnectionString" connectionString="Provider=xyz;Data Source=xyz;User id=xyz;Password=xyz" providerName="xyz"/>
  </connectionStrings>
 </configuration>

所以我的任务是检查 config.xml 的所有 web.config 文件并搜索 connectionStrings 节点并在节点下的 connectionstring 替换 connectionstring。 我是 C# 新手。

我的代码

            static void UpdateXML()
        {
            XElement xdoc = XElement.Load("C:\Users\abc\Desktop\Config.xml");
            IEnumerable<XElement> config = xdoc.Elements();
            foreach (var file in config)
            {
                string tagname = file.Element("tag").Value;
                string FilePath = file.Element("FilePath").Value;
                string Repstring = file.Element("Repstring").Value;
                //Console.WriteLine(tagname);
                //Console.WriteLine(FilePath);
                //Console.WriteLine(Repstring);
                XElement xwebconfig = XElement.Load(FilePath);
                IEnumerable<XElement> webconfig1 = xwebconfig.Elements();
                foreach (var node in webconfig1)
                { 
                  Console.WriteLine(node);
                }
            }
        }

据我了解,ConfigurationManager 特定于该特定项目,因此我无法使用该命名空间。

感谢任何形式的帮助。

这里有两种方法可以更新 web.config 文件中的 connectionStrings

第一种方法

XDocument xwebconfig = XDocument.Load(FilePath);
XElement xElement = xwebconfig.Elements("configuration").Elements("connectionStrings").Elements("add").FirstOrDefault();
xElement.SetAttributeValue("name", "myconnection");
xwebconfig.Save(FilePath);

第二种方法

XDocument xwebconfig = XDocument.Load(@"C:\Users\Administrator\Desktop\Web.config");
IEnumerable<XElement> webconfig1 = xwebconfig.Elements();
foreach (var node in webconfig1)
{
    foreach (var subnode1 in node.Elements())
    {
       if(subnode1.Name == "connectionStrings")
       {
          foreach (var subnode2 in subnode1.Elements())
          {
             subnode2.SetAttributeValue("name", "myconnection");
          }
       }
   }
}
xwebconfig.Save(@"C:\Users\Administrator\Desktop\Web.config");