使用IDebugEventCallback2的VS2019扩展

时间:2019-07-17 11:39:01

标签: c# visual-studio visual-studio-extensions visual-studio-2019

我使用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

1 个答案:

答案 0 :(得分:1)

VS2019使用PackageReference格式来管理VSIX项目的nuget包。

默认情况下,它将引用Microsoft.VisualStudio.SDKMicrosoft.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.InteropMicrosoft.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。这取决于您的需求。