簡體   English   中英

net47 中的 System.Net.Http

[英]System.Net.Http in net47

我在 Windows 上有一個普通的類庫,使用 .NET 4.7

我想包括web-push-csharp

該軟件包列出了 2 個可接受的依賴項(Newtonsoft Json 和 BouncyCastle)。 它還想安裝Microsoft.Net.Http 我不知道為什么。 我不需要它。 我的目標框架帶有一個非常好的System.Net.Http供參考。 由於該 Microsoft 包有一個其他依賴項列表,這些依賴項與我鏈中更高的其他依賴項發生沖突,這是一個巨大的不便。 為什么我要包含一個我不需要的包?

現在我認為這應該不是問題,然后克隆了 Web 推送包存儲庫,將我的目標框架放入其中……這是正確的,如果沒有外部*.Net.Http引用,您無法為目標框架net47進行編譯。 然而,我的Create New Project .NET 4.7 項目已經附帶了這樣的參考,而根本沒有觸及 nuget。

將所有包文件復制到新的 ClassLibrary1 中,僅適用於 NewtonsoftJson 和 BouncyCastle。

我在這里缺少什么? 為什么 .NET Framework 從 4.5 到 4.6 失去了它的 System.Net.Http? 為什么沒有可用的 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)


解決方案

對於任何閱讀本文以尋求解決方案的人:經過測試,我將接受的答案合並到一個 分支的分支中,並向維護者發送了一個拉取請求,以便它可以在原始包中使用。

正如您所說,.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 包。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM