我已经构建了一个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包的消费者自动使用正确的构建?通过修改包,还是在消费项目中指定某种目标?