VS2010 MPF: заполнение списка «Добавить-> Новый элемент ...» для пользовательского проекта - PullRequest
6 голосов
/ 27 июля 2011

Я создал собственный языковой пакет, который расширяет ProjectPackage.Я могу правильно создать новый проект.Я хотел бы иметь возможность добавлять новые исходные файлы в проект с помощью пункта меню Add-> New Item ... (Ctrl + Shift + A).Однако, когда я нажимаю эту кнопку, список доступных шаблонов становится пустым.Я хотел бы добавить свой собственный шаблон в меню доступных шаблонов для этого типа проекта.Есть ли документация для этого?Единственное упоминание, которое я видел, было взломом реестра, но должен быть способ сделать это программно, я бы подумал.

Есть ли какой-то конкретный метод, который я могу переопределить, чтобы заполнить список?Мне действительно нужно сделать шаблон или я могу просто показать «имя шаблона», «значок» и указать правильное расширение файла (файлы должны быть пустыми при создании, поэтому я думаю, что шаблон в значительной степени тратится на то, что я хочуделать).

Вот путь, по которому я до сих пор путешествовал.Я решил, что могу установить тип своего проекта и GUID в моем пользовательском файле .vproj (.vproj - это расширение файла, под которым зарегистрирован мой пользовательский проект).Я думал, что смогу быстро создать шаблон элемента с тем же ProjectType, что и мой файл .vproj.

<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Item">
  <TemplateData>
    <Icon>VerilogSource.ico</Icon>
    <DefaultName>module.v</DefaultName>
    <Name>Basic Verilog Module</Name>
    <Description>
      A basic Verilog module for quickly adding new files to the project.
    </Description>
    <ProjectType>VerilogProject</ProjectType>
  </TemplateData>
  <TemplateContent>
    <ProjectItem TargetFileName="$fileinputname$.v"
        ReplaceParameters="true">module.v</ProjectItem>
  </TemplateContent>
</VSTemplate>

Увы, этот шаблон вообще не отображается, хотя я включил его в VSIX и скопировалэто в выходной каталог.Если я помещу этот шаблон в ту же папку, что и мой .vproj, он появится в качестве шаблона для создания нового проекта (неправильно!) И все равно не появится в моем списке новых элементов.Все это может происходить из-за того, что я не использую VSTemplate для создания своего проекта.Вместо этого я использую [ProvideProjectFactoryAttribute], чтобы сообщить VS2010, где находится мой файл vproj, и он будет использовать файл vproj (который, я полагаю, можно назвать шаблоном, но это не VSTemplate, это проект) для создания новогоПроект выключен.

Это то место, где я сейчас нахожусь, и я продолжаю пробовать новые вещи.Я надеюсь, что у кого-то может быть ответ, который я ищу.Спасибо,

Giawa

Ответы [ 2 ]

4 голосов
/ 27 июля 2011

После долгого чтения и работы вот мой ответ:

Используйте файлы vstemplate для вашего проекта и элементов и скомпилируйте их как vstemplate (не копируйте в вывод, не включайте в VSIX, в отличие отчто Microsoft Walkthrough предлагает).Компилятор упакует каждый элемент и шаблон проекта в свой собственный zip-файл.Теперь вам нужно сообщить vsixmanifest, где находятся эти файлы.Каталогами по умолчанию для проектов и элементов являются ProjectTemplates и ItemTemplates, соответственно.Добавьте их в ваш vsixmanifest следующим образом:

  <Content>
    <VsPackage>|%CurrentProject%;PkgdefProjectOutputGroup|</VsPackage>
    <ProjectTemplate>ProjectTemplates</ProjectTemplate>
    <ItemTemplate>ItemTemplates</ItemTemplate>
  </Content>

Теперь вы также должны добавить некоторые свойства в ваш файл .csproj, в который встроен ваш пакет vsix. Эти свойства, вероятно, могут быть добавлены с помощью некоторого сложного метода, нопроще всего просто поместить их прямо в файл .csproj.

  <PropertyGroup>
    <GetVsixSourceItemsDependsOn>$(GetVsixSourceItemsDependsOn);GetVsixTemplateItems</GetVsixSourceItemsDependsOn>
  </PropertyGroup>
  <Target Name="GetVsixTemplateItems" DependsOnTargets="ZipProjects;ZipItems">
    <ItemGroup>
      <VSIXSourceItem Include="@(IntermediateZipItem)">
        <VSIXSubPath>ItemTemplates\%(IntermediateZipItem.Language)\%(IntermediateZipItem.OutputSubPath)\%(IntermediateZipItem.Culture)</VSIXSubPath>
      </VSIXSourceItem>
      <VSIXSourceItem Include="@(IntermediateZipProject)">
        <VSIXSubPath>ProjectTemplates\%(IntermediateZipProject.Language)\%(IntermediateZipProject.OutputSubPath)\%(IntermediateZipProject.Culture)</VSIXSubPath>
      </VSIXSourceItem>
    </ItemGroup>
  </Target>

Теперь это будет включать ваши zip-файлы в ваш проект, и, если повезет, у вас теперь будут проекты и элементы, которые связаны между собой.правильно вместе.

К счастью, существует довольно много документации для шаблонов элементов / проектов.Мне потребовалось некоторое время, чтобы понять, что это правильный путь.Удачи,

Гиава

0 голосов
/ 26 июня 2015

Все эти шаги могут быть выполнены автоматически в Visual Studio :

Сначала создайте шаблон элемента в отдельном проекте (вы можете сделать это с помощью File > Export template). Вы можете настроить этот шаблон, отредактировав файл .vstemplate.

Получив файл .zip, перетащите его в основное решение VSPackage и выполните следующие действия:

  1. Нажмите на .vsixmanifest файл.
  2. Нажмите Assets > New.
  3. Установите Type на Microsoft.VisualStudio.ItemTemplate ( Шаблон элемента ).
  4. Установите Source на File on filesystem.
  5. Установите Path для вашего шаблона элемента .zip файл.
  6. Перестройте решение.

Примечание: Я использовал Visual Studio 2013 .

...