System.Net.Http в net47

У меня есть обычная библиотека классов в Windows, использующая.NET 4.7

Я хотел бы включить web-push-csharp.

Пакет перечисляет 2 допустимых зависимости (Newtonsoft Json и BouncyCastle). Также хочет установить Microsoft.Net.Http. И я понятия не имею, почему. Мне это не нужно Моя целевая структура поставляется с прекрасно System.Net.Http для ссылки. Поскольку этот пакет Microsoft содержит список других зависимостей, которые конфликтуют с другими зависимостями, расположенными выше в моей цепочке, это огромное неудобство. Зачем мне включать пакет, который мне не нужен?

Теперь я подумал, что это не должно быть проблемой, пошел и клонировал веб-репозиторий push-пакетов, чтобы поместить мою целевую инфраструктуру и... это правильно, вы не можете скомпилировать для целевой инфраструктуры net47 без внешнего *.Net.Http ссылка. Все же мой Create New Project Проект.NET 4.7 уже поставляется с такой ссылкой, вообще не затрагивая nuget.

Копирование всех файлов пакетов в новую ClassLibrary1 прекрасно работает только с NewtonsoftJson и BouncyCastle.

Что мне здесь не хватает? Почему.NET Framework потерял свой System.Net.Http с 4,5 до 4,6? И почему нет доступной FrameworkTarget, где я могу сказать "это нормально, у меня полная версия 4.7"?

Есть ли другой вариант, кроме клонирования хранилища и создания из него обычной библиотеки классов 4.7 для моего использования?


Дополнительная информация:

Я клонировал репозиторий web-push-csharp и добавил новый целевой фреймворк net47 без какой-либо зависимости от Microsoft.Net.Http:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFrameworks>netcoreapp1.0;netcoreapp1.1;netstandard1.3;net45;net46;net47</TargetFrameworks>
  </PropertyGroup>

  <ItemGroup Condition="'$(TargetFramework)'=='net45' OR '$(TargetFramework)'=='net46'">
    <PackageReference Include="BouncyCastle" Version="1.8.1" /> 
    <PackageReference Include="Microsoft.Net.Http" Version="2.2.29" />
  </ItemGroup>

  <ItemGroup Condition="'$(TargetFramework)'=='net47'">
    <PackageReference Include="BouncyCastle" Version="1.8.1" />
  </ItemGroup>

  <ItemGroup Condition="'$(TargetFramework)'=='netcoreapp1.0' OR '$(TargetFramework)'=='netcoreapp1.1' OR '$(TargetFramework)'=='netstandard1.3'">
    <PackageReference Include="BouncyCastle.NetCore" Version="1.8.1.3" /> 
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
  </ItemGroup>
</Project>

Это приводит к множественным ошибкам компиляции по линии:

Ошибка CS0234 Тип или имя пространства имен "Http" не существует в пространстве имен "System.Net" (отсутствует ссылка на сборку?) WebPush(net47)


Решение

Для тех, кто читает это, ищет решение: после тестирования я включил принятый ответ в ветку ветки и отправил сопровождающему запрос Pull, чтобы его можно было использовать в оригинальном пакете.

2 ответа

Решение

Как вы сказали,.NET Framework (все упомянутые версии: 4.5, 4.6, 4.7) поставляется с System.Net.Http Сборка готова к использованию, поэтому нет необходимости ссылаться на пакеты nuget. Но вам нужно сослаться на саму сборку:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFrameworks>netcoreapp1.0;netcoreapp1.1;netstandard1.3;net45;net46;net47</TargetFrameworks>
  </PropertyGroup>

  <ItemGroup Condition="'$(TargetFramework)'=='net45' OR '$(TargetFramework)'=='net46'">
    <PackageReference Include="BouncyCastle" Version="1.8.1" /> 
    <!-- here -->
    <Reference Include="System.Net.Http" />
  </ItemGroup>

  <ItemGroup Condition="'$(TargetFramework)'=='net47'">
    <PackageReference Include="BouncyCastle" Version="1.8.1" />
    <!-- and here -->
    <Reference Include="System.Net.Http" />
  </ItemGroup>

  <ItemGroup Condition="'$(TargetFramework)'=='netcoreapp1.0' OR '$(TargetFramework)'=='netcoreapp1.1' OR '$(TargetFramework)'=='netstandard1.3'">
    <PackageReference Include="BouncyCastle.NetCore" Version="1.8.1.3" /> 
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
  </ItemGroup>
</Project>

В файле nuspec они не упомянули о поддержке.NET 4.7 ( https://github.com/web-push-libs/web-push-csharp/blob/master/WebPush.nuspec) Возможно, вы можете взять клон репозиторий и добавьте изменить файл, как показано ниже

<?xml version="1.0"?>
<package >
  <metadata>
    <id>WebPush</id>
    <version>1.0.9</version>
    <authors>Cory Thompson</authors>
    <owners>Cory Thompson</owners>
    <licenseUrl>https://github.com/coryjthompson/web-push-csharp/blob/master/LICENSE</licenseUrl>
    <projectUrl>https://github.com/coryjthompson/web-push-csharp/</projectUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Web Push library for C#</description>
    <copyright>Copyright 2017</copyright>
    <tags>web push notifications vapid</tags>
    <dependencies>  
        <group targetFramework="netcoreapp1.0">
            <dependency id="BouncyCastle.NetCore" version="1.8.1.3"/>
            <dependency id="Newtonsoft.Json" version="10.0.1"/>
        </group>
        <group targetFramework="netcoreapp1.1">
            <dependency id="BouncyCastle.NetCore" version="1.8.1.3"/>
            <dependency id="Newtonsoft.Json" version="10.0.1"/>
        </group>
        <group targetFramework="netstandard1.3">
            <dependency id="BouncyCastle.NetCore" version="1.8.1.3"/>
            <dependency id="Newtonsoft.Json" version="10.0.1"/>
        </group>

        <group targetFramework="net45">
            <dependency id="BouncyCastle" version="1.8.1"/>
        <dependency id="Microsoft.Net.Http" version="2.2.29" />
            <dependency id="Newtonsoft.Json" version="10.0.1"/>
        </group>

        <group targetFramework="net46">
            <dependency id="BouncyCastle" version="1.8.1"/>
            <dependency id="Microsoft.Net.Http" version="2.2.29" />
            <dependency id="Newtonsoft.Json" version="10.0.1"/>
        </group>
        <group targetFramework="net47">
            <dependency id="BouncyCastle" version="1.8.1"/>
            <dependency id="Microsoft.Net.Http" version="2.2.29" />
            <dependency id="Newtonsoft.Json" version="10.0.1"/>
        </group>
    </dependencies>
  </metadata>
</package>

и упакуйте свой собственный файл nuget и используйте его в своем проекте. https://programmium.wordpress.com/2014/05/26/keen-io-windows-phone-8-1-and-nuget-package-creation/ этот пост расскажет вам, как создать новый пакет nuget.

Другие вопросы по тегам