En Visual Studio 2015, uso el paquete NuGet Unofficial.Microsoft.VisualStudio.TextTemplating.14.0.0 que me permite transformar plantillas T4 directamente desde MSBuild, cada vez que se crea un proyecto.
Sin embargo, en Visual Studio 2017 RTM, esto interrumpe la compilación con los siguientes mensajes:
An Exception was thrown while running the transformation code. The process cannot continue. The following Exception was thrown: System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.CodeAnalysis, Version=1.3.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified. File name: 'Microsoft.CodeAnalysis, Version=1.3.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Esto lo plantea el archivo Unofficial.Microsoft.VisualStudio.TextTemplating.targets(396,5) que se encuentra en este paquete.
Supongo que el error proviene de intentar usar estos objetivos de una compilación VS 2017 debido a entornos que no coinciden, pero no sé cómo rastrear el problema exacto. Todavía no hay un paquete actualizado para v15 que pueda ver.
¿Cómo puedo hacer transformaciones T4 desde MSBuild que funcionen para VS 2017? ¿Habrá un nuevo paquete de NuGet para usar en algún momento o ya no será compatible?
Encontré la solución correcta.
Resulta que el SDK de T4 ahora se incluye como parte de Visual Studio 2017 (y no como parte del SDK de modelado por separado como lo ha sido en el pasado), PERO debe instalarlo a través del conjunto de herramientas de Visual Studio extension development en el instalador de VS2017 (Característica de transformación de plantilla de texto).
Una vez que esté instalado, puede usar MSBuild para transformar plantillas importando los objetivos relevantes en el proyecto de MSBuild:
<PropertyGroup> <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">15.0</VisualStudioVersion> <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath> <TransformOnBuild>True</TransformOnBuild> <TransformOutOfDateOnly>false</TransformOutOfDateOnly> </PropertyGroup> <!-- add AFTER import for $(MSBuildToolsPath)\Microsoft.CSharp.targets --> <Import Project="$(VSToolsPath)\TextTemplating\Microsoft.TextTemplating.targets" />Esto resolvió mi problema y también elimina la necesidad del paquete NuGet no oficial por separado.
Tuve un problema similar. Mi T4 no generaría en la compilación, pero lo haría al guardar. Esto fue extraño ya que no recibí un error, pero al leer la respuesta de @Sam, pensé que algo andaba mal con mi instalación de VS. Y yo tenía razón. VS 2017 15.9.4 se instala en su propio directorio de instalación, pero no copia las herramientas en la carpeta VSToolsPath. En cambio, simplemente los deja donde están. Entonces, para mí, la solución correcta fue usar este <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(VsInstallRoot)\MSBuild\Microsoft\VisualStudio\v15.0\TextTemplating\Microsoft.TextTemplating.targets" />
T4Executer hace esto, y puede establecer qué plantillas ejecutar antes o después de la compilación, o establecer qué plantillas no deben ejecutarse en la compilación. VS2017-19