我寫了一個代碼生成器,它生成C#文件。如果生成的文件是新的,我需要將它的引用添加到我們的.csproj文件。我有以下方法將節點添加到.csproj文件。LINQ to XML - 將節點添加到.csproj文件
private static void AddToProjectFile(string projectFileName, string projectFileEntry)
{
StreamReader streamReader = new StreamReader(projectFileName);
XmlTextReader xmlReader = new XmlTextReader(streamReader);
XElement element;
XNamespace nameSpace;
// Load the xml document
XDocument xmlDoc = XDocument.Load(xmlReader);
// Get the xml namespace
nameSpace = xmlDoc.Root.Name.Namespace;
// Close the reader so we can save the file back.
streamReader.Close();
// Create the new element we want to add.
element = new XElement(nameSpace + "Compile", new XAttribute("Include", projectFileEntry));
// Add the new element.
xmlDoc.Root.Elements(nameSpace + "ItemGroup").ElementAt(1).Add(element);
xmlDoc.Save(projectFileName);
}
此方法工作正常。但是,它不會在新行上添加節點。它會將它追加到.csproj文件中的上一行。這在做TFS合併時會造成一些混亂。我如何在新行添加新節點?
似乎很奇怪...正常的行爲是在序列化時縮進和格式化XML。我不認爲在xmlDoc.Save調用中將SaveOptions設置爲「None」會有所作爲? – womp 2010-06-18 21:36:39
@Womp - 不,它沒有什麼區別,但是謝謝。 – 2010-06-18 21:45:45
嘗試使用(XmlWriter writer = XmlWriter.Create(projectFileName))''然後使用'xmlDoc.Save(writer)'創建'XmlWriter'。 – 2010-06-18 22:06:28