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;