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
主文件中包含这些程序集,我的 Dsl
或 DslPackage
项目中也没有引用它们,但我从其他一些错误中了解到解决 EnvDTE8.0
和 Microsoft.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
我有 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
主文件中包含这些程序集,我的 Dsl
或 DslPackage
项目中也没有引用它们,但我从其他一些错误中了解到解决 EnvDTE8.0
和 Microsoft.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