대시

2012-05-28 3 views
1

나는 같은 것을 할 수 있어야합니다 :대시

//buildArgs 
XmlNode buildArgs = doc.CreateElement("buildArgs"); 
XmlAttribute buildArgsAtt = doc.CreateAttribute("-D:project.rc_file"); 

을하지만 난 fallowing 오류 얻을 :

An unhandled exception of type 'System.ArgumentException' occurred in System.Xml.dll 

Additional information: Invalid name character in '-D'. The '-' character, hexadecimal value 0x2D, cannot be included in a name. 

을하지만 형식을 선택하지 않은 . cruisecontrol.net 구성 파일 (ccnet.config)에 새 요소를 추가하는 프로세스를 자동화하려고합니다. 그래서 그 대쉬를 거기에 놓아야합니다.

//create new instance of XmlDocument 
     XmlDocument doc = new XmlDocument(); 
     doc.PreserveWhitespace = false; 

     //load from file 
     doc.Load(filename); 

     //create node and add value 
     XmlNode projet = doc.CreateNode(XmlNodeType.Element, "projet", null); 
     XmlAttribute projetAtt = doc.CreateAttribute("name"); 
     projetAtt.Value = projectName + " " + oracleVersion; 
     projet.Attributes.SetNamedItem(projetAtt); 

     ... 

     //buildArgs 
     XmlNode buildArgs = doc.CreateElement("buildArgs"); 
     XmlAttribute buildArgsAtt = doc.CreateAttribute("-D:project.rc_file"); 
     buildArgsAtt.Value = projectName + ".rc"; 
     XmlAttribute buildArgsAtt2 = doc.CreateAttribute("-D:project.svn_trunk_ver"); 
     buildArgsAtt2.Value = trunkNb; 
     XmlAttribute buildArgsAtt3 = doc.CreateAttribute("-D:project.svn_trunk"); 
     buildArgsAtt3.Value = trunkPath; 
     buildArgs.Attributes.SetNamedItem(buildArgsAtt); 
     buildArgs.Attributes.SetNamedItem(buildArgsAtt2); 
     buildArgs.Attributes.SetNamedItem(buildArgsAtt3); 

     //add to parent node 
     projet.AppendChild(nodeWD); 
     projet.AppendChild(category); 
     projet.AppendChild(trigger); 
     trigger.AppendChild(intTrigger); 
     projet.AppendChild(sourcecontrol); 
     sourcecontrol.AppendChild(trunkUrl); 
     sourcecontrol.AppendChild(workingDirectory); 
     projet.AppendChild(tasks); 
     tasks.AppendChild(nant); 
     nant.AppendChild(targetList); 
     targetList.AppendChild(target); 
     nant.AppendChild(buildArgs); 

     //add to elements collection 
     doc.DocumentElement.AppendChild(projet); 

     XmlWriterSettings settings = new XmlWriterSettings(); 
     settings.Indent = true; 
     settings.NewLineOnAttributes = true; 
     settings.Encoding = Encoding.UTF8; 

     using (XmlWriter writer = XmlTextWriter.Create(filename, settings)) 
     { 
      doc.Save(writer); 
     } 

내가이 확인 : Using - in XML element name 등을하지만, 내가 사용할 수있는 해답을 찾을 수 없습니다

내 코드입니다. http://ccnet.sourceforge.net/CCNET/Configuring%20the%20Server.html

감사 :

-EDIT-

이것은을 ccnet.config의 exemple입니다!

답변

1

예제 구성 중 어느 라인을 설정합니까? 이거 아세요?

<buildArgs>-D:cvs.executable=c:\putty\cvswithplinkrsh.bat</buildArgs> 

이것은 속성이 아닙니다. 요소 내용입니다.

+0

요소로 사용해 보겠습니다. – LolCat

+0

그래도 효과가 있습니다. 감사 !! – LolCat

3

간단히 말해서, 유효한 속성 이름이 아닙니다. XML을 허용하는 이름을 사용하면 특성 값으로 저장할 수 있습니다.

CruiseControl.Net은 이러한 파일에 내장 된 파서를 사용할 수 없어이 작업을 수행하지 않는다고 확신합니다.

EDIT : 요소 값 (내용이라고도 함)입니다. 다음과 같이 설정하십시오 :

var buildArgs = doc.CreateElement("buildArgs"); 
buildArgs.Value = "-D:project.rc_file"; 
+0

음 ... http://ccnet.sourceforge.net/CCNET/Configuring%20the%20Server.html 을 보면 대시 D (-D)가 표시됩니다 ... – LolCat

+0

이 답변도 그것이 속성이 아니기 때문에 정확하다, 그러나 성분. 감사. – LolCat

+1

@LolCat 요점은 "요소가 아닌 요소였습니다"(대시를 시작하는 이름이 여전히 요소와 함께 유효하지 않음) - 요점은 "이름이 아니라 값입니다" –