保存项目时获取项目元素代码

时间:2017-08-13 23:55:04

标签: c# events vsx

为了便于理解,这个问题将被分解为几个部分,因为我没有找到任何文章/教程。

方案

让:

  • myProject是Visual Studio 14中的C#Silverlight项目;
  • ModClass是我在myProject修改过的课程(尚未保存);
  • ExistingClassmyProject中已存在的静态类。

ExistingClass中,绝对没有,课程就在那里。 此外,ModClass分别有2个字段名称fieldAfieldB

问题

(1)有没有办法拦截Save事件到(2)获取ModClass的代码,然后(3) 解析它,所以我得到了字段,例如[我可以做那部分],最后(4)直接在ExistingClass中自动编写相关内容(或完全重新生成{{1代码。

问题很广泛,但就像我说的那样,只是为了展示背景。我真正想知道的是如何点 1 以及点 2 ,因为其余部分对于我这边的另一个问题/研究是重要的。

示例

我没有任何可验证的例子,因为如果所有这些都可能,我真的不知道从哪里开始。我仍然可以通过下面显示的内容来演示这个概念。

保存前事件:

ExistingClass

保存事件后:

namespace MyNamespace
{
    class ExistingClass
    {
    }
}

namespace MyNamespace
{
    class ModClass
    {
        public int myInt; // This hasn't been saved yet
    }
}

在这个例子中,因为namespace MyNamespace { class ExistingClass { enum MyEnum { myInt } } } namespace MyNamespace { class ModClass { public int myInt; } } 被修改了,所以它的所有代码都会以某种方式被抛出到一个解析器,它将得到字段(在这种情况下只有ModClass),然后myInt有一个包含所有已解析字段名称的枚举。

1 个答案:

答案 0 :(得分:1)

  

(1)有没有办法拦截Save事件到

您可以通过DocumentEventsClass.DocumentSaved Event

来实现
  

(2)获取ModClass的代码然后

您可以通过roslyn获取代码,有关详细信息,请参阅:

https://www.filipekberg.se/2011/10/20/using-roslyn-to-parse-c-code-files/

  

(3)解析它,所以我得到了字段,例如[我可以做那部分],最后    (4)直接在ExistingClass中自动编写相关的东西(或者完全重新生成ExistingClass的代码。

您还可以通过roslyn生成新代码,以下示例供您参考。

Using the open source released "roslyn" to read code file and generate new code files