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?
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
ouais, c'était tout. De plus, je ne peux pas faire 'node.Value', je dois faire' node.FirstChild.Value'. Merci! – Devin