2013-07-16 4 views
1

한 web.config에서 다른 web.config로 다시 작성 규칙을 자동화하는 C# 스크립트를 만들 계획입니다. 우리는 각 고객마다 여러 web.config 파일을 가지고 있으며 때로는 변경해야하는 몇 가지 일반적인 다시 쓰기 규칙이 있습니다. 일반 다시 쓰기 규칙에는 일반 규칙 (고객이 아닌)으로 식별하는 고유 한 접두사가 있습니다.다시 작성 규칙을 web.config로 복사

하나의 web.config에서 다른 web.config로 C#을 사용하여 규칙을 복사 할 수 있는지 궁금합니다. 하나의 설정에서 다른 URL에 쓰기 위해 URL/일치 URL을 다시 읽는 것만으로는 항상 작업을 수행하지는 못할 수도 있습니다. 때로는 조건을 추가해야 할 때도 있습니다.

어떤 방법이 있습니까? 우리는 가능한 한 많이 자동화하려고합니다. 나는 C#에서 최고는 아니지만 하나의 파일에서 전체 규칙을 읽고 다른 파일에 붙여 넣는 것이 가능할 수도 있다고 생각하겠습니까? 또는 XMLReader를 통해 web.config 파일을 모두 구문 분석 한 다음 규칙을 복사하는 것이 더 좋을 수도 있습니다.

+0

'빌드 타임'변경 사항입니까? config [transformations] (http://msdn.microsoft.com/en-us/library/dd465326.aspx)를 사용하지 않는 이유는 무엇입니까? –

+0

아니요 - 배포 이후이므로 웹 사이트에서 실행되는 웹 응용 프로그램은 ColdFusion 10으로 코딩되어 있으므로 Visual Studio를 사용하여이 응용 프로그램을 만들지는 않습니다. –

+0

XML/Config 포함을 고려하십시오. – Aron

답변

0

저는 ServerManager 클래스 대신 XML을 사용하여 직접 알아낼 수있었습니다. 이것은 내가 원하는 것을 거의한다.

XmlDocument doc1 = new XmlDocument(); 
doc1.Load(@"web.new.config"); 

XmlDocument doc2 = new XmlDocument(); 
doc2.Load(@"web.config"); 

XmlNode rules = doc2.SelectSingleNode("/configuration/system.webServer/rewrite/rules"); 
XmlNodeList baserules = doc2.SelectNodes("/configuration/system.webServer/rewrite/rules/rule[contains(@name, 'GenericPrefix')]"); 

XmlNodeList ruleList = doc1.SelectNodes("/configuration/system.webServer/rewrite/rules/rule[contains(@name, 'GenericPrefix')]"); 

foreach(XmlNode baseruleOld in baserules) 
{ 
    baseruleOld.ParentNode.RemoveChild(baseruleOld); 
} 

foreach(XmlNode rule in ruleList) 
{ 
    XmlNode tocopynode = doc2.ImportNode(rule, true); 
    rules.AppendChild(tocopynode); 
} 

doc2.Save("web.config"); 
관련 문제