Я недавно перенес тестовый проект в .NET Core 2.0. Этот тестовый проект использовал текстовые шаблоны для генерации повторяющегося кода. В предыдущем проекте была цель сборки для генерации всех T4-шаблонов перед сборкой. Поэтому сгенерированный код также не регистрируется в VCS.
Я использовал этот фрагмент в проекте, чтобы убедиться, что шаблоны построены:
<PropertyGroup>
<!-- Default VisualStudioVersion to 15 (VS2017) -->
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">15.0</VisualStudioVersion>
<!-- Determinate VSToolsPath -->
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
<!-- Run T4 generation if there are outdated files -->
<TransformOnBuild>True</TransformOnBuild>
<TransformOutOfDateOnly>True</TransformOutOfDateOnly>
</PropertyGroup>
<!-- Import TextTemplating target -->
<Import Project="$(VSToolsPath)\TextTemplating\Microsoft.TextTemplating.targets" />
Моим первым подходом было сохранить этот фрагмент и скопировать его в новый файл проекта .NET Core.
Внутри Visual Studio это работает, потому что, очевидно, VSToolsPath
установлен правильно. Однако, когда я запускаю инструменты .NET Core SDK, как, например, dotnet test
(как я делаю на сервере сборки), VSToolsPath
сопоставляется с Program Files\dotnet\sdk\2.0.3
и там не могут быть найдены цели шаблонов текста.,
Поскольку это не помогло, я также попытался просто установить пакет Microsoft.VisualStudio.TextTemplating
из Nuget, но у него есть две проблемы:
- он официально не поддерживает .NET Core и устанавливает для .NET 4.6.1 и
- Nuget, похоже, ничего не устанавливает, поэтому я не могу изменить пути в файле проекта.