我正在制作一个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)
但是我唯一改变的是将其从package2的csproj中删除:
<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
中,我应该已经引用了(并且它已经依赖的另一个项目也应该如此。
答案 0 :(得分:1)
从4.7.1版开始可以使用此属性:
请注意,如果您选择较旧的.NET版本,则会看到类似以下的消息:
The requested page is not available for .NET Framework 4.7.
答案 1 :(得分:1)
对我来说,解决方案是下载“ System.Net.Http”的最新版本。 您可以通过NuGet程序包管理器找到它。
在撰写本文时,v4.3.4是最新版本,其中包含ClientCertificates方法。
答案 2 :(得分:0)
我已经换掉了NuGet程序包的程序集引用:
<ItemGroup Condition="'$(TargetFramework)'=='net47' OR '$(TargetFramework)'=='net461'">
<PackageReference Include="System.Net.Http" Version="4.3.4" />
</ItemGroup>
请确保这是错误的事情™,因为.NET Framework中的程序集引用应该足够了,在我安装软件包的任何地方,我可能都会遇到许多相互矛盾的引用问题,但是这是我现在能想到的最好的方法。