«HttpClientHandler» не содержит определения «ClientCertificates» в net461 и net47? - PullRequest
0 голосов
/ 17 января 2019

Я делаю пакет NuGet, и мой csproj выглядит так:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup Label="Globals">
    <SccProjectName>SAK</SccProjectName>
    <SccProvider>SAK</SccProvider>
    <SccAuxPath>SAK</SccAuxPath>
    <SccLocalPath>SAK</SccLocalPath>
  </PropertyGroup>

  <PropertyGroup>
    <TargetFrameworks>netstandard2.0;netstandard1.6;net461;net47</TargetFrameworks>
    ...
    <PackageId>Package2</PackageId>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\Package1\Package1.csproj" />
  </ItemGroup>

  <ItemGroup Condition="'$(TargetFramework)'=='net461' OR '$(TargetFramework)'=='net47'">
    <Reference Include="System.Net.Http" />
  </ItemGroup>

</Project>

Проект, на который он ссылается, выглядит так:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup Label="Globals">
    <SccProjectName>SAK</SccProjectName>
    <SccProvider>SAK</SccProvider>
    <SccAuxPath>SAK</SccAuxPath>
    <SccLocalPath>SAK</SccLocalPath>
  </PropertyGroup>

  <PropertyGroup>
    <TargetFrameworks>netstandard2.0;netstandard1.6;net461;net47</TargetFrameworks>
    <PackageId>Package1</PackageId>
    ...
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)'=='Debug'">
    <NoWarn>1701;1702; CS1591</NoWarn>
  </PropertyGroup>

  <ItemGroup Condition="'$(TargetFramework)'=='netstandard1.6' OR '$(TargetFramework)'=='net461'">
      <PackageReference Include="System.ValueTuple" Version="4.5.0" />
  </ItemGroup>

  <ItemGroup Condition="'$(TargetFramework)'=='net461' OR '$(TargetFramework)'=='net47'">
    <Reference Include="System.Net.Http" />
  </ItemGroup>

</Project>

А внутри проекта Package2 есть следующая строка:

webRequestHandler.ClientCertificates.Add(certificate);

Но он не встраивается в net461 или net47, говоря:

'HttpClientHandler' does not contain a definition for 
'ClientCertificates' and no accessible extension method 
'ClientCertificates' accepting a first argument of type
'HttpClientHandler' could be found (are you missing a using
 directive or an assembly reference?) 

Package2(net461),
Package2(net47)

Но единственное, что я изменил, это убрал это из csproj для package2:

  <ItemGroup Condition="'$(TargetFramework)'=='netstandard2.0'">
    <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="2.0.0" />
  </ItemGroup>

  <ItemGroup Condition="'$(TargetFramework)'=='netstandard1.6' OR '$(TargetFramework)'=='net461' OR '$(TargetFramework)'=='net47'">
    <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="1.1.2" />
  </ItemGroup>

Может кто-нибудь помочь мне понять, как это исправить? Я на самом деле не хочу включать весь этот пакет NuGet только для того, чтобы исправить эту зависимость. Я думаю, что я просто пропускаю сборку, но насколько я знаю, она должна быть в System.Net.Http, на которую я уже должен ссылаться (и так если другой проект уже зависит от него).

1 Ответ

0 голосов
/ 17 января 2019

Я поменял ссылку на сборку для пакета NuGet:

  <ItemGroup Condition="'$(TargetFramework)'=='net47' OR '$(TargetFramework)'=='net461'">
    <PackageReference Include="System.Net.Http" Version="4.3.4" />
  </ItemGroup>

почти уверен, что неправильно делать ™, так как ссылки на сборку в .NET Framework должно быть достаточно, и я, вероятно, столкнусь с множеством конфликтующих проблем с ссылками при установке моего пакета, но это это лучшее, что я могу придумать прямо сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...