由于找不到“Microsoft.Bcl.AsyncInterfaces”,Visual Studio 扩展在解析 JSON 时失败

Owe*_*wen 2 .net c# vsix visual-studio-2022

我正在为 VS2022 开发 Visual Studio 扩展。扩展的部分功能涉及解析 JSON。为此,我安装了最新版本的 System.Text.JSON (7.0.1)。但是,在实验实例中,当我尝试运行涉及解析 JSON 的任务时,出现以下错误:

错误的图像

我正在使用 .NET Framework 4.7.2。在项目属性的 VSIX 选项卡中,我将其设置为将 VSIX 内容部署到实验实例以进行调试。此外,我的调试配置看起来像这样 - 尽管我尝试调整它以使其正常工作,但无济于事。

在此输入图像描述

我尝试了一些事情。首先,我从 NuGet 包管理器添加了对 Microsoft.Bcl.AsyncInterfaces 7.0.0 的引用。这没有帮助。作为上下文,CSPROJ 的这一部分如下所示

  <ItemGroup>
    <PackageReference Include="Microsoft.Bcl.AsyncInterfaces">
      <Version>7.0.0</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.VisualStudio.SDK" Version="15.0.1" ExcludeAssets="runtime">
      <IncludeAssets>compile; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
    <PackageReference Include="Microsoft.VSSDK.BuildTools" Version="17.4.2119">
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <PackageReference Include="System.Text.Json">
      <Version>7.0.1</Version>
    </PackageReference>
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

  • 重置实验实例。
  • 删除解决方案中的“bin”和“obj”文件夹
  • 升级到最新版本的 Visual Studio 2022
  • 升级System.Text.JSON(实际上我之前用7.0.0尝试过,但我将其升级到7.0.1)
  • 更改扩展程序的版本

我非常感谢您能为这个苦苦挣扎的扩展创建者提供任何帮助:)

Jim*_*mmy 5

原因是默认情况下 Microsoft.Bcl.AsyncInterfaces 被禁止包含在 VSIX 中。这是由 VS SDK 完成的,目的是减少安装程序集的重复副本(浪费磁盘空间,因为 VS 已经包含该程序集的一个版本,以及从非默认路径加载的边缘情况)影响 VS 性能,例如破坏 NGEN)。

在您的情况下,VS 正在发布版本 6.0.0.0 的副本,并且具有从 0.0.0.0-6.0.0.0 的绑定重定向。但是,您的扩展依赖于 7.0.0.0,无法找到该扩展,因此无法加载。

在 VS 发布 7.0.0.0 版本的副本之前,您需要确保您的版本包含在 VSIX 中,并为其提供代码库(例如,使用 ProvideCodeBase属性)。我认为(但尚未验证)在 VSSDK.targets 导入之后将其添加到项目文件中可能会使其包含在 VSIX 中:

<ItemGroup>
  <!-- remove this once VS ships this assembly at the version you need -->
  <SuppressFromVsix Remove="Microsoft.Bcl.AsyncInterfaces.dll" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

当然,另一个选择是使用旧版本的 System.Text.Json,以便它与 VS 当前发布的版本保持一致。