删除程序集:部件来自AssemblyInfo.cs

时间:2017-04-04 18:40:06

标签: c# roslyn

我使用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: ]位并删除 以及DeploymentLocation属性?显然,我不想删除所有[assembly: ]行,因为有很多行是需要留下的样板内容。

assembly位似乎不被视为Parent Parent attrassembly的整个文档。那么我需要做些什么来回到char *CheckLoginPass(char *login, char *pass) { //use curl_easy_setopt for check login/pass return stdout; } char *AuthOnSite() //make auth on site { //use curl_easy_setopt for auth by login/pass return htmlpage; } char *TestMyAuth() { //use curl_easy_setopt for test auth return htmlpage; } void Test() { char *stdout = CheckLoginPass("login", "pass"); // is good char *htmlpage = AuthOnSite(); // is good htmlpage = TestMyAuth(); // session is lose and I am not logined on site } 件?这甚至叫什么?

1 个答案:

答案 0 :(得分:3)

好的,我想出来了。您需要选择AttributeListSyntax,它基本上是包含符合我想要的[]节点的方括号AttributeSyntax的集合。然后,我可以删除包含AttributeTargetSyntaxassembly:部分)的整个内容,AttributeSyntax

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