VSIX DTE - 创建标记为部分的类

时间:2017-02-03 09:49:23

标签: c# .net visual-studio-extensions vsix envdte

问题: 创建一个类似于EF模型生成器的工具,您可以在其中输入表/列/关系,它将生成模型类。它是Visual Studio的插件,在VSIX中使用 DTE (开发工具环境)运行。

我成功创建了具有属性的抽象类。现在我想在同一个文件中创建其他类,它将继承自抽象类,并且还将标记为partial。我不知道如何将该类标记为部分,IntelliSence没有提供任何合适的方法/属性,并且在Google / SO / MSDN上搜索没有给我任何相关结果。

获得这个想法的一些代码:

ProjectItem File = CreateOrFindClassFile(/*params*/); //Creating project file            
if (File != null)
{
    var NS = File.FileCodeModel.AddNamespace("ABC"); //Added namespace ABC

    string ChildClassName = "Xyz";
    string BaseClassName = "XyzBase";


    //Generate base abstract class
    var BaseClass = NS.AddClass(BaseClassName);
    if (BaseClass != null)
    {
        BaseClass.Access = vsCMAccess.vsCMAccessPublic;
        BaseClass.IsAbstract = true;

        //some methods to add variables/methods/properties
    }


    //Generate partial child class
    var ChildClass = lNamespace.AddClass(ChildClassName);
    if (ChildClass != null)
    {
        ChildClass.Access = vsCMAccess.vsCMAccessPublic;
        ChildClass.AddBase(lBaseClassName);

        //TODO: add some code to mark as partial
    }
}

问题:是否有OOP方式(通过DTE类树)将类标记为partial

或者我被迫把这个类写成一个字符串:

NS.GetStartPoint(..)
     .CreateEditPoint()
     .Insert("public partial class Xyz : XyzBase\n{\n}\n");

注意:它可以工作,但我失去了对类的控制和OOP方法。

编辑1:刚刚在EnvDTE partial class keyword

上找到了一些参考资料

1 个答案:

答案 0 :(得分:1)

尝试将ChildClass转换为EnvDTE80.CodeClass2,然后使用以下属性:

((EnvDTE80.CodeClass2)ChildClass).ClassKind = EnvDTE80.vsCMClassKind.vsCMClassKindPartialClass;

请注意,此属性可能隐藏在对象浏览器或智能感知中。