VS2022 可扩展性:如何解决“T4 模板执行中 'Assembly 1' 和 'Assembly2' 中都存在类型 'XXX'

VS2022 Extensibility: How to resolve "The type 'XXX' exists in both 'Assembly 1' and 'Assembly2' in T4 template execution

我有 an extension 我正在从 VS2019 更新到 VS2022。它是一个使用建模 SDK 的 DSL,并通过 T4 模板生成代码。

我几乎已经转换了它,但是当 运行 T4 时,我得到

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'     

并且不知道如何解决这个问题。

我没有在我的 .tt 主文件中包含这些程序集,我的 DslDslPackage 项目中也没有引用它们,但我从其他一些错误中了解到解决 EnvDTE8.0Microsoft.VisualStudio.Interop 作为环境 VS2022 环境的一部分隐式可用的问题。因为它们不是我项目的一部分,所以我不能使用 Visual Studio Alias 机制来消除歧义。

我已经阅读了关于 SO 的其他关于类似问题的问题,但其中 none 就是这个问题,他们的解决方案确实不适用。

感谢任何人的帮助或指导。

我 运行 今天在我的 T4 模板中遇到了类似的问题。看了你的 post 并在上面闲逛了几分钟后,我尝试了以下

我找到了添加 EnvDTE 程序集的文件

<#@ assembly name="EnvDTE"#>

并将其更改为

<#@ assembly name="Microsoft.VisualStudio.Interop"#>

这解决了我的问题。

尝试删除 EnvDTE 程序集。

<#@ assembly name="EnvDTE"#>

但以下代码仍然有效:

<# EnvDTE.DTE dte = (EnvDTE.DTE) ((IServiceProvider)this.Host).GetService(typeof(EnvDTE.DTE));#>

我用的是VS2022