繁体   English   中英

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

我有一个扩展,我正在从 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文件中,也没有在我的DslDslPackage项目中引用它们,但我从其他一些错误中了解到我必须解决EnvDTE8.0Microsoft.VisualStudio.Interop隐式可用环境 VS2022 环境的一部分。 由于它们不属于我的项目,因此我无法使用 Visual Studio Alias机制来消除歧义。

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

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

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

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

<#@ assembly name="EnvDTE"#>

并将其更改为

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

这解决了我的问题。

尝试删除 EnvDTE 程序集。

<#@ assembly name="EnvDTE"#>

克雷格的解决方案并不适合我。 我发现这个问题是在 T4MVC 的 github 中提出的https://github.com/T4MVC/T4MVC/issues/136#issuecomment-1089244574

对我有用的建议解决方案是:

我通过删除 EnvDTE、EnvDTE80 和 Microsoft.VisualStudio.Shell.Interop 的程序集导入来解决此问题。 (命名空间导入仍然是必需的。)

这显然与其他建议相似,但我认为它略有不同,因为这些似乎对我不起作用,或者我误解了它们。 为了解决这个问题,我所做的只是删除了三个建议的导入行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM