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

Mic*_*zyn 16 .net t4 dsl-tools visual-studio visual-studio-2022

我有一个扩展,正在从 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'     
Run Code Online (Sandbox Code Playgroud)

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

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

我已经阅读了有关类似问题的其他问题,但没有一个是这个问题,而且他们的解决方案确实不适用。

感谢任何人可以提供的任何帮助或指导。

Cra*_*ert 22

今天我的 T4 模板遇到了类似的问题。看了你的帖子并花了几分钟后,我尝试了以下方法

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

<#@ assembly name="EnvDTE"#>
Run Code Online (Sandbox Code Playgroud)

并将其更改为

<#@ assembly name="Microsoft.VisualStudio.Interop"#>
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题。

  • 如果您在 VS2018 中使用 EnvDTE 和 EnvDTE80,请替换两者,但保留命名空间指令: `&lt;#@ assembly name="EnvDTE"#&gt; &lt;#@ assembly name="EnvDTE80" #&gt; &lt;#@ import namespace="EnvDTE" #&gt;` 到 `&lt;#@ 程序集名称="Microsoft.VisualStudio.Interop"#&gt; &lt;#@ import namespace="EnvDTE" #&gt;` (3认同)