VSIX DTE - 创建 class 标记为部分

VSIX DTE - Create class marked as partial

问题: 创建类似于EF模型生成器的工具,您可以在其中输入tables/columns/relations,它将生成模型classes。它是 Visual Studio、运行 在 VSIX 中的插件 DTE(开发工具环境)。

我已成功创建具有属性的摘要 class。现在我想在同一个文件中创建其他 class,它将继承抽象 class,并且也将被标记为 partial。我不知道如何将 class 标记为部分,IntelliSence 没有给出任何合适的 method/property 并且搜索 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
    }
}

问题:是否有一种面向对象的方式(通过 DTE class 树)将 class 标记为 partial

或者我是否被迫将 class 写成字符串行:

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

注意:它有效,但我正在失去对 classes 的控制和 OOP 方法。

Edit1: 刚刚在 EnvDTE partial class keyword

上找到了一些参考

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

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

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