ClassDeclarationSyntax.AddMembers yöntemini kullanarak bir sınıfa özel alanlar ekliyorum. Alanlar sınıfta görünür, ancak alanları belirli konumlara nasıl ekleyeceğinizi bilmek isterim. Şu andan itibaren, kodun oluşturulduğu sırada doğruyu değerlendiren #if yönergesi içinde sınıfın sonuna eklenirler.Sınıf üyelerini Roslyn kullanarak belirli konumlara ekleme?
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());
bu neden olacaktır:
kod çalıştırma
public class A
{
#if !SILVERLIGHT
public int someField;
private string myAddedField;
#endif
}
Ve bu sonucu elde etmek istiyorum:
public class A
{
private string myAddedField;
#if !SILVERLIGHT
public int someField;
#endif
}
Tanımladığınız davranışı göremiyorum. Bu sorunun ortaya çıktığı bir örnek gösterebilir misiniz? – svick
Üzgünüz, sorumu düzeltin ve örnek kod ekledim. – illodin