删除程序集:来自 AssemblyInfo.cs 的部分
Removing assembly: part from AssemblyInfo.cs
我正在使用 Rosyln 来操纵 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: ]
位并删除 that 以及 DeploymentLocation
属性?显然我不想删除所有 [assembly: ]
行,因为有很多行是需要保留的样板文件。
assembly
位似乎不被认为是我在 attr
中的标签的 Parent
(Parent
)是整个文档。那么我需要做什么才能回到 assembly
部分?那位甚至叫什么?
好的,我明白了。您需要 select AttributeListSyntax
,这基本上是一组方括号 []
,其中包含与我想要的匹配的 AttributeSyntax
节点。然后我可以删除整个东西,其中包括 AttributeTargetSyntax
(assembly:
部分),它是 AttributeSyntax
的兄弟
var attr = syntaxRoot.DescendantNodes().OfType<AttributeListSyntax>()
.Where(a => a.DescendantNodes().OfType<AttributeSyntax>()
.Any(s => s.Name.ToString() == "DeploymentLocation"));
我正在使用 Rosyln 来操纵 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: ]
位并删除 that 以及 DeploymentLocation
属性?显然我不想删除所有 [assembly: ]
行,因为有很多行是需要保留的样板文件。
assembly
位似乎不被认为是我在 attr
中的标签的 Parent
(Parent
)是整个文档。那么我需要做什么才能回到 assembly
部分?那位甚至叫什么?
好的,我明白了。您需要 select AttributeListSyntax
,这基本上是一组方括号 []
,其中包含与我想要的匹配的 AttributeSyntax
节点。然后我可以删除整个东西,其中包括 AttributeTargetSyntax
(assembly:
部分),它是 AttributeSyntax
var attr = syntaxRoot.DescendantNodes().OfType<AttributeListSyntax>()
.Where(a => a.DescendantNodes().OfType<AttributeSyntax>()
.Any(s => s.Name.ToString() == "DeploymentLocation"));