Estoy agregando campos privados en una clase utilizando el método ClassDeclarationSyntax.AddMembers. Los campos aparecen en la clase, pero me gustaría saber cómo agregar los campos en ubicaciones específicas. A partir de ahora, se agregan al final de la clase dentro de la directiva #if que pasa a ser verdadera en el momento de ejecutar la generación de código.¿Agregar miembros de la clase a ubicaciones específicas usando Roslyn?
Ejecutar el código:
var tree = SyntaxTree.ParseCompilationUnit(@"
namespace Test
{
public class A
{
#if !SILVERLIGHT
public int someField;
#endif
}
}");
var field =
Syntax.FieldDeclaration(
Syntax.VariableDeclaration(
Syntax.PredefinedType(
Syntax.Token(
SyntaxKind.StringKeyword))))
.WithModifiers(Syntax.Token(SyntaxKind.PrivateKeyword))
.AddDeclarationVariables(Syntax.VariableDeclarator("myAddedField"));
var theClass = tree.GetRoot().DescendantNodes()
.OfType<ClassDeclarationSyntax>().First();
theClass = theClass.AddMembers(field).NormalizeWhitespace();
System.Diagnostics.Debug.Write(theClass.GetFullText());
dará lugar a esto:
public class A
{
#if !SILVERLIGHT
public int someField;
private string myAddedField;
#endif
}
Y me gustaría conseguir este resultado:
public class A
{
private string myAddedField;
#if !SILVERLIGHT
public int someField;
#endif
}
No veo el comportamiento que describes. ¿Podría mostrarnos una muestra donde aparece este problema? – svick
Disculpe, corrigí mi pregunta y agregué un código de ejemplo. – illodin