我正在开发一个基于 NetStandard 2.0 框架的类库,用于多平台兼容性问题,我需要序列化和反序列化对象。所以我添加了对 Newtonsoft 库的引用。
问题是我在运行时遇到以下异常:
System.IO.FileNotFoundException:'无法加载文件或程序集'System.ComponentModel.Annotations,Version = 4.2.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一。系统找不到指定的文件。'
我尝试手动添加对 System.ComponentModel.Annotations版本4.2.0.0 的引用,但此版本不可用。
有没有办法将Newtonsoft与NetStandard 2.0一起使用,或者是执行序列化/反序列化操作的替代方法?
更新:似乎添加对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>
答案 0 :(得分:1)
所以我一直在寻找从.NETStandard 2.0引用Newtonsoft.Json。它就在那里,并在版本Newtonsoft.Json.11.0.2中准备好。
〜/包/ 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>
答案 1 :(得分:0)
@ user9200027添加引用的解决方案对我不起作用。 但是,按内容引用确实可以,但是具有在解决方案资源管理器文件列表中显示的副作用。
但是请注意,如果针对多个框架,则应为.net标准框架添加条件,否则它将覆盖非.net标准框架的文件。
这是一个示例.csproj条目:
<Content Condition="$(TargetFramework)=='netstandard2.0'"
Include="$(NuGetPackageRoot)\newtonsoft.json\12.0.2\lib\netstandard2.0\Newtonsoft.Json.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
<Visible>False</Visible>
</Content>