Расширение Visual Studio (2010+) Обработчики типов элементов

При просмотре свойств файла в Visual Studio (2010 и выше) можно установить тип элемента в разделе «Общие». Например, для C ++ типом элемента является «C / C ++ compiler».

Доступен тип «Custom Build Tool», но он должен быть полностью настроен для каждого файла, попадающего в эту категорию.

Мои вопросы:

  1. Есть ли способ настроить «Custom Build Tool» и сделать его доступным в списке Тип элемента;
  2. Можно ли затем связать расширение файла с этим новым конструктором типов элементов?

7

Решение

Я нашел ответ, используя следующие ссылки:

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

Чтобы добавить пользовательский инструмент сборки в MSVC

  1. В файле проекта (vcxproj), включите новое определение сборки (возможно, есть способ включить его в систему, но я еще не изучал его):

    <ImportGroup Label="ExtensionTargets">
    <Import Project="mybuild.targets" />
    </ImportGroup>
    

Это может пойти прямо перед закрытием </Project>,

  1. Создайте текстовый файл с именем mybuild.targets в той же папке, что и vcxproj файл.

  2. Вставьте следующее в mybuild.targets:

    <?xml version="1.0" encoding="utf-8"?>
    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
    <PropertyPageSchema
    Include="$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml" />
    </ItemGroup>
    </Project>
    
  3. Этот целевой файл ссылается на XML-файл с более подробной информацией ($(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml который в этом примере ссылается на mybuild.xml). Создайте mybuild.xml,

  4. Вставьте следующее в mybuild.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <ProjectSchemaDefinitions xmlns="http://schemas.microsoft.com/build/2009/properties"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:sys="clr-namespace:System;assembly=mscorlib">
    <ItemType Name="MYBUILD" DisplayName="My Custom Build" />
    </ProjectSchemaDefinitions>
    

Что мы только что сделали: файл проекта теперь содержит новое определение цели (mybuild.targets). Этот файл обычно содержит больше информации о том, как выполнить фактическую сборку, но здесь он содержит только включение в mybuild.xml файл. это mybuild.xml файл содержит новое определение типа элемента с внутренним именем MYBUILD и отображаемое имя My Custom Build, Когда проект будет вновь открыт в Visual Studio, новый тип элемента будет доступен в списке Тип элемента. Выбор этого устанавливает тип этого элемента MYBUILD и поскольку на данный момент у нас нет определенного правила для такого типа элементов, оно будет просто проигнорировано при сборке.

Чтобы связать расширение файла с пользовательским типом элемента MSVC

Это делается в два этапа:

  1. Свяжите расширение файла с типом содержимого. Это делается путем добавления записи в mybuild.xml как это:

    <FileExtension Name="*.myext" ContentType="MYBUILD" />
    
  2. Свяжите тип содержимого с типом элемента. Это делается путем добавления записи в mybuild.xml как это:

    <ContentType Name="MYBUILD" DisplayName="My Custom Build" ItemType="MYBUILD" />
    

С этой точки зрения, mybuild.xml выглядит так:

    <?xml version="1.0" encoding="utf-8"?>
<ProjectSchemaDefinitions xmlns="http://schemas.microsoft.com/build/2009/properties"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:sys="clr-namespace:System;assembly=mscorlib">
<ItemType Name="MYBUILD" DisplayName="My Custom Build" />
<FileExtension Name="*.hh" ContentType="MYBUILD" />
<ContentType Name="MYBUILD" DisplayName="My Custom Build" ItemType="MYBUILD" />
</ProjectSchemaDefinitions>

Что мы только что сделали: Visual Studio теперь знает, что расширение .myext содержит данные типа MYBUILD, Он также знает, что файлы с содержимым типа MYBUILD являются предметами типа MYBUILD, После повторного открытия проекта в Visual Studio, при добавлении файлов с расширением .myextVisual Studio автоматически установит тип элемента «My Custom Build» для этих файлов.

Выполнить пользовательский инструмент для пользовательского элемента MSVC

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

  1. Свяжите тип элемента с целью сборки. В mybuild.targets Добавьте следующее в ту же ItemGroup, что и наша PropertyPageSchema:

    <AvailableItemName Include="MYBUILD">
    <Targets>_MYBUILD</Targets>
    </AvailableItemName>
    

Так что теперь это выглядит так:

    <ItemGroup>
<PropertyPageSchema
Include="$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml" />
<AvailableItemName Include="MYBUILD">
<Targets>_MYBUILD</Targets>
</AvailableItemName>
</ItemGroup>
  1. Определите пользовательскую цель. Здесь вы должны отобразить все свойства и переменные, которые должны использоваться для настройки задачи сборки. На следующем шаге мы будем использовать задачу сборки, которая использует шаблон командной строки, поэтому в нашей цели мы настроим фактическую командную строку. Это идет прямо под ItemGroup определено на предыдущем шаге:

    <Target Name="_MYBUILD">
    <MYBUILD CommandLineTemplate="explorer $(IntDir)"></MYBUILD>
    </Target>
    

Наша командная строка просто откроет окно проводника.

  1. Объявите пользовательскую задачу сборки. Это идет сразу после Target из предыдущего шага:

    <UsingTask TaskName="MYBUILD" TaskFactory="XamlTaskFactory" AssemblyName="Microsoft.Build.Tasks.v4.0">
    <Task>$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml</Task>
    </UsingTask>
    

Здесь мы ссылаемся на задачу, которая будет определена в нашем mybuild.xml файл.

  1. В mybuild.xmlдобавьте следующее правило:

    <Rule Name="MYBUILD" PageTemplate="tool" DisplayName="My Custom Build" Order="200"/>
    

Что мы только что сделали: мы сопоставили пользовательский тип элемента с пользовательской целью и пользовательскую задачу сборки, которая открывает окно проводника. Когда мы строим .myext файлы, теперь мы можем ожидать, что Visual Studio откроет окно обозревателя.

Настройка сборки

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

8

Другие решения


По вопросам рекламы [email protected]