在 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>
为了多平台兼容性,我正在开发一个基于 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>