Sto aggiungendo campi privati in una classe utilizzando il metodo ClassDeclarationSyntax.AddMembers. I campi appaiono nella classe, ma mi piacerebbe sapere come aggiungere i campi in posizioni specifiche. A partire da ora, vengono aggiunti alla fine della classe all'interno della direttiva #if che sembra valutare true al momento dell'esecuzione della generazione del codice.Aggiunta di membri della classe in posizioni specifiche utilizzando Roslyn?
L'esecuzione del codice:
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());
si tradurrà in questo:
public class A
{
#if !SILVERLIGHT
public int someField;
private string myAddedField;
#endif
}
E vorrei per ottenere questo risultato:
public class A
{
private string myAddedField;
#if !SILVERLIGHT
public int someField;
#endif
}
Non vedo il comportamento che descrivi. Potresti mostrarci un esempio di questo problema? – svick
Spiacente, corretto la mia domanda e aggiunto codice di esempio. – illodin