Quelles sont les 43 API qui sont in.Net standard 2.0 mais pas in.Net cadre 4.6.1?

the SO question entitled .NET Standard API Reference , citant la discussion dans https://github.com/dotnet/standard/issues/133 , mentionne 43 API qui seront incluses dans la norme .net 2.0 mais qui ne sont pas prises en charge par .Net Framework 4.6.1. Cependant, je n'ai pu trouver aucune liste de ces 43 IPA sur Internet. Le plus proche que j'ai trouvé dans ma recherche est https://github.com/dotnet/standard/blob/master/docs/versions/netstandard1.5_diff.md et https://github.com/dotnet/standard/blob/master/docs/versions/netstandard1.6_diff.md , qui énumère les API introduites dans les normes 1.5 et 1.6. J'ai d'abord pensé que ma recherche était terminée, mais ensuite j'ai réalisé:

  1. il y a beaucoup plus de 43 IPA dans ces deux listes, et
  2. beaucoup d'entre eux sont supportés par .Net Cadre 4.6.1 déjà.

Est là", 1519170920" n'importe où sur Internet, une liste des 43 spécifique Api qui est inclus dans .Net Standard 2.0, mais pas inclus dans .Net Framework 4.6.1?

18
demandé sur Community 2017-04-25 06:30:54

2 réponses

en utilisant https://apisof.net et de le vérifier par rapport à chaque API énumérée dans https://github.com/dotnet/standard/blob/master/docs/versions/netstandard1.5_diff.md et https://github.com/dotnet/standard/blob/master/docs/versions/netstandard1.6_diff.md , j'ai réussi à dresser une liste des API présentes dans le Standard 1.6 de .Net mais manquantes dans le Framework 4.6.1 de .Net:

  • System.Diagnostics.Tracing.EventCounter :
    • public EventCounter(string name, EventSource eventSource) (pas dans le cadre du réseau)
    • public void WriteMetric(float value) (pas dans le .Net Framework)
  • System.Diagnostics.Tracing.EventSource :
    • public event EventHandler<EventCommandEventArgs> EventCommandExecuted (dans le cadre du réseau 4.6.2, mais pas du réseau 4.6.1)
  • System.IO.BufferedStream :
    • public int BufferSize { get; } (pas dans le .Net Framework)
    • public Stream UnderlyingStream { get; } (pas dans le .Net Framework)
  • System.Reflection.TypeInfo : tous les IPA suivants, dont aucun N'est dans le cadre de. Net

    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);
    
  • System.AppContext :
    • public static string TargetFrameworkName { get; } (pas dans le cadre du réseau)
    • public static object GetData(string name) (pas dans le .Net Framework)
  • System.Linq.Enumerable :
    • public static IEnumerable<TSource> Append<TSource>(this IEnumerable<TSource> source, TSource element) (pas dans le cadre du réseau)
    • public static IEnumerable<TSource> Prepend<TSource>(this IEnumerable<TSource> source, TSource element) (pas dans le .Net Framework)
  • System.Security.Cryptography.ECCurve : toute la structure ECCurve , et tout ce qu'elle contient (y compris la classe statique System.Security.Cryptography.ECCurve.NamedCurves ), ne sont pas Cadre. Net. En d'autres termes, tous les IPA de la liste suivante sont nouveaux dans .Net Core et ne peuvent pas être trouvés dans .Net Framework 4.6.1 (ou 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();
    }
    
  • System.Security.Cryptography.ECParameters Structure: pas dans le cadre du réseau 1519460920"
  • System.Security.Cryptography.ECPoint Structure: pas dans le cadre du réseau 1519460920"
  • System.Security.Cryptography.ECDsa :
    • public static ECDsa Create(ECCurve curve) (hors cadre. net)
    • public static ECDsa Create(ECParameters parameters) (pas dans le .Net Framework)
    • public virtual ECParameters ExportExplicitParameters(bool includePrivateParameters) (pas dans le .Net Framework)
    • public virtual ECParameters ExportParameters(bool includePrivateParameters) (pas dans le .Net Framework)
    • public virtual void GenerateKey(ECCurve curve) (pas dans le .Net Framework)
    • public virtual void ImportParameters(ECParameters parameters) (pas dans le .Net Framework)
  • System.Text.RegularExpressions.Regex :
    • protected IDictionary CapNames { get; set; } (pas dans le .Net Framework)
    • protected IDictionary Caps { get; set; } (pas dans le .Net Framework)

C'est beaucoup plus que 43 API. Je n'ai pas encore passé en revue la liste de L'API Standard 2.0 de .Net (c'est énorme ); une fois que je l'aurai fait, je modifierai cette réponse pour refléter ce que je trouve.

8
répondu rmunn 2017-04-25 04:37:22

j'ai posté un la même question dans .Net de projet Standard

Tout le crédit goto @benaadams

vous pouvez trouver les API manquantes dans: ApiCompatBaseline.net461.txt

j'ai vérifié le fichier et j'ai trouvé 52 entrées (plus de 43 !).

