2017-04-04 1 views
2

공구 제작시 Rosyn을 사용하여 AssemblyInfo.cs을 조작하고 있는데이 줄을 파일에서 제거하는 올바른 방법을 찾지 못했습니다.조립품 제거 : AssemblyInfo.cs의 부품

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

나는이있을 수 있습니다 :

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

는 내가하고 싶은, 그 라인을 찾아이를 제거하고 다시 작성합니다. 다시 작성하는 것은 좋지만 제거하는 것이 문제입니다.

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

을 그리고 I는 다음과 같이 수행하십시오 :

이 같은 그 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 노드가 포함되어 있습니다. 그럼 난 AttributeSyntax

var attr = syntaxRoot.DescendantNodes().OfType<AttributeListSyntax>() 
    .Where(a => a.DescendantNodes().OfType<AttributeSyntax>() 
    .Any(s => s.Name.ToString() == "DeploymentLocation")); 
에 형제 인 AttributeTargetSyntax합니다 ( assembly: 부분)을 포함 할 것입니다 그 전체를 제거 할 수 있습니다