2016-11-02 13 views
1

私は、rosylnを使用してアセンブリ属性をAssemblyInfo.csに挿入する方法を理解しようとしています。アセンブリの属性をAssemblyInfo.csに挿入する

私の属性は次のようになり:

[assembly: Foo(@"\\somepath\tosomething)"] 

そして、私はこのようにそれらを読むことができます:

var syntaxRoot = tree.GetRoot(); 

var attr = syntaxRoot.DescendantNodes().OfType<AttributeSyntax>(); 
var attrNames = attr.Select(a => a.Name); 
var deployments = attr.Where(a => a.Name.ToString() == "Foo") 
    .Select(d => d.DescendantTokens() 
    .FirstOrDefault(t => t.Kind() == SyntaxKind.StringLiteralToken).ValueText); 

そして、私は属性に渡された引数を取得することができます。

私はそうのような属性を挿入しようとすることができます:だからそれは私の属性を追加しましたが、それはdoesnのだ

... 
[assembly: AssemblyFileVersion("1.0.0.0")] 
[DeploymentLocation] 

:これは、このような何かを探して終わるノードを挿入します

var list = new List<SyntaxNode>() 
{ 
    SyntaxFactory.AttributeList(SyntaxFactory.SeparatedList<AttributeSyntax>(new List<AttributeSyntax>() 
    { 
     SyntaxFactory.Attribute(SyntaxFactory.ParseName("DeploymentLocation")) 
    })) 
}; 
var n = tree.GetRoot().InsertNodesAfter(tree.GetRoot().ChildNodes().Last(), list); 

接頭辞がassembly:であり、そこに文字列リテラル引数を取得する方法がわかりません。

ファイルを読み込んで単純なテキストライターを使用して文字列を挿入することはできますが、Roslynの動作方法を理解するためにはわかります。

答えて

2

Roslyn Quoter示す

.WithTarget(
     AttributeTargetSpecifier(
      Token(SyntaxKind.AssemblyKeyword))))) 
+0

ハにコードを貼り付けます。カッコいい。私はそのツールを知らなかった。 –

関連する問題