les 52 API manquantes sont:

     Member 'System.AppContext.GetData(System.String)' 
     Member 'System.AppContext.TargetFrameworkName.get()' 
     Type 'System.StringNormalizationExtensions' 
     Type 'System.Data.Common.DbColumn' 
     Type 'System.Data.Common.DbDataReaderExtensions' 
     Type 'System.Data.Common.IDbColumnSchemaGenerator' 
     Type 'System.Diagnostics.StackFrameExtensions' 
     Type 'System.Diagnostics.Tracing.EventCounter' 
     Member 'System.Diagnostics.Tracing.EventSource.add_EventCommandExecuted(System.EventHandler<System.Diagnostics.Tracing.EventCommandEventArgs>)' 
     Member 'System.Diagnostics.Tracing.EventSource.remove_EventCommandExecuted(System.EventHandler<System.Diagnostics.Tracing.EventCommandEventArgs>)' 
     Type 'System.Globalization.GlobalizationExtensions' 
     Member 'System.Linq.Enumerable.Append<TSource>(System.Collections.Generic.IEnumerable<TSource>, TSource)' 
     Member 'System.Linq.Enumerable.Prepend<TSource>(System.Collections.Generic.IEnumerable<TSource>, TSource)' 
     Member 'System.Linq.Expressions.Expression<TDelegate>.Compile(System.Boolean)' 
     Member 'System.Linq.Expressions.LambdaExpression.Compile(System.Boolean)' 
     Member 'System.Net.Http.HttpClientHandler.CheckCertificateRevocationList.get()' 
     Member 'System.Net.Http.HttpClientHandler.CheckCertificateRevocationList.set(System.Boolean)' 
     Member 'System.Net.Http.HttpClientHandler.ClientCertificates.get()' 
     Member 'System.Net.Http.HttpClientHandler.DefaultProxyCredentials.get()' 
     Member 'System.Net.Http.HttpClientHandler.DefaultProxyCredentials.set(System.Net.ICredentials)' 
     Member 'System.Net.Http.HttpClientHandler.MaxConnectionsPerServer.get()' 
     Member 'System.Net.Http.HttpClientHandler.MaxConnectionsPerServer.set(System.Int32)' 
     Member 'System.Net.Http.HttpClientHandler.MaxResponseHeadersLength.get()' 
     Member 'System.Net.Http.HttpClientHandler.MaxResponseHeadersLength.set(System.Int32)' 
     Member 'System.Net.Http.HttpClientHandler.Properties.get()' 
     Member 'System.Net.Http.HttpClientHandler.ServerCertificateCustomValidationCallback.get()' 
     Member 'System.Net.Http.HttpClientHandler.ServerCertificateCustomValidationCallback.set(System.Func<System.Net.Http.HttpRequestMessage, System.Security.Cryptography.X509Certificates.X509Certificate2, System.Security.Cryptography.X509Certificates.X509Chain, System.Net.Security.SslPolicyErrors, System.Boolean>)' 
     Member 'System.Net.Http.HttpClientHandler.SslProtocols.get()' 
     Member 'System.Net.Http.HttpClientHandler.SslProtocols.set(System.Security.Authentication.SslProtocols)' 
     Type 'System.Net.Sockets.SocketReceiveFromResult' 
     Type 'System.Net.Sockets.SocketReceiveMessageFromResult' 
     Type 'System.Net.Sockets.SocketTaskExtensions' 
     Type 'System.Runtime.Serialization.DataContractSerializerExtensions' 
     Type 'System.Runtime.Serialization.ISerializationSurrogateProvider' 
     Type 'System.Security.SecureStringMarshal' 
     Type 'System.Security.Cryptography.ECCurve' 
     Member 'System.Security.Cryptography.ECDsa.Create(System.Security.Cryptography.ECCurve)' 
     Member 'System.Security.Cryptography.ECDsa.Create(System.Security.Cryptography.ECParameters)' 
     Member 'System.Security.Cryptography.ECDsa.ExportExplicitParameters(System.Boolean)' 
     Member 'System.Security.Cryptography.ECDsa.ExportParameters(System.Boolean)' 
     Member 'System.Security.Cryptography.ECDsa.GenerateKey(System.Security.Cryptography.ECCurve)' 
     Member 'System.Security.Cryptography.ECDsa.ImportParameters(System.Security.Cryptography.ECParameters)' 
     Type 'System.Security.Cryptography.ECParameters' 
     Type 'System.Security.Cryptography.ECPoint' 
     Type 'System.Security.Cryptography.IncrementalHash' 
     Member 'System.Text.RegularExpressions.Regex.CapNames.get()' 
     Member 'System.Text.RegularExpressions.Regex.CapNames.set(System.Collections.IDictionary)' 
     Member 'System.Text.RegularExpressions.Regex.Caps.get()' 
     Member 'System.Text.RegularExpressions.Regex.Caps.set(System.Collections.IDictionary)' 
     Type 'System.Threading.PreAllocatedOverlapped' 
     Type 'System.Threading.ThreadPoolBoundHandle' 
     Type 'System.Xml.XPath.XDocumentExtensions' 

I vérifié la plupart de ces API et constaté qu'ils ne sont pas disponibles dans net461, mais disponibles dans netstandard2

on s'attend à ce que les IPA manquants soient mis en œuvre dans le cadre. net 7.1 . le cadre. net 4.7.1 fournit un support intégré pour la norme .NET 2.0

the .NET Framework 4.7.1 Early Access

Mise À Jour Novembre, 2017:

Avec la version finale de .net Framework 4.7.1 , tous les API manquantes dans 4.6.1 sont mis en œuvre.

Liste de mise en œuvre de l'API

maintenant .Net standard 2.0 sont intégrés directement dans le .net Framework 4.7.1 lui-même sans la nécessité d'installer .Net Standard 2.0 binaires pris en charge.

2
répondu M.Hassan 2017-11-26 15:46:38