簡體   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