Tengo una extensión que estoy actualizando de VS2019 a VS2022. Es un DSL que usa Modeling SDK y tiene generación de código a través de plantillas T4.
Lo tengo bastante convertido pero, cuando ejecuto los T4, obtengo
Compiling transformation: The type 'SourceControl' exists in both 'EnvDTE, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' and 'Microsoft.VisualStudio.Interop, Version=17.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' Compiling transformation: The type 'Project' exists in both 'EnvDTE, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' and 'Microsoft.VisualStudio.Interop, Version=17.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' Compiling transformation: The type 'Constants' exists in both 'EnvDTE, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' and 'Microsoft.VisualStudio.Interop, Version=17.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' Compiling transformation: The type 'ProjectItem' exists in both 'EnvDTE, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' and 'Microsoft.VisualStudio.Interop, Version=17.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' Compiling transformation: The type 'ProjectItems' exists in both 'EnvDTE, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' and 'Microsoft.VisualStudio.Interop, Version=17.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' Compiling transformation: The type 'DTE' exists in both 'EnvDTE, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' and 'Microsoft.VisualStudio.Interop, Version=17.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' Compiling transformation: The type 'Solution' exists in both 'EnvDTE, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' and 'Microsoft.VisualStudio.Interop, Version=17.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'y no puedo encontrar la manera de resolver esto.
No incluyo esos ensamblajes en mi archivo .tt principal, ni se hace referencia a ellos en mis proyectos Dsl o DslPackage , pero entiendo por otros errores que tuve que resolver que EnvDTE8.0 y Microsoft.VisualStudio.Interop están implícitamente disponibles como parte del entorno ambiental VS2022. Como no forman parte de mis proyectos, no puedo usar el mecanismo de Alias de Visual Studio para eliminar la ambigüedad.
He leído las otras preguntas sobre SO con respecto a problemas similares, pero ninguno de ellos es este problema y sus soluciones realmente no se aplican.
Gracias por cualquier ayuda o dirección que alguien pueda dar.
Me encontré con un problema similar hoy con mis plantillas T4. Después de mirar tu publicación y pensar en ella durante un par de minutos, probé lo siguiente
Encontré el archivo que agregaba el ensamblado EnvDTE
<#@ assembly name="EnvDTE"#>y lo cambié a
<#@ assembly name="Microsoft.VisualStudio.Interop"#>y eso resolvió mi problema.
intente eliminar el ensamblaje EnvDTE.
<#@ assembly name="EnvDTE"#>pero el siguiente código sigue siendo válido:
<# EnvDTE.DTE dte = (EnvDTE.DTE) ((IServiceProvider)this.Host).GetService(typeof(EnvDTE.DTE));#>y uso VS2022.