2017-04-25 4 views
16

Die SO-Frage mit dem Titel .NET Standard API Reference, zitiert die Diskussion in https://github.com/dotnet/standard/issues/133, erwähnt 43 APIs, die in den .Net-Standard 2.0 enthalten sind, aber nicht von .Net Framework 4.6.1 unterstützt werden. Allerdings konnte ich nirgendwo im Internet eine Liste dieser 43 APIs finden. Der nächste, den ich bei meiner Suche gefunden habe, ist https://github.com/dotnet/standard/blob/master/docs/versions/netstandard1.5_diff.md und https://github.com/dotnet/standard/blob/master/docs/versions/netstandard1.6_diff.md, die die APIs auflisten, die in .Net Standard 1.5 und 1.6 eingeführt wurden. Zuerst dachte ich, meine Suche vorbei war, aber dann merkte ich:Welche 43 APIs befinden sich im .Net-Standard 2.0, aber nicht im .Net Framework 4.6.1?

  1. Es gibt weit mehr als 43 APIs in diesen beiden Listen und
  2. Viele von ihnen unterstützt werden von .Net Framework 4.6.1 bereits.

Gibt es überall im Internet, eine Liste der 43 spezifischen APIs, die in .NET Standard 2.0 enthalten sind, aber nicht in .Net Framework 4.6.1 enthalten?

+0

Ben Adams verlinkt den aktuell letzten Kommentar in der GitHub-Ausgabe zu einer Liste von 52 APIs, die in 4.6.1 nicht implementiert sind, ist das nicht wonach Sie suchen? –

+0

Sie meinen [diese Liste] (https://github.com/dotnet/standard/blob/master/netstandard/src/ApiCompatBaseline.net461.txt)? Das sieht sehr nützlich aus, danke! Da ich jedoch http://apisof.net/ durchsucht habe, um meine eigene Frage zu beantworten, habe ich einige APIs gefunden, die dort nicht aufgeführt sind. (Zum Beispiel mehrere neue APIs in System.Reflection.TypeInfo, die nicht in 4.6.1 enthalten sind, aber nicht in der Liste erscheinen, die Ben Adams verlinkt hat). Also werde ich weiterhin die Antwort schreiben, die ich gerade schreibe, und dann sehen, welche Überschneidungen es mit Ben Adams 'Liste hat. – rmunn

Antwort

7

Durch die Verwendung von https://apisof.net und es gegen jede API aufgeführt in https://github.com/dotnet/standard/blob/master/docs/versions/netstandard1.5_diff.md und https://github.com/dotnet/standard/blob/master/docs/versions/netstandard1.6_diff.md Überprüfung, habe ich es geschafft, zusammen eine Liste der APIs in .NET Standard-1.6 aber fehlt in .Net Framework setzen 4.6.1:

  • System.Diagnostics.Tracing.EventCounter:
    • public EventCounter(string name, EventSource eventSource) (nicht in .Net Framework)
    • public void WriteMetric(float value) (nicht in .Net Framework)
  • System.Diagnostics.Tracing.EventSource:
    • public event EventHandler<EventCommandEventArgs> EventCommandExecuted (in .Net Framework 4.6.2, aber nicht 4.6.1)
  • System.IO.BufferedStream:
    • public int BufferSize { get; } (nicht in .Net Framework)
    • public Stream UnderlyingStream { get; } (nicht in .Net Framework)
  • System.Reflection.TypeInfo: alle folgenden APIs, von denen keine in .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); 
    
  • System.AppContext:
    • public static string TargetFrameworkName { get; } (nicht in NET Framework)
    • public static object GetData(string name) (nicht in NET Rahmen)
  • System.Linq.Enumerable:
    • public static IEnumerable<TSource> Append<TSource>(this IEnumerable<TSource> source, TSource element) (nicht in .Net Framework)
    • public static IEnumerable<TSource> Prepend<TSource>(this IEnumerable<TSource> source, TSource element) (nicht in.Net Framework)
  • System.Security.Cryptography.ECCurve: ganz ECCurve struct, und alles in ihm (einschließlich der System.Security.Cryptography.ECCurve.NamedCurves statischen Klasse), ist nicht in .NET Framework. Mit anderen Worten, alle APIs in der folgenden Liste sind neu in .NET-Core und nicht in .Net Framework 4.6.1 (oder 4.6.2) zu finden ist:

    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 struct: nicht in .Net Rahmen
  • System.Security.Cryptography.ECPoint Struktur: nicht im .Net Framework
  • System.Security.Cryptography.ECDsa:
    • public static ECDsa Create(ECCurve curve) (nicht in .Net Framework)
    • public static ECDsa Create(ECParameters parameters) (nicht in .Net framewo rk)
    • public virtual ECParameters ExportExplicitParameters(bool includePrivateParameters) (nicht in Net Framework)
    • public virtual ECParameters ExportParameters(bool includePrivateParameters) (nicht in Net Framework)
    • public virtual void GenerateKey(ECCurve curve) (nicht in Net Framework)
    • public virtual void ImportParameters(ECParameters parameters) (nicht in NET Framework)
  • System.Text.RegularExpressions.Regex:
    • protected IDictionary CapNames { get; set; } (nicht in .Net Framework)
    • protected IDictionary Caps { get; set; } (nicht in .Net Framework)

, die viel mehr als 43 APIs ist. Ich bin noch nicht durch die .Net Standard 2.0 API-Liste gegangen (es ist riesige); Sobald ich das tue, werde ich diese Antwort bearbeiten, um zu reflektieren, was ich finde.

+0

SignedCms und CmsSigner aus Kryptografie pkcs – VMAtm

+3

Die Frage gestellt über .NETStandard 2.0, nicht 1.6. Ich habe vor einer Weile eine Notiz von den Entwicklern gesehen, dass sie sich nicht auf 1.5 und 1.6 verlassen sollten, weil sie nicht mit 2.0 –

+0

kompatibel sein wird. Ja, ich weiß, dass ich nach dem .Net Standard 2.0 gefragt habe. Ich hatte bisher nur die Zeit, die Änderungen in 1.5 und 1.6 durchzugehen; Die Veränderungen in 2.0 werden mich länger brauchen, um meine eigene Frage zu beantworten. Deshalb hatte ich gehofft, dass jemand mich auf eine bereits existierende Liste verweisen könnte. – rmunn

2

gab ich eine similar question in .Net Standard project

Alle Kredit goto @benaadams

Sie die fehlenden apis in finden: (! Mehr als 43) ApiCompatBaseline.net461.txt

ich die Datei überprüft und 52 Eintrag finden.

Die 52 fehlenden APIs sind:

 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' 

ich die meisten dieser API überprüft und festgestellt, dass sie in net461 nicht verfügbar sind, aber in netstandard2

Die fehlenden APIs werden voraussichtlich umgesetzt werden .Net Framework 7,1 .NET Framework 4.7.1 provides built-in support for .NET Standard 2.0

the .NET Framework 4.7.1 Early Access

-Update Nov, 2017:

Mit der endgültigen Version .NET Framework 4.7.1 sind alle fehlenden APIs in 4.6.1 implementiert.

List of implemented API

Jetzt .NET 2.0 Standard-rechts in die .NET Framework integriert werden 4.7.1 selbst ohne die Notwendigkeit Net Standard 2.0 unterstützt Binärdateien zu installieren.

Verwandte Themen