在NetStandard 2.0类库

时间:2017-12-13 01:36:03

标签: c# .net json.net .net-standard .net-standard-2.0

我正在开发一个基于 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>

2 个答案:

答案 0 :(得分:1)

所以我一直在寻找从.NETStandard 2.0引用Newtonsoft.Json。它就在那里,并在版本Newtonsoft.Json.11.0.2中准备好。

〜/包/ Newtonsoft.Json.11.0.2 /

enter image description here

只需在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>