# .NET Portability Report

## Summary

Assembly | .NET Core 5.0 | .NET Core (Cross-platform) 5.0 | .NET Framework 4.6.1 | .NET Native 1.0 | ASP.NET 5 1.0
--- | --- | --- | --- | --- | ---
Orleans | 93.47% | 93.42% | 100% | 89.4% | 93.47%

### Orleans

Target type | .NET Core 5.0 | .NET Core (Cross-platform) 5.0 | .NET Framework 4.6.1 | .NET Native 1.0 | ASP.NET 5 1.0 | Recommended changes
--- | --- | --- | --- | --- | --- | ---
System.Net.NetworkInformation.UnicastIPAddressInformationCollection |  |  |  |  |  |
GetEnumerator |  |  |  |  |  |
System.AppDomain |  |  |  |  |  | Use object with finalizer stored in static variable, or use app-model specific unload notifications (e.g. Application.Suspending event for modern apps)
add_DomainUnload(System.EventHandler) |  |  |  |  |  | Use object with finalizer stored in static variable, or use app-model specific unload notifications (e.g. Application.Suspending event for modern apps)
GetAssemblies |  |  |  |  |  | Remove usage
remove_ReflectionOnlyAssemblyResolve(System.ResolveEventHandler) |  |  |  |  |  |
add_AssemblyLoad(System.AssemblyLoadEventHandler) |  |  |  |  |  |
add_AssemblyResolve(System.ResolveEventHandler) |  |  |  |  |  | Remove usage
ApplyPolicy(System.String) |  |  |  |  |  |
get_CurrentDomain |  |  |  |  |  | Remove usage
ReflectionOnlyGetAssemblies |  |  |  |  |  |
add_ReflectionOnlyAssemblyResolve(System.ResolveEventHandler) |  |  |  |  |  |
System.Management.ManagementObjectSearcher |  |  |  |  |  |
#ctor(System.String) |  |  |  |  |  |
Get |  |  |  |  |  |
System.Type |  |  |  |  |  | .GetTypeInfo().IsGenericTypeDefinition
get_IsGenericTypeDefinition |  |  |  |  |  | .GetTypeInfo().IsGenericTypeDefinition
get_IsGenericType |  |  |  |  |  | .GetTypeInfo().IsGenericType
get_IsVisible |  |  |  |  |  | .GetTypeInfo().IsVisible
get_IsValueType |  |  |  |  |  | .GetTypeInfo().IsValueType
GetMethod(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type[],System.Reflection.ParameterModifier[]) |  |  |  |  |  | Use GetMethod(string, Type[]) to search for public methods by name and parameter type or filter the results of GetMethods(BindingFlags) using LINQ for other queries.
get_IsNestedFamily |  |  |  |  |  | .GetTypeInfo().IsNestedFamily
get_IsNotPublic |  |  |  |  |  | .GetTypeInfo().IsNotPublic
GetConstructor(System.Reflection.BindingFlags,System.Reflection.Binder,System.Type[],System.Reflection.ParameterModifier[]) |  |  |  |  |  | Use GetConstructor(Type[]) to search for public constructors by parameter type or filter the results of GetConstructors(BindingFlags) using LINQ for other queries.
get_IsClass |  |  |  |  |  | .GetTypeInfo().IsClass
get_IsAbstract |  |  |  |  |  | .GetTypeInfo().IsAbstract
get_IsPrimitive |  |  |  |  |  | .GetTypeInfo().IsPrimitive
get_Assembly |  |  |  |  |  | .GetTypeInfo().Assembly
get_IsInterface |  |  |  |  |  | .GetTypeInfo().IsInterface
get_IsEnum |  |  |  |  |  | .GetTypeInfo().IsEnum
GetInterfaceMap(System.Type) |  |  |  |  |  |
ReflectionOnlyGetType(System.String,System.Boolean,System.Boolean) |  |  |  |  |  |
get_IsNestedPrivate |  |  |  |  |  | .GetTypeInfo().IsNestedPrivate
get_BaseType |  |  |  |  |  | .GetTypeInfo().BaseType
get_IsSerializable |  |  |  |  |  | .GetTypeInfo().IsSerializable
GetTypeCode(System.Type) |  |  |  |  |  | Use Type or RuntimeTypeHandle instead.
get_IsNestedPublic |  |  |  |  |  | .GetTypeInfo().IsNestedPublic
get_UnderlyingSystemType |  |  |  |  |  |
get_Module |  |  |  |  |  | Use System.Reflection.AssemblyExtensions.GetModules(), iterate over returned collection.
System.Reflection.Assembly |  |  |  |  |  |
GetReferencedAssemblies |  |  |  |  |  |
GetType(System.String,System.Boolean) |  |  |  |  |  | Use Assembly.GetType(string), throw if you receive null return value.
get_Location |  |  |  |  |  | Remove usage
GetExecutingAssembly |  |  |  |  |  | typeof(CurrentType).GetTypeInfo().Assembly
ReflectionOnlyLoadFrom(System.String) |  |  |  |  |  |
ReflectionOnlyLoad(System.String) |  |  |  |  |  |
GetCustomAttributes(System.Boolean) |  |  |  |  |  |
LoadFrom(System.String) |  |  |  |  |  | Use AssemblyLoadContext
GetCallingAssembly |  |  |  |  |  |
get_ReflectionOnly |  |  |  |  |  |
GetEntryAssembly |  |  |  |  |  |
System.Security.Cryptography.RandomNumberGenerator |  |  |  |  |  |
GetBytes(System.Byte[]) |  |  |  |  |  |
Create |  |  |  |  |  |
System.Environment |  |  |  |  |  | Do not use. Choose action based feature availability, not OS / Platform
get_OSVersion |  |  |  |  |  | Do not use. Choose action based feature availability, not OS / Platform
get_Version |  |  |  |  |  | Do not use. Choose action based feature availability, not OS / Platform
GetFolderPath(System.Environment.SpecialFolder,System.Environment.SpecialFolderOption) |  |  |  |  |  |
get_UserName |  |  |  |  |  |
System.AssemblyLoadEventArgs |  |  |  |  |  |
get_LoadedAssembly |  |  |  |  |  |
System.Activator |  |  |  |  |  |
CreateInstance(System.Type,System.Boolean) |  |  |  |  |  |
System.ResolveEventArgs |  |  |  |  |  | Use AssemblyLoadContext
get_Name |  |  |  |  |  | Use AssemblyLoadContext
get_RequestingAssembly |  |  |  |  |  |
System.Diagnostics.CorrelationManager |  |  |  |  |  |
set_ActivityId(System.Guid) |  |  |  |  |  |
get_ActivityId |  |  |  |  |  |
System.Net.Sockets.Socket |  |  |  |  |  |
Connect(System.Net.EndPoint) |  |  |  |  |  |
Send(System.Collections.Generic.IList{System.ArraySegment{System.Byte}}) |  |  |  |  |  |
Disconnect(System.Boolean) |  |  |  |  |  |
Receive(System.Collections.Generic.IList{System.ArraySegment{System.Byte}}) |  |  |  |  |  |
SetSocketOption(System.Net.Sockets.SocketOptionLevel,System.Net.Sockets.SocketOptionName,System.Boolean) |  |  |  |  |  |
EndReceive(System.IAsyncResult) |  |  |  |  |  |
BeginReceive(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.AsyncCallback,System.Object) |  |  |  |  |  |
set_LingerState(System.Net.Sockets.LingerOption) |  |  |  |  |  |
Send(System.Byte[]) |  |  |  |  |  |
System.Net.Dns |  |  |  |  |  |
GetHostAddressesAsync(System.String) |  |  |  |  |  |
GetHostName |  |  |  |  |  |
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter |  |  |  |  |  |
Serialize(System.IO.Stream,System.Object) |  |  |  |  |  |
Deserialize(System.IO.Stream) |  |  |  |  |  |
#ctor |  |  |  |  |  |
set_Binder(System.Runtime.Serialization.SerializationBinder) |  |  |  |  |  |
System.Diagnostics.Trace |  |  |  |  |  |
get_CorrelationManager |  |  |  |  |  |
TraceError(System.String,System.Object[]) |  |  |  |  |  |
TraceWarning(System.String) |  |  |  |  |  |
get_Listeners |  |  |  |  |  |
TraceError(System.String) |  |  |  |  |  |
TraceInformation(System.String) |  |  |  |  |  |
Flush |  |  |  |  |  |
WriteLine(System.String) |  |  |  |  |  |
System.Management.ManagementObjectCollection.ManagementObjectEnumerator |  |  |  |  |  |
MoveNext |  |  |  |  |  |
get_Current |  |  |  |  |  |
System.Runtime.Remoting.Messaging.CallContext |  |  |  |  |  |
FreeNamedDataSlot(System.String) |  |  |  |  |  |
LogicalSetData(System.String,System.Object) |  |  |  |  |  |
LogicalGetData(System.String) |  |  |  |  |  |
System.Threading.Thread |  |  |  |  |  |
get_CurrentThread |  |  |  |  |  |
set_Name(System.String) |  |  |  |  |  |
Start(System.Object) |  |  |  |  |  |
Sleep(System.TimeSpan) |  |  |  |  |  |
get_ManagedThreadId |  |  |  |  |  |
ResetAbort |  |  |  |  |  | This is only reliable in SQL Server. Elsewhere, don't use it.
Abort(System.Object) |  |  |  |  |  | This is only reliable in SQL Server. Elsewhere, don't use it.
set_IsBackground(System.Boolean) |  |  |  |  |  |
#ctor(System.Threading.ParameterizedThreadStart) |  |  |  |  |  |
System.Diagnostics.FileVersionInfo |  |  |  |  |  | Currently there is no workaround, but we are working on it. Please check back.
GetVersionInfo(System.String) |  |  |  |  |  | Currently there is no workaround, but we are working on it. Please check back.
get_ProductVersion |  |  |  |  |  |
get_FileVersion |  |  |  |  |  | Currently there is no workaround, but we are working on it. Please check back.
System.Threading.WaitCallback |  |  |  |  |  |
#ctor(System.Object,System.IntPtr) |  |  |  |  |  |
System.Diagnostics.PerformanceCounterCategory |  |  |  |  |  |
GetInstanceNames |  |  |  |  |  |
#ctor(System.String) |  |  |  |  |  |
GetCounters(System.String) |  |  |  |  |  |
System.Net.Sockets.SocketOptionName |  |  |  |  |  |
System.Reflection.PropertyInfo |  |  |  |  |  | Use PropertyInfo.SetMethod property
GetSetMethod |  |  |  |  |  | Use PropertyInfo.SetMethod property
System.Management.PropertyDataCollection |  |  |  |  |  |
get_Item(System.String) |  |  |  |  |  |
System.Net.NetworkInformation.NetworkInterface |  |  |  |  |  |
GetAllNetworkInterfaces |  |  |  |  |  |
GetIPProperties |  |  |  |  |  |
get_Name |  |  |  |  |  |
get_LoopbackInterfaceIndex |  |  |  |  |  |
get_OperationalStatus |  |  |  |  |  |
System.AssemblyLoadEventHandler |  |  |  |  |  |
#ctor(System.Object,System.IntPtr) |  |  |  |  |  |
System.Diagnostics.Process |  |  |  |  |  | Use System.Diagnostics.Process.SafeHandle
get_Handle |  |  |  |  |  | Use System.Diagnostics.Process.SafeHandle
GetCurrentProcess |  |  |  |  |  |
get_ProcessName |  |  |  |  |  |
get_Id |  |  |  |  |  |
System.Security.Cryptography.SHA256 |  |  |  |  |  |
Create |  |  |  |  |  |
System.Threading.ThreadPool |  |  |  |  |  | Change code to not depend on the size of the ThreadPool for functionality. Portable code needs to be able to run correctly on multiple different ThreadPool implementations, not all of which support this method.
GetMinThreads(System.Int32@,System.Int32@) |  |  |  |  |  | Change code to not depend on the size of the ThreadPool for functionality. Portable code needs to be able to run correctly on multiple different ThreadPool implementations, not all of which support this method.
GetAvailableThreads(System.Int32@,System.Int32@) |  |  |  |  |  |
GetMaxThreads(System.Int32@,System.Int32@) |  |  |  |  |  | Change code to not depend on the size of the ThreadPool for functionality. Portable code needs to be able to run correctly on multiple different ThreadPool implementations, not all of which support this method.
QueueUserWorkItem(System.Threading.WaitCallback,System.Object) |  |  |  |  |  |
System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute |  |  |  |  |  |
#ctor |  |  |  |  |  |
System.Net.NetworkInformation.IPAddressInformation |  |  |  |  |  |
get_Address |  |  |  |  |  |
System.Runtime.Serialization.SerializationInfo |  |  |  |  |  | either 1) Delete Serialization info from exceptions (since this can't be remoted) or 2) Use a different serialization technology if not for exceptions.
GetValue(System.String,System.Type) |  |  |  |  |  | either 1) Delete Serialization info from exceptions (since this can't be remoted) or 2) Use a different serialization technology if not for exceptions.
GetString(System.String) |  |  |  |  |  | Remove serialization constructors on custom Exception types
AddValue(System.String,System.Object) |  |  |  |  |  | Remove serialization constructors on custom Exception types
AddValue(System.String,System.Object,System.Type) |  |  |  |  |  | either 1) Delete Serialization info from exceptions (since this can't be remoted) or 2) Use a different serialization technology if not for exceptions.
GetBoolean(System.String) |  |  |  |  |  | either 1) Delete Serialization info from exceptions (since this can't be remoted) or 2) Use a different serialization technology if not for exceptions.
System.Diagnostics.TraceListenerCollection |  |  |  |  |  |
get_Count |  |  |  |  |  |
GetEnumerator |  |  |  |  |  |
Add(System.Diagnostics.TraceListener) |  |  |  |  |  |
System.ResolveEventHandler |  |  |  |  |  | Use AssemblyLoadContext
#ctor(System.Object,System.IntPtr) |  |  |  |  |  | Use AssemblyLoadContext
System.Diagnostics.DefaultTraceListener |  |  |  |  |  |
#ctor |  |  |  |  |  |
System.MarshalByRefObject |  |  |  |  |  | Remove usage: Remoting is no longer available
#ctor |  |  |  |  |  | Remove usage
System.Reflection.CustomAttributeData |  |  |  |  |  |
GetCustomAttributes(System.Reflection.MemberInfo) |  |  |  |  |  |
System.Security.Cryptography.HashAlgorithm |  |  |  |  |  |
ComputeHash(System.Byte[]) |  |  |  |  |  |
Dispose |  |  |  |  |  |
System.Threading.ParameterizedThreadStart |  |  |  |  |  |
#ctor(System.Object,System.IntPtr) |  |  |  |  |  |
System.Runtime.Serialization.SerializationBinder |  |  |  |  |  |
#ctor |  |  |  |  |  |
System.Management.ManagementObjectCollection |  |  |  |  |  |
GetEnumerator |  |  |  |  |  |
System.Console |  |  |  |  |  |
ResetColor |  |  |  |  |  |
set_Title(System.String) |  |  |  |  |  |
WriteLine(System.String,System.Object,System.Object) |  |  |  |  |  |
set_ForegroundColor(System.ConsoleColor) |  |  |  |  |  | Currently there is no workaround, but we are working on it. Please check back.
WriteLine(System.String,System.Object[]) |  |  |  |  |  |
WriteLine(System.String) |  |  |  |  |  |
WriteLine(System.String,System.Object) |  |  |  |  |  |
System.Environment.SpecialFolder |  |  |  |  |  |
System.Environment.SpecialFolderOption |  |  |  |  |  |
System.OperatingSystem |  |  |  |  |  | Do not use. Couple behavior to feature availability, not OS version or Platform.
System.Net.NetworkInformation.IPInterfaceProperties |  |  |  |  |  |
get_UnicastAddresses |  |  |  |  |  |
System.Exception |  |  |  |  |  | Remove. Getting rid of other usage of SerializationInfo will remove the need for this method.
GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) |  |  |  |  |  | Remove. Getting rid of other usage of SerializationInfo will remove the need for this method.
GetType |  |  |  |  |  | False positive (GetType() from Object is sufficient)
#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) |  |  |  |  |  | Remove. Ctor overload taking SerializationInfo is not applicable in new surface area
System.Diagnostics.PerformanceCounter |  |  |  |  |  |
get_RawValue |  |  |  |  |  |
get_CounterName |  |  |  |  |  |
#ctor(System.String,System.String,System.String,System.Boolean) |  |  |  |  |  |
#ctor(System.String,System.String,System.Boolean) |  |  |  |  |  |
NextValue |  |  |  |  |  |
System.Net.Sockets.LingerOption |  |  |  |  |  |
#ctor(System.Boolean,System.Int32) |  |  |  |  |  |
System.Net.Sockets.SocketOptionLevel |  |  |  |  |  |
System.Net.NetworkInformation.OperationalStatus |  |  |  |  |  |
System.Net.Sockets.SocketFlags |  |  |  |  |  |
System.Diagnostics.StackTrace |  |  |  |  |  | Currently there is no workaround, but we are working on it. Please check back.
#ctor(System.Boolean) |  |  |  |  |  |
System.Runtime.Serialization.ISerializable |  |  |  |  |  |
System.Reflection.ParameterModifier |  |  |  |  |  | Use an overload that does not take a ParameterModifier array.
System.Reflection.AssemblyName |  |  |  |  |  |
GetAssemblyName(System.String) |  |  |  |  |  |
System.Reflection.Binder |  |  |  |  |  | Use an overload that does not take a Binder.
System.Management.PropertyData |  |  |  |  |  |
get_Value |  |  |  |  |  |
System.Delegate |  |  |  |  |  | Use System.Reflection.RuntimeReflectionExtensions.GetMethodInfo
get_Method |  |  |  |  |  | Use System.Reflection.RuntimeReflectionExtensions.GetMethodInfo
System.Net.NetworkInformation.UnicastIPAddressInformation |  |  |  |  |  |
System.Management.ManagementBaseObject |  |  |  |  |  |
get_Properties |  |  |  |  |  |
System.Threading.ThreadState |  |  |  |  |  |
System.Diagnostics.ConsoleTraceListener |  |  |  |  |  | useErrorStream ? new TextWriterTraceListener(Console.Error) : new TextWriterTraceListener(Console.Out)
System.Runtime.Serialization.FormatterServices |  |  |  |  |  |
GetUninitializedObject(System.Type) |  |  |  |  |  |
System.Xml.XmlNode |  |  |  |  |  |
SelectNodes(System.String,System.Xml.XmlNamespaceManager) |  |  |  |  |  |
System.ConsoleColor |  |  |  |  |  | Currently there is no workaround, but we are working on it. Please check back.
System.Diagnostics.TraceListener |  |  |  |  |  |
System.Diagnostics.DebuggableAttribute |  |  |  |  |  |
get_IsJITTrackingEnabled |  |  |  |  |  |
System.Threading.ThreadAbortException |  |  |  |  |  | Do not use: exception cannot be caught since it is not thrown by framework, never throw this type. Thread.Abort is only reliable in SQL Server. Elsewhere, don't use it.
System.Management.ManagementObject |  |  |  |  |  |

Back to summary