Nuget包的目标是.NET Framework和.NET Standard 2.0,但标准项目使用错误的依赖项

时间:2017-11-03 14:34:02

标签: c# .net nuget .net-core nuget-package

我已经构建了一个nuget package,它通过TargetFrameworks同时针对.NET Standard 2.0和.NET Framework 4.6。

<TargetFrameworks>netstandard2.0;net46</TargetFrameworks>

nuget配置为defined in the csproj

.NET 4.6项目使用此软件包没有问题,但.NET标准版/核心版应用程序失败,因为它尝试使用net46版本(作为依赖项的清单无法解析)。显而易见的是哪个版本被使用,因为我可以在针对net46构建时测试标记为内部的类,但是当针对netstandard2.0进行构建时该公开,并且该类将无法从标准项目中解析。

这是如何引入包裹的:

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

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Kerberos.NET" Version="1.5.821.1" />
  </ItemGroup>

</Project>

测试代码很简单:

var validator = new Kerberos.NET.TicketReplayValidator();

它会抱怨:CS0122 'TicketReplayValidator' is inaccessible due to its protection level WebApplication1(netcoreapp2.0)

该类定义为:

#if NET46
    internal class TicketReplayValidator : ITicketReplayValidator
    // snip...
#else
    public class TicketReplayValidator : ITicketReplayValidator
    // snip...
#endif

所以问题是:我能做些什么来让这个nuget包的消费者自动使用正确的构建?通过修改包,还是在消费项目中指定某种目标?

0 个答案:

没有答案