.NET Core和.NET Framework 4.6的Nuget包兼容性问题

3
我创建了一个支持.net framework和.net core的NuGet包。 但其中一个类只有在.net core中才能使用。 我不需要那个类在.net framework中可用。
是否有任何属性或方法可用,可以在构建.net framework的包时排除该类?
这是我的框架目标方式。
<TargetFrameworks>netcoreapp2.0;netstandard2.0;net45;net46</TargetFrameworks>

顺便问一下,您是否确实需要分别针对net45和net46进行定位?同样适用于netcoreapp2.0和netstandard2.0?如果您针对net45进行定位,则该软件包将与net46一起使用-同样,如果您针对netstandard2.0进行定位,则该软件包将与netcoreapp2.0一起使用。通常只有在想要使用net46或netcoreapp2.0特定功能时才需要针对所有这些内容进行定位。 - Jon Skeet
现在删除截图可能是值得的,因为它已经不再相关了。 - Jon Skeet
1个回答

6

只需使用每个目标自动提供的条件编译符号即可。例如:

// Put this at the start of the file (if you want some of the file to still be built)
// or class (if you just want to exclude a single class). You could even
// exclude just a single method, or part of a method.
#if NETCOREAPP2_0 || NETSTANDARD2_0

public class NetFrameworkOnlyClass
{
}

// And this at the end
#endif

或者,您可以像这样 排除,而不是 包括

#if !NET45 && !NET46

参见跨平台库教程,了解各个环境中定义的条件编译符号列表。(我认为使用版本中立的"NETCORE"、"NETSTANDARD"和"NETFULL"符号或类似符号会很好,但我不认为它们存在。如果您想要,可以在项目文件中指定它们。)


Daisy,按照您的方法添加后,请查看我问题截图中的附件图片。仍然出现构建错误。 - Amna
@Diana:你把它放在了using指令之后,这意味着如果这些命名空间不可用,它将失败。将其移动到文件开头右侧,假设您不想在netstandard/netcore文件中添加任何内容。 - Jon Skeet
@Diana:尽管错误信息表明您可能只是没有正确的配置和配置扩展依赖项。您是否有对Microsoft.Configuration.Extensions的包引用? - Jon Skeet
谢谢Daisy。它奏效了。我将您的答案标记为一个好的解决方案 :) - Amna
@DaisyShipton,Microsoft.Extensions.Configuration不适用于net45和net46,它依赖于netstand2.0。 - Feiyu Zhou
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接