Расширяемость Visual Studio - Создание нового типа проекта

Я пытаюсь выполнить следующие действия: https://msdn.microsoft.com/en-us/library/cc512961.aspx чтобы создать новую систему проектов для настраиваемого DSL, для которого я хочу добавить поддержку в Visual Studio (в конце концов это будет включать в себя много функциональности, но сейчас я просто пытаюсь заставить работать что-то очень простое).

Я могу заставить их пример работать, но у меня возникли проблемы при попытке сделать то, что должно быть очень простой модификацией: поместить файл AssemblyInfo.cs в папку "Properties".

Мой шаблон выглядит так:

  • шаблон
    • AssemblyInfo.cs
    • Program.cs
    • Template.myproj
    • Template.vstemplate

И я хочу, чтобы мой созданный проект имел структуру:

  • шаблон
    • свойства
      • AssemblyInfo.cs
    • Program.cs
    • Template.myproj
    • Template.vstemplate

Поэтому я изменил свой файл.myproj, чтобы он читал:

<ItemGroup>
  <Compile Include="Properties\AssemblyInfo.cs" />
  <Compile Include="Program.cs" />
</ItemGroup>

и мой файл.vstemplate для чтения:

<TemplateContent>
  <Project File="Template.myproj" ReplaceParameters="true">
    <ProjectItem ReplaceParameters="true" TargetFileName="Properties\AssemblyInfo.cs">AssemblyInfo.cs</ProjectItem>
    <ProjectItem ReplaceParameters="true" OpenInEditor="true">Program.cs</ProjectItem>
  </Project>
</TemplateContent>

Это очень просто: я только что добавил "Свойства" в двух местах.

Однако при создании нового проекта мой экспериментальный экземпляр VS жалуется:

Collection was modified; enumeration operation may not execute.

Излишне говорить, что ни один код, который я написал, не содержит каких-либо перечислений... Я пытался выполнить пошаговое выполнение кода "MPFProj", но, похоже, ошибка возникает в случайном месте, которое не имеет ничего общего с пошаговым кодом. хотя (предположительно ошибка происходит в другом потоке?).

Как ни странно, кажется, что я могу без папок создать новый проект, а затем вручную создать (как в среде IDE) папку, а затем я могу добавить новый файл (используя шаблон "новый элемент") в эта папка просто отлично.

Это ошибка в MPFProj? Нужно ли переопределять один из 100000 недокументированных виртуальных методов в типах MPFProj, чтобы справиться с этим? Файл vstemplate неверный?

Также: есть ли хорошие источники для расширяемости Visual Studio для VS 2015? Или лучшие практики, как реализовать эти вещи? Или содержательная документация? Я рассмотрел несколько примеров (например, плагин IronPython VS), и они не особенно полезны, особенно для решения таких тонких вопросов, как этот (и без хорошей документации невозможно понять, почему существуют различия между различными примерами...).

0 ответов

Другие вопросы по тегам