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 中。
问题: 创建类似于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 中。