Как программно внести изменения в файлы C# .cs на основе имени файла в Visual Studio? - PullRequest
1 голос
/ 15 января 2020

Как мне go внести программные изменения в классы, например добавить комментарии в Visual Studio (C#) на основе имени класса / файла?

, например

До:

using System;
using System.Collections.Generic;
using System.Text;

namespace ChangingCode.Lib
{
    public class ChangeThisClass
    {
        public void Method()
        {

        }
    }
}

После:

using System;
using System.Collections.Generic;
using System.Text;

//This Got Added Somehow
//Is it possible?

namespace ChangingCode.Lib
{
    public class ChangeThisClass
    {
        public void Method()
        {

        }
    }
}

Ответы [ 2 ]

1 голос
/ 16 января 2020

Чтобы достичь этого , я думаю, вы можете создать родительский шаблон, который содержит любое пользовательское содержимое, а затем использовать этот шаблон в проекте.

1) Сначала создайте новый класс C#, который будет родительским шаблоном для использования позже, и затем вы можете добавить вот этот комментарий в этот файл:

 // this is a file called $itemname$
 //is it possible?
 //...........

И $itemname$ - это зарезервированный параметр шаблона, и это означает, что название элемента, созданного с использованием нового шаблона. Например, когда вы используете этот новый шаблон и создаете новый элемент с именем StrFeed, приведенный выше код будет отображаться в этом новом файле, а $itemname$ будет StrFeed. Более зарезервированные параметры шаблона, вы можете обратиться к this .

2) Нажмите item template по Project -> Export Template и выберите свой пользовательский класс а затем переименуйте его как customitem и запомните, что это имя является именем пользовательского шаблона, и вы можете искать его в Add New Item по его имени.

3) при завершении sh создав этот шаблон элемента, закройте VS Instance, и затем вы сможете использовать этот шаблон элемента в других проектах.

4) Создайте новый проект, а затем добавьте новый элемент и найдите его имя с именем customitem и затем дайте ему новое имя, и тогда вы получите то, что вы хотите от него.

enter image description here

Для получения более подробной информации о том, как создать пользовательский шаблон элемента, вы можете проверить эту ссылку .

1 голос
/ 16 января 2020

К сожалению, CodeDom не поставляется с C# реализациями Parser (хотя для этого есть интерфейс ). Однако существует довольно много C# доступных анализаторов (см. этот SO-ответ для получения дополнительной информации).

Предположим, вы решили go с NRefactory , затем добавление комментариев становится вопросом изменения AST :

    var compiledUnit = ICSharpCode.NRefactory.CSharp.SyntaxTree.Parse(File.ReadAllText(@"D:\file.cs"));

    var namespaceNode = compiledUnit.Children.First(n => (n.GetType() == typeof(NamespaceDeclaration))) as NamespaceDeclaration; // find the start of namespace declaration
    var parent = namespaceNode.Parent; // get reference to file root since you're adding nodes above namespace
    parent.InsertChildAfter(namespaceNode.PrevSibling, new Comment("This Got Added Somehow"), Roles.Comment);
    parent.InsertChildAfter(namespaceNode.PrevSibling, new Comment("Is it possible?"), Roles.Comment);              
    // save it all back
    File.WriteAllText(@"D:\file.cs.modified.txt", compiledUnit.ToString());
...