Как заставить Visual Studio 2008 сгенерировать код из шаблонов T4 при изменении файла XML? - PullRequest
5 голосов
/ 28 октября 2009

Я генерирую довольно много кода из одного файла XML, но шаблоны организованы в два разных шаблона T4. Всякий раз, когда я изменяю файл XML, я должен помнить, чтобы открыть два файла *.tt, изменить их тривиально (добавить / удалить пробел) и сохранить их снова, чтобы убедиться, что код генерируется.

Это не может быть правильным способом сделать это!

В идеале я хотел бы, чтобы Visual Studio 2008 выполнял преобразование текста в файлах T4, если файл XML изменился. Я немного растерялся, так как не знаю, как Visual Studio строит проекты на C #, поэтому указатели в этом направлении также могут помочь (я мог бы попытаться выяснить это сам).

Ответы [ 2 ]

2 голосов
/ 12 ноября 2010

Я думаю, что, возможно, наконец нашел решение здесь. Я понял, когда просматривал, как XAML-файлы упоминаются в файле проекта для проектов на c #.

Давайте предположим файл A.tt и B.tt, который использует данные из C.xml, и мы хотели бы восстановить код всякий раз, когда C.xml изменяется.

Редактировать файл проекта. Ваши определения для A.tt и B.tt должны выглядеть примерно так:

<ItemGroup>
    <None Include="A.tt">
      <Generator>TextTemplatingFileGenerator</Generator>
      <LastGenOutput>A.cs</LastGenOutput>
      <DependentUpon>C.xml</DependentUpon>
    </None>
    <None Include="B.tt">
      <Generator>TextTemplatingFileGenerator</Generator>
      <LastGenOutput>B.cs</LastGenOutput>
      <DependentUpon>C.xml</DependentUpon>
    </None>
</ItemGroup>

Далее вам понадобится (конечно ...)

<ItemGroup>
    <None Include="C.xml" />
</ItemGroup>

А также инструкция по автогенерации A.cs и B.cs:

<Compile Include="A.cs">
      <DependentUpon>A.tt</DependentUpon>
      <AutoGen>True</AutoGen>
      <DesignTime>True</DesignTime>
</Compile>
<Compile Include="B.cs">
      <DependentUpon>B.tt</DependentUpon>
      <AutoGen>True</AutoGen>
      <DesignTime>True</DesignTime>
</Compile>

Я полагаю, что большая часть этого уже будет сделана для вас при создании файла шаблона, поэтому все, что вам действительно нужно добавить, это <DependentUpon>C.xml</DependentUpon> части к ItemGroup s для A.tt и B.tt.

2 голосов
/ 28 октября 2009

Вы можете использовать T4ScriptFileGenerator из T4Toolbox в качестве специального инструмента для вашего XML-файла. Допустим, у вас есть файл Test.XML в вашем проекте с этим пользовательским инструментом. При первом сохранении Test.XML этот пользовательский инструмент создает новый файл Test.tt. Вы можете разместить свою логику генерации кода там (на месте, или #include ваши другие файлы .tt). В следующий раз, когда вы сохраните Test.XML, он преобразует (генерирует код из) существующий Test.tt.

...