我正在维护一个针对主要.NET和Mono平台的可移植类库.核心PCL使用配置文件147(.NET 4.03
Windows Store Silverlight 5 Windows Phone 8),但由于某些技术原因,NuGet包由三个版本组成:核心PCL(配置文件147),.NET 4和Silverlight 5.实际上我可以更改核心PCL的配置文件并用.NET 4.5替换.NET 4.03并删除Silverlight 5.如果我的lib将从其他PCL中使用,我不这样做 – 因此我想使用最宽的PCL.
所以我的第一个问题是这个假设是否正确.例如.即使我有单独的SL5实现,选择具有SL5支持的PCL配置文件使其对PCL更友好,例如另一个针对SL5的PCL将能够引用我的lib.
如果这个假设是正确的,我的下一个问题是这是否值得.现在Xamarin开发中有流行的PCL配置文件选择,它们都不是针对.NET 4.而推荐的是配置文件78,它不针对Silverlight.我没有找到不选择这些配置文件的后果的详细描述,所以我无法通过保留配置文件147来弄清楚我失去了什么.如果有已知问题而且不支持功能,我当然会转向更现代的个人资料,但正如我之前写的,如果可能的话,我希望更广泛的平台设置.
最佳答案 这是广度和功能之间的权衡.如果使用Silverlight定位配置文件支持您想要或需要的所有API,那么请坚持使用它.你别无选择,争取广度.排除测试成本,没有必要限制自己或消费者.
但是,当选择使用Silverlight或其他平台的配置文件时,您无法使用特定功能(并且该功能尚未在带外提供,例如通过Microsoft BCL Portability Pack),这是您需要做出艰难决定的地方.此页面上的支持功能表Cross-Platform Development with the Portable Class Library可以通过针对特定平台显示您丢失/获得的功能来帮助您做出此决定.
在内部查看数据,我可以看到“Profile78”(.NET Framework 4.5,Windows 8,Phone 8,Xamarin.Android,Xamarin.iOS)压倒了最受欢迎的目标(约45%的便携式项目以此为目标).这并不奇怪.它以大量现代平台为目标,具有合理的大功能支持.这个配置文件所针对的这些平台也支持我们认为的“现代表面区域”,因此有更多的共享API表面与配置文件,这些平台支持我们的传统表面区域(Silverlight,.NET Framework 4).这两个表面区域之间的差异在此详细介绍:What is .NET Portable Subset (Legacy)?.