我有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上关于类似问题的其他问题,但没有一个是这个问题,他们的解决方案真的不适用。
感谢任何人的任何帮助或方向可以给给予。
4条答案
按热度按时间vd8tlhqk1#
今天我的T4模板也遇到了类似的问题。
我找到了添加
EnvDTE
程序集的文件字符串
改成了
型
这解决了我的问题
wecizke32#
克雷格的解决方案对我不太有效。我发现这个问题在T4MVC的github上被提出,网址是https://github.com/T4MVC/T4MVC/issues/136#issuecomment-1089244574。
对我有效的建议解决方案是:
我通过删除EnvDTE、EnvDTE 80和Microsoft.VisualStudio.Shell.Interop的程序集导入修复了这个问题。(命名空间导入仍然是必需的。)
这显然与其他建议相似,但我认为它略有不同,因为这些建议似乎对我不起作用,或者我误解了它们。为了解决这个问题,我所做的就是删除三个建议的导入行。
lpwwtiir3#
尝试删除EnvDTE程序集。
字符串
但以下代码仍然有效:
型
我用VS2022。
6mzjoqzu4#
如果你需要.tt文件在Visual Studio 2019和2022中工作(因为你的一些同事很固执),而不是导入,你可以使用这样的包含:
第一个月
然后在
IncludeFileName.16.0.ttinclude
文件中,您将拥有:<#@ assembly name="EnvDTE"#>
个而
IncludeFileName.17.0.ttinclude
文件将是空的。