在 NetStandard 2.0 class 库中使用 Newtonsoft 库

Use Newtonsoft library in NetStandard 2.0 class library

为了多平台兼容性,我正在开发一个基于 NetStandard 2.0 框架的 class 库,我需要序列化和反序列化对象。所以我添加了对 Newtonsoft 库的引用。

问题是我在运行时出现以下异常:

System.IO.FileNotFoundException: 'Could not load file or assembly 'System.ComponentModel.Annotations, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.'

我尝试手动添加对 System.ComponentModel.Annotations 版本 4.2.0.0 的引用,但此版本不可用。

有没有办法将 Newtonsoft 与 NetStandard 2.0 一起使用,或者有其他方法来执行 serialization/deserialization 操作?

更新:似乎添加对 System.ComponentModel.Annotations" Version="4.4.1" 的引用并重建解决方案解决了问题。

这是我的 csproj 文件的内容:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

    <ItemGroup>
      <PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
      <PackageReference Include="System.ComponentModel.Annotations" Version="4.4.1" />
    </ItemGroup>
</Project>

所以我一直在考虑从 .NETStandard 2.0 中引用 Newtonsoft.Json。一切就绪,版本 Newtonsoft.Json.11.0.2.

~/packages/Newtonsoft.Json.11.0.2/

像这样在csproj中引用它...

<Reference Include="Newtonsoft.Json">
  <HintPath>..\APAS.WebInterface\packages\Newtonsoft.Json.11.0.2\lib\netstandard2.0\Newtonsoft.Json.dll</HintPath>
</Reference>

@user9200027 添加引用的解决方案对我不起作用。 然而,作为内容引用确实有效,但它具有显示在解决方案资源管理器文件列表中的副作用。

但请注意,如果针对多个框架,则应为 .net 标准框架添加一个条件,否则它也会覆盖非 .net 标准框架的文件。

这是一个示例 .csproj 条目:

<Content Condition="$(TargetFramework)=='netstandard2.0'"
    Include="$(NuGetPackageRoot)\newtonsoft.json.0.2\lib\netstandard2.0\Newtonsoft.Json.dll">
  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
  <Visible>False</Visible>
</Content>