Использовать библиотеку Newtonsoft в библиотеке классов NetStandard 2.0

Я разрабатываю библиотеку классов на основе структуры NetStandard 2.0 для обеспечения совместимости с несколькими платформами, и мне нужно сериализовать и десериализовать объекты. Поэтому я добавил ссылку на библиотеку Newtonsoft.

Проблема в том, что во время выполнения у меня возникает следующее исключение:

System.IO.FileNotFoundException: «Не удалось загрузить файл или сборку» System.ComponentModel.Annotations, Version = 4.2.0.0, Culture = нейтральный, 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>

person Toto    schedule 13.12.2017    source источник
comment
Может быть, это дает вам трассировку стека?   -  person Oleksii Aza    schedule 13.12.2017
comment
Как вы добавили ссылку? через nuget?   -  person zaitsman    schedule 13.12.2017
comment
На какой именно пакет вы ссылаетесь? Newtonsoft.Json? Newtonsoft.Json.Schema?   -  person Oleksii Aza    schedule 13.12.2017
comment
Измените свой вопрос и включите содержимое вашего файла .csproj   -  person Scott Chamberlain    schedule 13.12.2017
comment
Я добавляю ссылку через Nugget. Я отредактировал вопрос, чтобы объяснить, как я решил проблему, спасибо за быстрые ответы. Я специально ссылаюсь на Newtonsoft.Json v10.0.3   -  person Toto    schedule 13.12.2017
comment
Вы можете отвечать на свои собственные вопросы, что НАМНОГО лучше, чем редактировать свой вопрос, чтобы включить ответ.   -  person Jeremy Thompson    schedule 13.12.2017


Ответы (2)


Итак, я искал ссылки на Newtonsoft.Json из .NETStandard 2.0. Все это есть и готово в версии 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>
person Community    schedule 20.04.2018

Решение @ 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>
person yoel halb    schedule 16.07.2019