为了便于理解,这个问题将被分解为几个部分,因为我没有找到任何文章/教程。
方案
让:
myProject
是Visual Studio 14中的C#Silverlight项目; ModClass
是我在myProject
修改过的课程(尚未保存); ExistingClass
是myProject
中已存在的静态类。在ExistingClass
中,绝对没有,课程就在那里。
此外,ModClass
分别有2个字段名称fieldA
和fieldB
。
问题
(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
有一个包含所有已解析字段名称的枚举。
答案 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