.Net Standard 2.0中的43个API是什么,但在.Net Framework 4.6.1中却没有?

rmu*_*unn 18 .net .net-framework-version .net-core .net-standard

题为.NET标准API参考的SO问题引用了https://github.com/dotnet/standard/issues/133中的讨论,提到了将包含在.Net Standard 2.0中但不受.Net支持的43个API.框架4.6.1.但是,我无法在Internet上的任何地方找到这43个API的列表.我在搜索中最接近的是https://github.com/dotnet/standard/blob/master/docs/versions/netstandard1.5_diff.md和https://github.com/dotnet/standard/blob/ master/docs/versions/netstandard1.6_diff.md,列出了.Net Standard 1.5和1.6中引入的API.起初我以为我的搜索结束了,但后来我意识到:

  1. 这两个列表中有超过43个API,并且
  2. 其中许多已经得到.Net Framework 4.6.1的支持.

在那里,随时随地在互联网上,在43层名单具体包括在标准的.Net 2.0,但不包含在.Net框架4.6.1的API?

rmu*_*unn 9

使用https://apisof.net并针对https://github.com/dotnet/standard/blob/master/docs/versions/netstandard1.5_diff.md和https://github.com中列出的每个API进行检查/dotnet/standard/blob/master/docs/versions/netstandard1.6_diff.md,我已经设法整理了.Net Standard 1.6中存在但在.Net Framework 4.6.1中缺失的API列表:

  • System.Diagnostics.Tracing.EventCounter:
    • public EventCounter(string name, EventSource eventSource) (不在.Net Framework中)
    • public void WriteMetric(float value) (不在.Net Framework中)
  • System.Diagnostics.Tracing.EventSource:
    • public event EventHandler<EventCommandEventArgs> EventCommandExecuted (在.Net Framework 4.6.2中,但不在4.6.1中)
  • System.IO.BufferedStream:
    • public int BufferSize { get; } (不在.Net Framework中)
    • public Stream UnderlyingStream { get; } (不在.Net Framework中)
  • System.Reflection.TypeInfo:以下所有API,其中没有一个在.Net Framework中

    public virtual bool IsCOMObject { get; }
    public override MemberTypes MemberType { get; }
    public virtual StructLayoutAttribute StructLayoutAttribute { get; }
    public ConstructorInfo TypeInitializer { get; }
    public virtual Type UnderlyingSystemType { get; }
    public virtual Type[] FindInterfaces(TypeFilter filter, object filterCriteria);
    public virtual MemberInfo[] FindMembers(MemberTypes memberType, BindingFlags bindingAttr, MemberFilter filter, object filterCriteria);
    public ConstructorInfo GetConstructor(Type[] types);
    public ConstructorInfo[] GetConstructors();
    public virtual ConstructorInfo[] GetConstructors(BindingFlags bindingAttr);
    public virtual MemberInfo[] GetDefaultMembers();
    public virtual string GetEnumName(object value);
    public virtual string[] GetEnumNames();
    public virtual Type GetEnumUnderlyingType();
    public virtual Array GetEnumValues();
    public EventInfo GetEvent(string name);
    public virtual EventInfo GetEvent(string name, BindingFlags bindingAttr);
    public virtual EventInfo[] GetEvents();
    public virtual EventInfo[] GetEvents(BindingFlags bindingAttr);
    public FieldInfo GetField(string name);
    public virtual FieldInfo GetField(string name, BindingFlags bindingAttr);
    public FieldInfo[] GetFields();
    public virtual FieldInfo[] GetFields(BindingFlags bindingAttr);
    public virtual Type[] GetGenericArguments();
    public Type GetInterface(string name);
    public virtual Type GetInterface(string name, bool ignoreCase);
    public virtual Type[] GetInterfaces();
    public MemberInfo[] GetMember(string name);
    public virtual MemberInfo[] GetMember(string name, BindingFlags bindingAttr);
    public virtual MemberInfo[] GetMember(string name, MemberTypes type, BindingFlags bindingAttr);
    public MemberInfo[] GetMembers();
    public virtual MemberInfo[] GetMembers(BindingFlags bindingAttr);
    public MethodInfo GetMethod(string name);
    public MethodInfo GetMethod(string name, BindingFlags bindingAttr);
    public MethodInfo GetMethod(string name, Type[] types);
    public MethodInfo GetMethod(string name, Type[] types, ParameterModifier[] modifiers);
    public MethodInfo[] GetMethods();
    public virtual MethodInfo[] GetMethods(BindingFlags bindingAttr);
    public Type GetNestedType(string name);
    public virtual Type GetNestedType(string name, BindingFlags bindingAttr);
    public Type[] GetNestedTypes();
    public virtual Type[] GetNestedTypes(BindingFlags bindingAttr);
    public PropertyInfo[] GetProperties();
    public virtual PropertyInfo[] GetProperties(BindingFlags bindingAttr);
    public PropertyInfo GetProperty(string name);
    public PropertyInfo GetProperty(string name, BindingFlags bindingAttr);
    public PropertyInfo GetProperty(string name, Type returnType);
    public PropertyInfo GetProperty(string name, Type returnType, Type[] types);
    public PropertyInfo GetProperty(string name, Type returnType, Type[] types, ParameterModifier[] modifiers);
    public PropertyInfo GetProperty(string name, Type[] types);
    public virtual bool IsAssignableFrom(Type c);
    public virtual bool IsEnumDefined(object value);
    public virtual bool IsEquivalentTo(Type other);
    public virtual bool IsInstanceOfType(object o);
    
    Run Code Online (Sandbox Code Playgroud)
  • System.AppContext:
    • public static string TargetFrameworkName { get; } (不在.Net Framework中)
    • public static object GetData(string name) (不在.Net Framework中)
  • System.Linq.Enumerable:
    • public static IEnumerable<TSource> Append<TSource>(this IEnumerable<TSource> source, TSource element) (不在.Net Framework中)
    • public static IEnumerable<TSource> Prepend<TSource>(this IEnumerable<TSource> source, TSource element) (不在.Net Framework中)
  • System.Security.Cryptography.ECCurve:整个ECCurve结构,以及它中的所有内容(包括System.Security.Cryptography.ECCurve.NamedCurves静态类)都不在.Net Framework中.换句话说,以下列表中的所有API都是.Net Core中的新增功能,并且无法在.Net Framework 4.6.1(或4.6.2)中找到:

    public struct ECCurve {
        public enum ECCurveType {
            Characteristic2 = 4,
            Implicit = 0,
            Named = 5,
            PrimeMontgomery = 3,
            PrimeShortWeierstrass = 1,
            PrimeTwistedEdwards = 2,
        }
        public static class NamedCurves {
            public static ECCurve brainpoolP160r1 { get; }
            public static ECCurve brainpoolP160t1 { get; }
            public static ECCurve brainpoolP192r1 { get; }
            public static ECCurve brainpoolP192t1 { get; }
            public static ECCurve brainpoolP224r1 { get; }
            public static ECCurve brainpoolP224t1 { get; }
            public static ECCurve brainpoolP256r1 { get; }
            public static ECCurve brainpoolP256t1 { get; }
            public static ECCurve brainpoolP320r1 { get; }
            public static ECCurve brainpoolP320t1 { get; }
            public static ECCurve brainpoolP384r1 { get; }
            public static ECCurve brainpoolP384t1 { get; }
            public static ECCurve brainpoolP512r1 { get; }
            public static ECCurve brainpoolP512t1 { get; }
            public static ECCurve nistP256 { get; }
            public static ECCurve nistP384 { get; }
            public static ECCurve nistP521 { get; }
        }
        public byte[] A;
        public byte[] B;
        public byte[] Cofactor;
        public ECCurve.ECCurveType CurveType;
        public ECPoint G;
        public Nullable<HashAlgorithmName> Hash;
        public byte[] Order;
        public byte[] Polynomial;
        public byte[] Prime;
        public byte[] Seed;
        public bool IsCharacteristic2 { get; }
        public bool IsExplicit { get; }
        public bool IsNamed { get; }
        public bool IsPrime { get; }
        public Oid Oid { get; }
        public static ECCurve CreateFromFriendlyName(string oidFriendlyName);
        public static ECCurve CreateFromOid(Oid curveOid);
        public static ECCurve CreateFromValue(string oidValue);
        public void Validate();
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • System.Security.Cryptography.ECParameters struct:不在.Net Framework中
  • System.Security.Cryptography.ECPoint struct:不在.Net Framework中
  • System.Security.Cryptography.ECDsa:
    • public static ECDsa Create(ECCurve curve) (不在.Net Framework中)
    • public static ECDsa Create(ECParameters parameters) (不在.Net Framework中)
    • public virtual ECParameters ExportExplicitParameters(bool includePrivateParameters) (不在.Net Framework中)
    • public virtual ECParameters ExportParameters(bool includePrivateParameters) (不在.Net Framework中)
    • public virtual void GenerateKey(ECCurve curve) (不在.Net Framework中)
    • public virtual void ImportParameters(ECParameters parameters) (不在.Net Framework中)
  • System.Text.RegularExpressions.Regex:
    • protected IDictionary CapNames { get; set; } (不在.Net Framework中)
    • protected IDictionary Caps { get; set; } (不在.Net Framework中)

这比43个API要多得多.我还没有通过.Net Standard 2.0 API列表(它很大); 一旦我这样做,我将编辑这个答案以反映我发现的内容.

  • 问题是关于.NETStandard 2.0,而不是1.6.前段时间我看到了开发人员的一个注释,不依赖于1.5和1.6,因为它不会与2.0兼容 (3认同)