У меня есть программное обеспечение, которое при установке запрашивает IP-адрес моего сервера и сохраняет этот адрес в нескольких файлах конфигурации в разных папках. Этот код, который у меня есть, обновляет адрес конечной точки файла конфигурации внутри одного файла конфигурации.
Как бы я изменил код, чтобы посмотреть, где было установлено программное обеспечение, и обновить все IP-адреса во ВСЕХ файлах конфигурации в разных папках, где было установлено программное обеспечение.
Все файлы конфигурации с IP-адресами выглядят примерно так же, как в моем примере.
ConfigFile
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.NetworkInformation;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Linq;
namespace ConfigTool
{
class Class1
{
// foreach (Environment.SpecialFolder folder_type in Enum.GetValues(typeof(Environment.SpecialFolder)))
// {
// DescribeFolder(folder_type);
// }
//txtFolders.Select(0, 0);
//const string FILENAME = Environment.GetFolderPath(Environment.SpecialFolder.);
const string FILENAME = @"C:\Program Files (x86)\******\***\***\*****\*****.****.****.exe.config";
public static IPAddress GetIPAddress(string hostName)
{
Ping ping = new Ping();
var replay = ping.Send(hostName);
if (replay.Status == IPStatus.Success)
{
return replay.Address;
}
return null;
}
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
List<XElement> endpoints = doc.Descendants("endpoint").ToList();
foreach (var endpoint in endpoints )
{
string address = (string)endpoint.Attribute("address");
string newIp = "10.249.30.4";
string pattern = "//[^:]+";
address = Regex.Replace(address, pattern, "//" + newIp);
endpoint.Attribute("address").SetValue(address);
}
doc.Save(
Пример XML
<endpoint name="***Local" address="net.tcp://10.249.30.4:7732/EventSubscriberServices/Secure" binding="netTcpBinding" contract="****.Services.ServiceContracts.ISubscriptionService" bindingConfiguration="TcpCustomSecurity" behaviorConfiguration="CustomValidator">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint name="***Local" address="net.tcp://10.243.32.4:7732/EventPublishServices/Secure" binding="netTcpBinding" contract="****.Services.ServiceContracts.IPublishService" bindingConfiguration="TcpCustomSecurity" behaviorConfiguration="CustomValidator">
<identity>
<dns value="*******" />
</identity>
</endpoint>
<endpoint name="****" address="net.tcp://10.243.32.4:7732/AuthenticationServices/Secure" binding="netTcpBinding" contract="****.Services.ServiceContracts.IAuthenticationService" bindingConfiguration="TcpCustomSecurity" behaviorConfiguration="CustomValidator">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
1 ответ
Использование Xml Linq:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
List<EndPoint> endPoints = doc.Descendants("endpoint").Select(x => new EndPoint()
{
name = (string)x.Attribute("name"),
address = (string)x.Attribute("address"),
binding = (string)x.Attribute("binding"),
contract = (string)x.Attribute("contract"),
bindingConfiguration = (string)x.Attribute("bindingConfiguration"),
behaviorConfiguration = (string)x.Attribute("behaviorConfiguration"),
dns = (string)x.Descendants("dns").FirstOrDefault().Attribute("value"),
}).ToList();
}
}
public class EndPoint
{
public string name { get; set; }
public string address { get; set; }
public string binding { get; set; }
public string contract { get; set; }
public string bindingConfiguration { get; set; }
public string behaviorConfiguration { get; set; }
public string dns { get; set; }
}
}
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.
Environment.SpecialFolder
, отредактируйте его, чтобы задать вопрос по этой теме. Вам нужно задать конкретный вопрос в самом посте, если вам нужна помощь здесь. Я дважды просил вас сделать это, и вы до сих пор не внесли редактирование в свой пост, чтобы уточнить о чем вы конкретно спрашиваете. (Кроме того, вы не можете просто продолжать вводить подстановочные знаки*
и надеяться, что это что-то сделает, потому что это не так. Подстановочный знак пути к файлу должен быть допустимым.)