![](/img/trans.png)
[英]type universe cannot resolve assembly opening project in vs2022
[英]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
文件中,也没有在我的Dsl
或DslPackage
项目中引用它们,但我从其他一些错误中了解到我必须解决EnvDTE8.0
和Microsoft.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.