VS2010 T4 автоматическая проверка сгенерированных файлов из TFS не удается - PullRequest
6 голосов
/ 10 мая 2011

Я пытаюсь использовать такую ​​простую схему в моем проекте:

Item.cs -> это содержит частичный класс c # с простыми свойствами сущности.Он также установил свойство «Custom Tool: T4ScriptFileGenerator», поэтому он присоединяет к нему «сгруппированный» файл Item.tt .На своем пути генерирует Item.generated.cs , сгруппированный в Item.tt .В результате в проводнике решений получается сгруппированное дерево:

Item.cs
˪Item.tt
 ˪Item.generated.cs

Ниже показано, как оно выглядит в файле .csproj.

Весь проект подключен к рабочей области TFS 2010.

Проблема в следующем:

Когда я редактирую Item.cs , движок t4 воссоздает файл Item.generated.cs , но не извлекает его из tfs,Он автоматически проверяет только первые два уровня «сгруппированных» файлов - Item.cs и его зависимых Item.tt . Item.generated.cs обновляется, но просто перезаписывается, без проверки.

Если я редактирую файл Item.tt или просто нажимаю «Запустить пользовательский инструмент» на нем - снова два файлаизвлечено: Item.tt и его зависимых Item.generated.cs Это странно, потому что вынуждает нас вручную "запускать пользовательский инструмент" для каждого файла * .tt после редактирования файлов классов сущностейчтобы убедиться, что в TFS ничего не пропущено.

В: Есть ли способ заставить его проверять все дерево DependentUpon файлов при редактировании основного Item.cs?

Вот как это выглядит в источнике файла .csproj:

<Compile Include="Entities\Item.cs">
  <Generator>T4ScriptFileGenerator</Generator>
  <LastGenOutput>Item.tt</LastGenOutput>
</Compile>
<None Include="Entities\Item.tt">
  <Generator>TextTemplatingFileGenerator</Generator>
  <AutoGen>True</AutoGen>
  <DesignTime>True</DesignTime>
  <DependentUpon>Item.cs</DependentUpon>
  <LastGenOutput>Item.codegen.cs</LastGenOutput>
</None>
<Compile Include="Entities\Item.codegen.cs">
  <AutoGen>True</AutoGen>
  <DesignTime>True</DesignTime>
  <DependentUpon>Item.tt</DependentUpon>
</Compile>

Ответы [ 2 ]

0 голосов
/ 19 сентября 2017
/// <summary>
/// (T4 template code to checkout a file path if necessary)
/// </summary>
/// <param name="fileName">The file name.</param>
private void CheckoutFileIfRequired(String fileName)
{
    var sc = this.dte.SourceControl;
    if (sc != null && sc.IsItemUnderSCC(fileName) && !sc.IsItemCheckedOut(fileName))
            checkOutAction.EndInvoke(checkOutAction.BeginInvoke(fileName, null, null));
}
0 голосов
/ 21 декабря 2011

Это не очень элегантно, но вы всегда можете заставить VS преобразовать все шаблоны в решении, нажав кнопку «Преобразовать все шаблоны» в верхней части проводника решений.

См. Мою заметку по первоначальному вопросу, так как, по крайней мере, в VS2010 SP1 это работает, учитывая точный пример файла проекта.

...