我使用VS2019 16.1.6创建了一个新的VS扩展。 并且我使用了using语句
using Microsoft.VisualStudio.Debugger.Interop;
并将接口IDebugEventCallback2添加到我的课程中
public sealed class VSIXProject1Package : AsyncPackage, IDebugEventCallback2
不是我收到错误:
错误CS0433:类型'IDebugEventCallback2'在'Microsoft.VisualStudio.Debugger.Interop,版本= 8.0.1.0,区域性=中性,PublicKeyToken = b03f5f7f11d50a3a'和'Microsoft.VisualStudio.Debugger.InteropA,版本= 9.0中都存在.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'
如何摆脱这个错误?还是除了使用IDebugEventCallback2之外,还有其他方法可以对调试器事件做出反应?
编辑: 向Microsoft报告的问题: https://developercommunity.visualstudio.com/content/problem/651199/vs2019-extension-using-idebugeventcallback2.html
答案 0 :(得分:1)
VS2019使用PackageReference格式来管理VSIX项目的nuget包。
默认情况下,它将引用Microsoft.VisualStudio.SDK
和Microsoft.VSSDK.BuildTools
程序包。此外,由于Microsoft.VisualStudio.SDK
程序包还依赖于许多其他程序包,因此该项目还将引用这些程序包。
查看以下简单结构:
Microsoft.VisualStudio.SDK
......(other dependencies)
--Microsoft.VisualStudio.Debugger.Interop
--Microsoft.VisualStudio.OLE.Interop
--Microsoft.VisualStudio.Debugger.Interop.10.0
--Microsoft.VisualStudio.Debugger.InteropA
......(11.0,12.0,14.0,15.0)
--Microsoft.VisualStudio.Debugger.Interop.16.0
--Microsoft.VisualStudio.Debugger.InteropA
因此,很明显,此问题是由VSIX项目导致的,同时添加了对Microsoft.VisualStudio.Debugger.Interop
和Microsoft.VisualStudio.Debugger.InteropA
的引用。
这两个程序集具有相同的名称空间Microsoft.VisualStudio.Debugger.Interop
,并且都具有IDebugEventCallback2
接口。我认为这就是导致此问题的原因。
一种解决方法:
正常情况下,我们可以使用extern alias。但是它尚不支持PackageReference
格式。幸运的是,我从gertjvr找到了一个很好的提示。所以我们需要的是:
卸载项目=>编辑xxx.csproj =>将以下内容添加到项目文件中:
<Target Name="ChangeAliasesOfStrongNameAssemblies" BeforeTargets="FindReferenceAssembliesForReferences;ResolveReferences">
<ItemGroup>
<ReferencePath Condition="'%(FileName)' == 'Microsoft.VisualStudio.Debugger.Interop'">
<Aliases>signed</Aliases>
</ReferencePath>
</ItemGroup>
</Target>
如果要使用此程序集中的接口,可以将ReferencePath
更改为Microsoft.VisualStudio.Debugger.InteropA
。这取决于您的需求。