2017-04-04 78 views
2

我正在使用Rosyln將AssemblyInfo.cs作爲我正在製作的工具的一部分進行操作,並且我無法找出從文件中刪除此行的正確方法:從AssemblyInfo.cs中刪除程序集:部分

[assembly: DeploymentLocation("\\\\someserver\\folder")] 

我也能有這樣的:

[assembly: DeploymentLocation("\\\\someserver\\folder"), DeploymentLocation("\\\\someotherserver\\folder")] 

我想要做的就是找到那些線,將其刪除,並重新創建它們。重新創建它們很好,但刪除它們是問題所在。

我能找到那些DeploymentLocation件這樣的:

var attr = syntaxRoot.DescendantNodes().OfType<AttributeSyntax>().Where(a => a.Name.ToString() == "DeploymentLocation"); 

然後我做這樣的事情:

if (attr?.Any() == true) 
{ 
    // remove existing attributes... 
    syntaxRoot = syntaxRoot.RemoveNodes(attr, SyntaxRemoveOptions.KeepNoTrivia); 
} 

但是,這結束了在我的文件中留下這樣的:

[assembly: ] 

這顯然不是我想要的。我如何找到[assembly: ]位並刪除以及DeploymentLocation屬性?顯然,我不想刪除所有[assembly: ]行,因爲有一堆線需要保留。

assembly位似乎並不被認爲是我的標籤在attr一個Parent(在Parent)是整個文檔。那麼我需要怎麼做才能回到assembly?那個叫什麼名字?

回答

3

好的,我明白了這一點。您需要選擇AttributeListSyntax,它基本上是一組方括號[],其中包含一個AttributeSyntax節點,它與我想要的匹配。然後,我可以刪除整個事情,其中​​將包括該AttributeTargetSyntax(在assembly:部分),這是一個兄弟到AttributeSyntax

var attr = syntaxRoot.DescendantNodes().OfType<AttributeListSyntax>() 
    .Where(a => a.DescendantNodes().OfType<AttributeSyntax>() 
    .Any(s => s.Name.ToString() == "DeploymentLocation"));