2012-05-07 8 views
0

J'écris un utilitaire qui va changer le nom d'assembly d'un fichier csproj. Je sais que csproj est essentiellement XML, donc XPath devrait fonctionner. En fait, je peux le faire fonctionner pour certaines informations. Voici le code que j'ai:Modifier AssemblyName dans CSProj dans le code

var xmlDoc = new XmlDocument(); 
xmlDoc.Load(file); 
XmlNamespaceManager mgr = new XmlNamespaceManager(xmlDoc.NameTable); 
mgr.AddNamespace("x", xmlDoc.DocumentElement.NamespaceURI); 

XmlNode node = xmlDoc.SelectSingleNode("//x:PropertyGroup//AssemblyName", mgr); 
node.Value = newValue; 
xmlDoc.Save(file); 

Cependant, node est nulle. J'ai également essayé d'utiliser "//x:PropertyGroup[1]//AssemblyName" en vain. Si j'essaie juste de trouver "//x:PropertyGroup" cela fonctionnera bien, donc je suppose que mon problème est que tous les nœuds PropertyGroup n'ont pas de nœud AssemblyName.

J'utilise un NamespaceManager par la suggestion dans this thread et j'ai été en mesure de récupérer la valeur AssemblyName via XLinq comme suggéré here, mais j'ai besoin de mettre à jour la valeur, pas simplement la lire.

Qu'est-ce qui me manque?

+4

Juste deviner, mais AssemblyName ne serait pas non plus dans l'espace de noms indiqué par x dans ce XPath: // x: PropertyGroup // AssemblyName. C'est à dire. (sans connaître les données) Je parie qu'il devrait être // x: PropertyGroup // x: AssemblyName – dkackman

+0

ouais, c'était tout. De plus, je ne peux pas faire 'node.Value', je dois faire' node.FirstChild.Value'. Merci! – Devin

Répondre

0

semble que ce soit résolu par commentaire:

juste deviner, mais ne serait pas AssemblyName également dans l'espace désigné par x dans ce XPath: // x: // PropertyGroup AssemblyName. C'est à dire. (sans connaître les données) Je parie qu'il devrait être // x: PropertyGroup // x: AssemblyName - dkackman

Questions connexes