2

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

我几乎已经转换了,但是在运行 T4s 时,我得到了

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中引用它们,但我从其他一些错误中了解到我必须解决这个问题,并且作为环境 VS2022 环境的一部分隐式可用。由于它们不属于我的项目,因此我无法使用 Visual Studio机制来消除歧义。DslDslPackageEnvDTE8.0Microsoft.VisualStudio.InteropAlias

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

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

4

2 回答 2

8

我今天在使用 T4 模板时遇到了类似的问题。在看了你的帖子并在上面胡思乱想了几分钟后,我尝试了以下方法

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

<#@ assembly name="EnvDTE"#>

并将其更改为

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

这解决了我的问题。

于 2021-11-15T16:02:48.520 回答
0

尝试删除 EnvDTE 程序集。

<#@ assembly name="EnvDTE"#>

但以下代码仍然有效:

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

我使用VS2022。

于 2022-01-29T07:48:55.550 回答