System.Net.Http 在 net47 中
System.Net.Http in net47
我在 Windows 上有一个普通的 class 库,使用 .NET 4.7
我想包括 web-push-csharp。
该软件包列出了 2 个可接受的依赖项(Newtonsoft Json 和 BouncyCastle)。它还要安装Microsoft.Net.Http。我不知道为什么。我不需要它。我的目标框架附带了一个非常好的 System.Net.Http
供参考。 由于该 Microsoft 软件包有一个其他依赖项列表,这些依赖项与我的链中更高层的其他依赖项发生冲突,这会带来巨大的不便。为什么我要包括一个我不需要的包?
现在我认为这应该不是问题,去克隆了网络推送包存储库,将我的目标框架放入其中......是正确的,你无法为目标框架编译 net47
没有外部 *.Net.Http
参考。然而,我的 Create New Project
.NET 4.7 项目已经提供了这样的参考,而根本没有触及 nuget。
将所有包文件复制到新的 ClassLibrary1 中,只需使用 NewtonsoftJson 和 BouncyCastle。
我在这里错过了什么?为什么 .NET Framework 从 4.5 到 4.6 失去了 System.Net.Http?为什么没有可用的 FrameworkTarget,我可以说“这很好,我有一个完整的 4.7”?
除了克隆存储库并从中创建一个普通的 4.7 class 库供我使用之外,还有其他选择吗?
附加信息:
我克隆了 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>
这会导致多个编译错误:
Error CS0234 The type or namespace name 'Http' does not exist in the namespace 'System.Net' (are you missing an assembly reference?) WebPush(net47)
解决方案
对于正在寻找解决方案的阅读本文的任何人:经过测试,我合并了 into a branch of a fork and sent the maintainer a Pull request,因此它可以在原始包中使用。
在 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/ 此 post 将告诉您如何创建新的 nuget 包。
如您所说,.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>
我在 Windows 上有一个普通的 class 库,使用 .NET 4.7
我想包括 web-push-csharp。
该软件包列出了 2 个可接受的依赖项(Newtonsoft Json 和 BouncyCastle)。它还要安装Microsoft.Net.Http。我不知道为什么。我不需要它。我的目标框架附带了一个非常好的 System.Net.Http
供参考。 由于该 Microsoft 软件包有一个其他依赖项列表,这些依赖项与我的链中更高层的其他依赖项发生冲突,这会带来巨大的不便。为什么我要包括一个我不需要的包?
现在我认为这应该不是问题,去克隆了网络推送包存储库,将我的目标框架放入其中......是正确的,你无法为目标框架编译 net47
没有外部 *.Net.Http
参考。然而,我的 Create New Project
.NET 4.7 项目已经提供了这样的参考,而根本没有触及 nuget。
将所有包文件复制到新的 ClassLibrary1 中,只需使用 NewtonsoftJson 和 BouncyCastle。
我在这里错过了什么?为什么 .NET Framework 从 4.5 到 4.6 失去了 System.Net.Http?为什么没有可用的 FrameworkTarget,我可以说“这很好,我有一个完整的 4.7”?
除了克隆存储库并从中创建一个普通的 4.7 class 库供我使用之外,还有其他选择吗?
附加信息:
我克隆了 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>
这会导致多个编译错误:
Error CS0234 The type or namespace name 'Http' does not exist in the namespace 'System.Net' (are you missing an assembly reference?) WebPush(net47)
解决方案
对于正在寻找解决方案的阅读本文的任何人:经过测试,我合并了
在 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/ 此 post 将告诉您如何创建新的 nuget 包。
如您所说,.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>