Шаг за шагом, как добавить настраиваемый шаг сборки для каждого файла данного типа в Visual Studio 2010? - программирование

Шаг за шагом, как добавить настраиваемый шаг сборки для каждого файла данного типа в Visual Studio 2010?

Проблема

  • У меня есть куча пользовательских файлов в проекте visual studio 2010.
  • Мне нужно запустить инструмент для этих пользовательских файлов, когда они меняются.
  • Инструмент генерирует файлы .h, входящие в состав существующих файлов .cpp.
  • Я хочу, чтобы инструмент выполнялся как часть процесса сборки.
  • Он должен запускаться из визуальной студии, но в идеале может также выполняться как часть процесса msbuild.

Существующие субстандартные решения

В каждом файле каждый раз, когда я его добавляю, я могу перейти к настройкам файла, установить тип элемента в Custom Build Tool, а затем в диалоговом окне Custom Build Tool, установить параметры командной строки, установить (hardcoded) выходов и установить (жестко закодированные) дополнительные зависимости.

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

Желаемое решение

Я установил визуальную студию, которая для любого файла расширения .foo запускает tool bar.exe, когда файл .foo изменяется, прежде чем компилирует код CPP.

Вещи, которые я предпринял

Исходя из этого: http://msdn.microsoft.com/en-us/library/3e889s84(v=vs.100).aspx Я попытался создать файл .targets и .xml. Однако я не могу узнать, как создать новый тип элемента, чтобы он отображался в визуальной студии, и я не могу понять, как сделать его магическим образом применимым к каждому файлу типа .foo. Кроме того, я не понял, как в любом случае это связано с тем, что описывает действие вызова моего инструмента bar.exe.

Я попытался выполнить поиск по всем файлам xml/target в visual studio, чтобы отслеживать существующие типы элементов и определять, как они преобразуются в фактические действия сборки. Он всегда заканчивается на стене ItemType, где есть куча, описанная в ProjectItemsSchema, но я не могу найти, где они реализованы, или как я могу реализовать их самостоятельно.

Документация MSDN была полной неудачей, и я думаю, что я читал каждую потенциально связанную страницу десять раз, но безрезультатно.

В visual studio 2008 у меня была такая работа с файлом .rules, который выглядел так:

<?xml version="1.0" encoding="utf-8"?>
<VisualStudioToolFile
Name="Foo Build Rules"
Version="8.00"
>
<Rules>
    <CustomBuildRule
        Name="FooBuild"
        DisplayName="FooGen"
        CommandLine="..\..\tools\FooGen.exe [inputs]"
        Outputs="$(InputName).h"
        AdditionalDependencies="*.foo"
        FileExtensions="*.foo"
        ExecutionDescription="Generating Foos..."
        >
        <Properties>
        </Properties>
    </CustomBuildRule>
</Rules>
</VisualStudioToolFile>

Однако в 2010 году эта функциональность устарела, и мне не удалось выяснить, как ее реплицировать с помощью новой системы.

Справка

4b9b3361

Ответ 1

Начните с добавления пользовательской ItemGroup в файл проекта.

Как ниже:

<ItemGroup>
    <CustomBuild Include="faq.txt">
      <Message>Copying readme...</Message>
      <Command>copy %(Identity) $(OutDir)%(Identity)</Command>
      <Outputs>$(OutDir)%(Identity)</Outputs>
    </CustomBuild>
  </ItemGroup>

Затем создайте настраиваемую цель и определите, где в процессе сборки вы хотите запускать свои пользовательские цели в процессе сборки.

Ниже приведены ссылки более подробно и шаг за шагом.

Надеюсь, что это поможет.

Проход: использование MSBuild для создания проекта Visual С++

Как добавить пользовательские инструменты сборки в проекты MSBuild

Примечание: В текущей версии среда IDE не поддерживает создание новых правил. По этой причине самый простой способ использования файла правил из проекта, созданного с использованием более ранней версии Visual С++, заключается в переносе проекта на текущую версию.