net47中的System.Net.Http

时间:2017-10-17 12:48:41

标签: c# .net target-framework

我在Windows上有一个普通的类库,使用.NET 4.7

我想加入web-push-csharp

该软件包列出了2个可接受的依赖项(Newtonsoft Json和BouncyCastle)。它还想安装Microsoft.Net.Http。我不明白为什么。我不需要它。我的目标框架带有一个非常精细的System.Net.Http来引用。 由于Microsoft软件包中包含与我的链中较高的其他依赖项冲突的其他依赖项的列表,因此非常不方便。为什么我要包含一个我不需要的包呢?

现在我认为这不应该是一个问题,去克隆web推送包存储库,把我的目标框架放进去......这是正确的,你不能在没有外部的情况下编译目标框架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名称空间'System.Net'中不存在类型或命名空间名称'Http'(您是否缺少程序集引用?)WebPush(net47)

解决方案

对于阅读本文寻找解决方案的任何人:经过测试,我将accepted answer合并到branch的一个分叉中,并向维护者发送Pull request,以便它可以用于原始包装。

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

在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包。