2017-02-03 3 views
0

Задача: Создание инструмента, подобного генератору модели EF, где вы можете вводить таблицы/столбцы/отношения, и он будет генерировать классы моделей. Это плагин для Visual Studio, который работает в VSIX с DTE (среда средств разработки).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 
    } 
} 

Вопрос: Есть ли ООП путь (через DTE класса дерева), чтобы пометить класс как partial?

Или я вынужден написать класс в виде строки строки:

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

Примечание: Это работает, но я теряю контроль и объектно-ориентированного подхода к классам.

Edit1: Просто нашел ссылку на EnvDTE partial class keyword

ответ

1

Попробуйте литье вашего ChildClass к EnvDTE80.CodeClass2, а затем использовать это следующее свойство:

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

Обратите внимание, что это свойство может быть скрыто в обозревателе объектов или Intellisense.

+0

Хороший звонок, он работает, спасибо! знак равно – Tatranskymedved

Смежные вопросы