diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj
index 66791366f3..d348b85b1c 100644
--- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj
+++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj
@@ -18,8 +18,8 @@
$(OutputPath)\$(TargetFramework)\Microsoft.Data.SqlClient.xml
true
Core $(BaseProduct)
- true
- $(NoWarn);IL2026;IL2057;IL2067;IL2070;IL2072;IL2075;IL2077;IL2080;IL2093;IL2111
+ true
+ $(NoWarn);IL2026;IL2057;IL2072;IL2075
portable
diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlDataReader.cs b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlDataReader.cs
index 965803f993..1cc9acd2f2 100644
--- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlDataReader.cs
+++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlDataReader.cs
@@ -9,6 +9,7 @@
using System.Data.Common;
using System.Data.SqlTypes;
using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.IO;
using System.Reflection;
@@ -438,6 +439,10 @@ internal void Bind(TdsParserStateObject stateObj)
_defaultLCID = _parser.DefaultLCID;
}
+#if NET6_0_OR_GREATER
+ [SuppressMessage("ReflectionAnalysis", "IL2111",
+ Justification = "System.Type.TypeInitializer would not be used in dataType and providerSpecificDataType columns.")]
+#endif
internal DataTable BuildSchemaTable()
{
_SqlMetaDataSet md = this.MetaData;
@@ -1232,6 +1237,11 @@ override public IEnumerator GetEnumerator()
}
///
+#if NET6_0_OR_GREATER
+ [SuppressMessage("ReflectionAnalysis", "IL2093:MismatchOnMethodReturnValueBetweenOverrides",
+ Justification = "Annotations for DbDataReader was not shipped in net6.0")]
+ [return: DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.PublicFields)]
+#endif
override public Type GetFieldType(int i)
{
SqlStatistics statistics = null;
@@ -1248,6 +1258,9 @@ override public Type GetFieldType(int i)
}
}
+#if NET6_0_OR_GREATER
+ [return: DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.PublicFields)]
+#endif
private Type GetFieldTypeInternal(_SqlMetaData metaData)
{
Type fieldType = null;
@@ -1340,6 +1353,9 @@ override public string GetName(int i)
}
///
+#if NET7_0_OR_GREATER
+ [return: DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.PublicFields)]
+#endif
override public Type GetProviderSpecificFieldType(int i)
{
SqlStatistics statistics = null;
@@ -1356,6 +1372,9 @@ override public Type GetProviderSpecificFieldType(int i)
}
}
+#if NET6_0_OR_GREATER
+ [return: DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.PublicFields)]
+#endif
private Type GetProviderSpecificFieldTypeInternal(_SqlMetaData metaData)
{
Type providerSpecificFieldType = null;
diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParserHelperClasses.cs b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParserHelperClasses.cs
index 85f4588c8c..be0f437b5b 100644
--- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParserHelperClasses.cs
+++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParserHelperClasses.cs
@@ -10,6 +10,7 @@
using System.Data.Common;
using System.Data.SqlTypes;
using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.Security;
using System.Security.Authentication;
@@ -564,6 +565,9 @@ public void CopyFrom(SqlMetaDataXmlSchemaCollection original)
sealed internal class SqlMetaDataUdt
{
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
+#endif
internal Type Type;
internal string DatabaseName;
internal string SchemaName;
diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Reliability/SqlConfigurableRetryLogicLoader.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Reliability/SqlConfigurableRetryLogicLoader.cs
index eccf21d4d0..a4d197d5e2 100644
--- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Reliability/SqlConfigurableRetryLogicLoader.cs
+++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Reliability/SqlConfigurableRetryLogicLoader.cs
@@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
using System.Reflection;
using System.Text.RegularExpressions;
@@ -154,7 +155,11 @@ private static SqlRetryLogicBaseProvider ResolveRetryLogicProvider(string config
return null;
}
- private static object CreateInstance(Type type, string retryMethodName, SqlRetryLogicOption option)
+ private static object CreateInstance(
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor | DynamicallyAccessedMemberTypes.PublicMethods)]
+#endif
+ Type type, string retryMethodName, SqlRetryLogicOption option)
{
string methodName = nameof(CreateInstance);
SqlClientEventSource.Log.TryTraceEvent(" Entry point.", TypeName, methodName);
diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Server/SmiMetaData.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Server/SmiMetaData.cs
index 9e40ae6870..d69ab6448c 100644
--- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Server/SmiMetaData.cs
+++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Server/SmiMetaData.cs
@@ -7,6 +7,7 @@
using System.Data;
using System.Data.SqlTypes;
using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
using System.Globalization;
namespace Microsoft.Data.SqlClient.Server
@@ -228,6 +229,9 @@ internal SmiMetaData(
byte scale,
long localeId,
SqlCompareOptions compareOptions,
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]
+#endif
Type userDefinedType
)
: this(
@@ -253,6 +257,9 @@ internal SmiMetaData(
byte scale,
long localeId,
SqlCompareOptions compareOptions,
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]
+#endif
Type userDefinedType,
bool isMultiValued,
IList fieldTypes,
@@ -282,6 +289,9 @@ internal SmiMetaData(
byte scale,
long localeId,
SqlCompareOptions compareOptions,
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]
+#endif
Type userDefinedType,
string udtAssemblyQualifiedName,
bool isMultiValued,
@@ -759,6 +769,9 @@ internal SmiExtendedMetaData(
byte scale,
long localeId,
SqlCompareOptions compareOptions,
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]
+#endif
Type userDefinedType,
string name,
string typeSpecificNamePart1,
@@ -792,6 +805,9 @@ internal SmiExtendedMetaData(
byte scale,
long localeId,
SqlCompareOptions compareOptions,
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]
+#endif
Type userDefinedType,
bool isMultiValued,
IList fieldMetaData,
@@ -829,6 +845,9 @@ internal SmiExtendedMetaData(
byte scale,
long localeId,
SqlCompareOptions compareOptions,
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]
+#endif
Type userDefinedType,
string udtAssemblyQualifiedName,
bool isMultiValued,
@@ -903,6 +922,9 @@ internal SmiParameterMetaData(
byte scale,
long localeId,
SqlCompareOptions compareOptions,
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]
+#endif
Type userDefinedType,
bool isMultiValued,
IList fieldMetaData,
@@ -942,6 +964,9 @@ internal SmiParameterMetaData(
byte scale,
long localeId,
SqlCompareOptions compareOptions,
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]
+#endif
Type userDefinedType,
string udtAssemblyQualifiedName,
bool isMultiValued,
@@ -1020,6 +1045,9 @@ internal SmiStorageMetaData(
byte scale,
long localeId,
SqlCompareOptions compareOptions,
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]
+#endif
Type userDefinedType,
string name,
string typeSpecificNamePart1,
@@ -1069,6 +1097,9 @@ internal SmiStorageMetaData(
byte scale,
long localeId,
SqlCompareOptions compareOptions,
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]
+#endif
Type userDefinedType,
bool isMultiValued,
IList fieldMetaData,
@@ -1123,6 +1154,9 @@ internal SmiStorageMetaData(
byte scale,
long localeId,
SqlCompareOptions compareOptions,
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]
+#endif
Type userDefinedType,
string udtAssemblyQualifiedName,
bool isMultiValued,
@@ -1233,6 +1267,9 @@ internal SmiQueryMetaData(
byte scale,
long localeId,
SqlCompareOptions compareOptions,
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]
+#endif
Type userDefinedType,
string name,
string typeSpecificNamePart1,
@@ -1290,6 +1327,9 @@ internal SmiQueryMetaData(
byte scale,
long localeId,
SqlCompareOptions compareOptions,
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]
+#endif
Type userDefinedType,
bool isMultiValued,
IList fieldMetaData,
@@ -1352,6 +1392,9 @@ internal SmiQueryMetaData(
byte scale,
long localeId,
SqlCompareOptions compareOptions,
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]
+#endif
Type userDefinedType,
string udtAssemblyQualifiedName,
bool isMultiValued,
diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Server/SqlDataRecord.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Server/SqlDataRecord.cs
index 314807d52e..0afb0f7b7a 100644
--- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Server/SqlDataRecord.cs
+++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Server/SqlDataRecord.cs
@@ -5,6 +5,7 @@
using System;
using System.Data;
using System.Data.SqlTypes;
+using System.Diagnostics.CodeAnalysis;
using Microsoft.Data.Common;
using Microsoft.Data.ProviderBase;
@@ -51,6 +52,9 @@ public virtual string GetDataTypeName(int ordinal)
}
///
+#if NET6_0_OR_GREATER
+ [return: DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.PublicFields)]
+#endif
public virtual Type GetFieldType(int ordinal) => GetFieldTypeFrameworkSpecific(ordinal);
///
diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Server/SqlDataRecord.netcore.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Server/SqlDataRecord.netcore.cs
index 4c25f693d5..7f57f7c016 100644
--- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Server/SqlDataRecord.netcore.cs
+++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Server/SqlDataRecord.netcore.cs
@@ -5,13 +5,17 @@
using System;
using System.Data;
using System.Data.SqlTypes;
+using System.Diagnostics.CodeAnalysis;
using Microsoft.Data.Common;
namespace Microsoft.Data.SqlClient.Server
{
///
public partial class SqlDataRecord : IDataRecord
- {
+ {
+#if NET6_0_OR_GREATER
+ [return: DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.PublicFields)]
+#endif
private Type GetFieldTypeFrameworkSpecific(int ordinal)
=> MetaType.GetMetaTypeFromSqlDbType(GetSqlMetaData(ordinal).SqlDbType, false).ClassType;
diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Server/SqlMetaData.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Server/SqlMetaData.cs
index a8d372aa2e..9cc490f0ce 100644
--- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Server/SqlMetaData.cs
+++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Server/SqlMetaData.cs
@@ -7,6 +7,7 @@
using System.Globalization;
using System.Data.SqlTypes;
using Microsoft.Data.Common;
+using System.Diagnostics.CodeAnalysis;
namespace Microsoft.Data.SqlClient.Server
{
@@ -237,14 +238,22 @@ int sortOrdinal
///
// udt ctor without tvp extended properties
- public SqlMetaData(string name, SqlDbType dbType, Type userDefinedType)
+ public SqlMetaData(string name, SqlDbType dbType,
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]
+#endif
+ Type userDefinedType)
{
Construct(name, dbType, userDefinedType, null, DefaultUseServerDefault, DefaultIsUniqueKey, DefaultColumnSortOrder, DefaultSortOrdinal);
}
///
// udt ctor without tvp extended properties
- public SqlMetaData(string name, SqlDbType dbType, Type userDefinedType, string serverTypeName)
+ public SqlMetaData(string name, SqlDbType dbType,
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]
+#endif
+ Type userDefinedType, string serverTypeName)
{
Construct(name, dbType, userDefinedType, serverTypeName, DefaultUseServerDefault, DefaultIsUniqueKey, DefaultColumnSortOrder, DefaultSortOrdinal);
}
@@ -253,7 +262,10 @@ public SqlMetaData(string name, SqlDbType dbType, Type userDefinedType, string s
// udt ctor
public SqlMetaData(
string name,
- SqlDbType dbType,
+ SqlDbType dbType,
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]
+#endif
Type userDefinedType,
string serverTypeName,
bool useServerDefault,
@@ -345,6 +357,9 @@ public SqlMetaData(
byte scale,
long locale,
SqlCompareOptions compareOptions,
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]
+#endif
Type userDefinedType
) : this(
name,
@@ -373,6 +388,9 @@ public SqlMetaData(
byte scale,
long localeId,
SqlCompareOptions compareOptions,
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]
+#endif
Type userDefinedType,
bool useServerDefault,
bool isUniqueKey,
@@ -874,7 +892,10 @@ int sortOrdinal
// Construction for Udt type
private void Construct(
string name,
- SqlDbType dbType,
+ SqlDbType dbType,
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]
+#endif
Type userDefinedType,
string serverTypeName,
bool useServerDefault,
diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Server/SqlNormalizer.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Server/SqlNormalizer.cs
index e7dd37a955..e5afc34b40 100644
--- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Server/SqlNormalizer.cs
+++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Server/SqlNormalizer.cs
@@ -5,6 +5,7 @@
using System;
using System.Data.SqlTypes;
using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
@@ -47,12 +48,20 @@ internal sealed class BinaryOrderedUdtNormalizer : Normalizer
#if NETFRAMEWORK
[System.Security.Permissions.ReflectionPermission(System.Security.Permissions.SecurityAction.Assert, MemberAccess = true)]
#endif
- private FieldInfo[] GetFields(Type t)
+ private FieldInfo[] GetFields(
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields)]
+#endif
+ Type t)
{
return t.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
}
- internal BinaryOrderedUdtNormalizer(Type t, bool isTopLevelUdt)
+ internal BinaryOrderedUdtNormalizer(
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties)]
+#endif
+ Type t, bool isTopLevelUdt)
{
_skipNormalize = false;
if (_skipNormalize)
@@ -121,11 +130,19 @@ internal BinaryOrderedUdtNormalizer(Type t, bool isTopLevelUdt)
internal void NormalizeTopObject(object udt, Stream s) => Normalize(null, udt, s);
// Denormalize a top-level udt and return it
- internal object DeNormalizeTopObject(Type t, Stream s) => DeNormalizeInternal(t, s);
+ internal object DeNormalizeTopObject(
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]
+#endif
+ Type t, Stream s) => DeNormalizeInternal(t, s);
// Prevent inlining so that reflection calls are not moved to caller that may be in a different assembly that may have a different grant set.
[MethodImpl(MethodImplOptions.NoInlining)]
- private object DeNormalizeInternal(Type t, Stream s)
+ private object DeNormalizeInternal(
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]
+#endif
+ Type t, Stream s)
{
object result = null;
//if nullable and not the top object, read the null marker
@@ -210,7 +227,11 @@ internal abstract class Normalizer
{
protected bool _skipNormalize;
- internal static Normalizer GetNormalizer(Type t)
+ internal static Normalizer GetNormalizer(
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties)]
+#endif
+ Type t)
{
Normalizer n = null;
if (t.IsPrimitive)
diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Server/SqlSer.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Server/SqlSer.cs
index 1f9a4181f0..8e958b73b4 100644
--- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Server/SqlSer.cs
+++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Server/SqlSer.cs
@@ -4,6 +4,7 @@
using System;
using System.Collections.Concurrent;
+using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Runtime.CompilerServices;
using Microsoft.Data.Common;
@@ -22,7 +23,11 @@ private SerializationHelperSql9() { }
// in bytes.
// Prevent inlining so that reflection calls are not moved to caller that may be in a different assembly that may have a different grant set.
[MethodImpl(MethodImplOptions.NoInlining)]
- internal static int SizeInBytes(Type t) => SizeInBytes(Activator.CreateInstance(t));
+ internal static int SizeInBytes(
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]
+#endif
+ Type t) => SizeInBytes(Activator.CreateInstance(t));
// Get the m_size of the serialized stream for this type, in bytes.
internal static int SizeInBytes(object instance)
@@ -41,7 +46,11 @@ internal static void Serialize(Stream s, object instance)
GetSerializer(instance.GetType()).Serialize(s, instance);
}
- internal static object Deserialize(Stream s, Type resultType) => GetSerializer(resultType).Deserialize(s);
+ internal static object Deserialize(Stream s,
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor | DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties)]
+#endif
+ Type resultType) => GetSerializer(resultType).Deserialize(s);
private static Format GetFormat(Type t) => GetUdtAttribute(t).Format;
@@ -53,7 +62,11 @@ internal static void Serialize(Stream s, object instance)
// issues when accessing cache entries from multiple threads.
private static ConcurrentDictionary s_types2Serializers;
- private static Serializer GetSerializer(Type t)
+ private static Serializer GetSerializer(
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor | DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties)]
+#endif
+ Type t)
{
if (s_types2Serializers == null)
{
@@ -70,7 +83,11 @@ private static Serializer GetSerializer(Type t)
return s;
}
- internal static int GetUdtMaxLength(Type t)
+ internal static int GetUdtMaxLength(
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]
+#endif
+ Type t)
{
SqlUdtInfo udtInfo = SqlUdtInfo.GetFromType(t);
@@ -106,7 +123,11 @@ internal static SqlUserDefinedTypeAttribute GetUdtAttribute(Type t)
}
// Create a new serializer for the given type.
- private static Serializer GetNewSerializer(Type t)
+ private static Serializer GetNewSerializer(
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor | DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties)]
+#endif
+ Type t)
{
SqlUserDefinedTypeAttribute udtAttr = GetUdtAttribute(t);
@@ -126,19 +147,30 @@ private static Serializer GetNewSerializer(Type t)
// The base serializer class.
internal abstract class Serializer
{
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]
+#endif
protected Type _type;
public abstract object Deserialize(Stream s);
public abstract void Serialize(Stream s, object o);
- protected Serializer(Type t) => _type = t;
+ protected Serializer(
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]
+#endif
+ Type t) => _type = t;
}
internal sealed class NormalizedSerializer : Serializer
{
private readonly BinaryOrderedUdtNormalizer _normalizer;
- internal NormalizedSerializer(Type t) : base(t)
+ internal NormalizedSerializer(
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor | DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties)]
+#endif
+ Type t) : base(t)
{
_ = SerializationHelperSql9.GetUdtAttribute(t);
_normalizer = new BinaryOrderedUdtNormalizer(t, true);
@@ -151,7 +183,11 @@ internal NormalizedSerializer(Type t) : base(t)
internal sealed class BinarySerializeSerializer : Serializer
{
- internal BinarySerializeSerializer(Type t) : base(t)
+ internal BinarySerializeSerializer(
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]
+#endif
+ Type t) : base(t)
{
}
diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlEnums.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlEnums.cs
index efd0083a9f..3fbd9b112a 100644
--- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlEnums.cs
+++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlEnums.cs
@@ -11,6 +11,7 @@
#endif
using System.Data.SqlTypes;
using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.IO;
using System.Xml;
@@ -21,7 +22,13 @@ namespace Microsoft.Data.SqlClient
{
internal sealed class MetaType
{
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.PublicFields)]
+#endif
internal readonly Type ClassType; // com+ type
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.PublicFields)]
+#endif
internal readonly Type SqlType;
internal readonly int FixedLength; // fixed length size in bytes (-1 for variable)
@@ -55,7 +62,15 @@ internal sealed class MetaType
internal readonly bool Is90Supported;
internal readonly bool Is100Supported;
- public MetaType(byte precision, byte scale, int fixedLength, bool isFixed, bool isLong, bool isPlp, byte tdsType, byte nullableTdsType, string typeName, Type classType, Type sqlType, SqlDbType sqldbType, DbType dbType, byte propBytes)
+ public MetaType(byte precision, byte scale, int fixedLength, bool isFixed, bool isLong, bool isPlp, byte tdsType, byte nullableTdsType, string typeName,
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.PublicFields)]
+#endif
+ Type classType,
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.PublicFields)]
+#endif
+ Type sqlType, SqlDbType sqldbType, DbType dbType, byte propBytes)
{
Precision = precision;
Scale = scale;