NuGet - T4 Свойства файла отличаются после установки - PullRequest
4 голосов
/ 14 мая 2011

Я создаю пакет NuGet, который доставляет некоторые шаблоны T4 в каталог CodeTemplates. Когда я устанавливаю пакет NuGet, все шаблоны T4 имеют свойство Custom Tool, установленное в «TextTemplatingFileGenerator». Это не правильно.

Я знаю, что могу отключить это, изменив свой реестр, чтобы новые шаблоны T4 не добавлялись таким образом, но, поскольку это пакет NuGet, это не вариант.

Я изучил PowerShell, но мне сложно понять, что я буду делать для достижения своей цели.

Я посмотрел XML-файл .csproj и нашел его:

<None Include="CodeTemplates\AddController\Controller.tt">
    <Generator>TextTemplatingFileGenerator</Generator>
    <LastGenOutput>Controller.cs</LastGenOutput>
</None>

Если я удалю «TextTemplatingFileGenerator» из этого узла, то файл будет работать так, как я хочу.

Куда мне идти отсюда?

Ответы [ 2 ]

4 голосов
/ 14 мая 2011

Я не уверен, что есть хороший способ сделать это. В своем блоге Дэвид Эббо написал :

Последнее, что я упомяну об этом модель в том, что .tt файл обычно не часть вашего проекта. Вместо этого живет где-то еще, и только его вывод становится частью вашего проекта. Ну, технически, файл .tt может быть в вашем проекте для удобного редактирования, но Затем вы должны удалить TextTemplatingFileGenerator ’custom инструмент, потому что вы действительно не хотите его выполнить самостоятельно (это, безусловно, ошибка с пользовательским хостом).

Похоже, что это поведение Visual Studio, когда в проект добавляется файл .tt.

Тем не менее, AddMvc3ToWebForms Скотта Хансельмана вносит некоторые изменения в GUID в файле csproj, чтобы добавить функциональность MVC (Add Controller / Add View и т. Д.), Поэтому возможно, что вы могли бы сделать что-то похожее на его код и удалить раздел Generator для файлов в вашем пакете и перезагрузить проект?

2 голосов
/ 15 октября 2014

У меня была та же проблема, и я решил ее, используя «install.ps1», который выполняется каждый раз, когда пакет nuget устанавливается или обновляется.

Ваш install.ps1 должен выглядеть следующим образом:

param($installPath, $toolsPath, $package, $project)

$addControllerFolder = $project.ProjectItems.Item("CodeTemplates").ProjectItems.Item("AddController")

$addControllerFolder.ProjectItems.Item("Controller.tt").Properties.Item("CustomTool").Value = ""
...