Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/corefx.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Documentation/project-docs/issue-guide.md16
-rw-r--r--Packaging.props1
-rw-r--r--README.md5
-rw-r--r--Tools-Override/CloudTest.targets2
-rw-r--r--Tools-Override/FrameworkTargeting.targets32
-rw-r--r--Tools-Override/resolveContract.targets11
-rw-r--r--Tools-Override/tests.targets41
-rw-r--r--buildpipeline/pipeline.json15
-rw-r--r--buildvertical.targets18
-rw-r--r--dependencies.props40
-rw-r--r--dir.props7
-rw-r--r--dir.targets7
-rw-r--r--external/ILLink/ILLink.depproj16
-rw-r--r--external/ILLink/project.json.template14
-rw-r--r--external/dir.proj1
-rw-r--r--external/harvestPackages/project.json.template1
-rw-r--r--external/ilasm/project.json.template6
-rw-r--r--external/netstandard/netstandard.depproj4
-rw-r--r--external/netstandard/netstandard1.x/project.json.template2
-rw-r--r--external/netstandard/project.json.template2
-rw-r--r--external/runtime/NETNative/project.json.template2
-rw-r--r--external/runtime/project.json.template8
-rw-r--r--external/test-runtime/optional.json17
-rw-r--r--illink.targets147
-rwxr-xr-xinit-tools.sh4
-rw-r--r--perf.groovy3
-rw-r--r--pkg/Microsoft.NETCore.Targets/Microsoft.NETCore.Targets.builds8
-rw-r--r--pkg/Microsoft.NETCore.Targets/Microsoft.NETCore.Targets.pkgproj35
-rw-r--r--pkg/Microsoft.NETCore.Targets/runtime.json92
-rw-r--r--pkg/Microsoft.Private.CoreFx.NETCoreApp/Microsoft.Private.CoreFx.NETCoreApp.pkgproj12
-rw-r--r--pkg/Microsoft.Private.CoreFx.NETCoreApp/Microsoft.Private.CoreFx.NETCoreApp.props1
-rw-r--r--pkg/Microsoft.Private.CoreFx.UAP/Microsoft.Private.CoreFx.UAP.pkgproj4
-rw-r--r--pkg/Microsoft.Private.PackageBaseline/packageIndex.json3
-rw-r--r--src/Common/src/Interop/Windows/Crypt32/Interop.CryptProtectMemory.cs22
-rw-r--r--src/Common/src/Interop/Windows/NtDll/Interop.ZeroMemory.cs19
-rw-r--r--src/Common/src/Interop/Windows/advapi32/Interop.GetUserNameW.cs17
-rw-r--r--src/Common/src/Interop/Windows/advapi32/Interop.RegEnumKeyEx.cs2
-rw-r--r--src/Common/src/Interop/Windows/advapi32/Interop.RegEnumValue.cs2
-rw-r--r--src/Common/src/Interop/Windows/kernel32/Interop.GetCurrentThreadId.cs15
-rw-r--r--src/Common/src/Interop/Windows/kernel32/Interop.GetFileInformationByHandleEx.cs26
-rw-r--r--src/Common/src/Interop/Windows/kernel32/Interop.GetFileType_SafePipeHandle.cs15
-rw-r--r--src/Common/src/Interop/Windows/kernel32/Interop.GetLongPathNameW.cs18
-rw-r--r--src/Common/src/Interop/Windows/kernel32/Interop.GetTickCount64.cs14
-rw-r--r--src/Common/src/Interop/Windows/oleaut32/Interop.SysAllocStringLen.cs16
-rw-r--r--src/Common/src/Interop/Windows/oleaut32/Interop.SysStringLen.cs22
-rw-r--r--src/Common/src/Interop/Windows/user32/Interop.MessageBox.cs40
-rw-r--r--src/Common/src/Microsoft/Win32/SafeHandles/CriticalHandleMinusOneIsInvalid.cs24
-rw-r--r--src/Common/src/Microsoft/Win32/SafeHandles/SafeHandleMinusOneIsInvalid.cs25
-rw-r--r--src/Common/src/System/Drawing/ColorTable.cs18
-rw-r--r--src/Common/src/System/Security/Cryptography/RSASecurityTransforms.cs7
-rw-r--r--src/Common/src/System/Xml/ExceptionType.cs12
-rw-r--r--src/Common/src/System/Xml/Schema/XmlUntypedConverter.cs380
-rw-r--r--src/Common/src/System/Xml/XPathNavigatorEx.cs80
-rw-r--r--src/Common/src/System/Xml/XmlAttributeCollectionEx.cs23
-rw-r--r--src/Common/src/System/Xml/XmlConst.cs55
-rw-r--r--src/Common/src/System/Xml/XmlConvertEx.cs274
-rw-r--r--src/Common/src/System/Xml/XmlNameHelper.cs27
-rw-r--r--src/Common/src/System/Xml/XmlParsingHelper.cs38
-rw-r--r--src/Common/src/System/Xml/XmlRawWriterBase64Encoder.cs21
-rw-r--r--src/Common/src/System/Xml/XmlReaderExtensions.cs39
-rw-r--r--src/Common/src/System/Xml/XmlStandalone.cs14
-rw-r--r--src/Common/src/System/Xml/XmlTextWriterBase64Encoder.cs21
-rw-r--r--src/Common/src/System/Xml/XmlWriterExtensions.cs149
-rw-r--r--src/Common/tests/System/NonRuntimeType.cs49
-rw-r--r--src/Common/tests/System/PlatformDetection.cs2
-rw-r--r--src/Common/tests/System/Security/Cryptography/AlgorithmImplementations/RSA/ImportExport.cs21
-rw-r--r--src/Microsoft.CSharp/src/Microsoft.CSharp.csproj8
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Errors/UserStringBuilder.cs21
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/ExpressionTreeCallRewriter.cs4
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/RuntimeBinder.cs14
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/COperators.cs136
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Conversion.cs40
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Conversions.cs8
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/EXPRExtensions.cs10
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/EXPRFLAG.cs28
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExplicitConversion.cs16
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExprFactory.cs380
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExpressionBinder.cs202
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExpressionKind.cs224
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/GroupToArgsBinder.cs2
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ITypeOrNamespace.cs19
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ImplicitConversion.cs7
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/MemberLookup.cs5
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/MethodTypeInferrer.cs18
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Operators.cs295
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/PredefinedMembers.cs2
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/AssemblyQualifiedNamespaceSymbol.cs20
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/Symbol.cs3
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/SymbolLoader.cs4
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ArrayIndex.cs7
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ArrayInitialization.cs7
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ArrayLength.cs7
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Assignment.cs7
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/BinaryOperator.cs16
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Block.cs5
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/BoundAnonymousFunction.cs8
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Call.cs7
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Cast.cs9
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Class.cs6
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/CompoundOperator.cs14
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Concatenate.cs7
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ConditionalOperator.cs7
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Constant.cs7
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/EXPR.cs9
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Event.cs7
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ExprOperator.cs23
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ExprWithType.cs17
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Field.cs7
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/FieldInfo.cs5
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/HoistedLocal.cs6
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/List.cs5
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/LocalVariable.cs15
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/MemberGroup.cs7
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/MethodInfo.cs9
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/MethodReference.cs7
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/NamedArgumentSpecification.cs7
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Property.cs7
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/PropertyInfo.cs7
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Return.cs5
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Statement.cs5
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Temporary.cs6
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/This.cs4
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/TypeArguments.cs5
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/TypeOf.cs9
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/TypeOrNamespace.cs16
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/UnaryOperator.cs16
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/UnboundAnonymousFunction.cs6
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/UserDefinedConversion.cs7
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/UserDefinedLogicalOperator.cs7
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Visitors/ExprVisitorBase.cs650
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Visitors/ExpressionTreeRewriter.cs168
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ZeroInitialize.cs7
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/AggregateType.cs23
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/ArrayType.cs2
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/PredefinedTypes.cs5
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/Type.cs27
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/TypeFactory.cs12
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/TypeManager.cs32
-rw-r--r--src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/SymbolTable.cs10
-rw-r--r--src/Microsoft.CSharp/tests/ArrayHandling.cs55
-rw-r--r--src/Microsoft.CSharp/tests/Microsoft.CSharp.Tests.csproj3
-rw-r--r--src/Microsoft.Win32.Registry.AccessControl/src/Microsoft/Win32/RegistryAclExtensions.cs16
-rw-r--r--src/Microsoft.Win32.Registry.AccessControl/tests/RegistryAclExtensionsTests.cs9
-rw-r--r--src/Microsoft.Win32.Registry/src/Microsoft.Win32.Registry.csproj2
-rw-r--r--src/Microsoft.Win32.Registry/src/Microsoft/Win32/RegistryKey.Windows.cs144
-rw-r--r--src/Microsoft.Win32.Registry/tests/RegistryKey/RegistryKey_GetValueNames.cs3
-rw-r--r--src/Microsoft.XmlSerializer.Generator/Microsoft.XmlSerializer.Generator.sln34
-rw-r--r--src/Microsoft.XmlSerializer.Generator/src/Microsoft.XmlSerializer.Generator.csproj6
-rw-r--r--src/Microsoft.XmlSerializer.Generator/src/Sgen.cs294
-rw-r--r--src/Native/Unix/System.Native/pal_console.cpp17
-rw-r--r--src/Native/Unix/System.Native/pal_interfaceaddresses.cpp4
-rw-r--r--src/Native/Unix/System.Native/pal_networking.cpp4
-rw-r--r--src/Native/Unix/System.Net.Http.Native/pal_versioninfo.cpp49
-rw-r--r--src/Native/Unix/System.Security.Cryptography.Native/pal_ssl.cpp20
-rw-r--r--src/Native/pkg/dir.props1
-rw-r--r--src/System.AppContext/src/ApiCompatBaseline.uapaot.txt3
-rw-r--r--src/System.ComponentModel.TypeConverter/src/System.ComponentModel.TypeConverter.csproj1
-rw-r--r--src/System.ComponentModel.TypeConverter/src/System/Drawing/ColorConverter.cs14
-rw-r--r--src/System.ComponentModel.TypeConverter/tests/Configurations.props1
-rw-r--r--src/System.ComponentModel.TypeConverter/tests/Drawing/ColorConverterTests.cs8
-rw-r--r--src/System.ComponentModel.TypeConverter/tests/Drawing/PointConverterTests.cs13
-rw-r--r--src/System.ComponentModel.TypeConverter/tests/Drawing/RectangleConverterTests.cs9
-rw-r--r--src/System.ComponentModel.TypeConverter/tests/Drawing/SizeConverterTests.cs13
-rw-r--r--src/System.ComponentModel.TypeConverter/tests/Drawing/SizeFConverterTests.cs20
-rw-r--r--src/System.ComponentModel.TypeConverter/tests/MemberDescriptorTests.cs19
-rw-r--r--src/System.ComponentModel.TypeConverter/tests/System.ComponentModel.TypeConverter.Tests.csproj2
-rw-r--r--src/System.Configuration.ConfigurationManager/tests/System.Configuration.ConfigurationManager.Tests.csproj3
-rw-r--r--src/System.Configuration.ConfigurationManager/tests/System/Configuration/SubclassTypeValidatorAttributeTests.cs21
-rw-r--r--src/System.Console/System.Console.sln8
-rw-r--r--src/System.Console/tests/CancelKeyPress.Unix.cs69
-rw-r--r--src/System.Console/tests/CancelKeyPress.cs59
-rw-r--r--src/System.Console/tests/Configurations.props1
-rw-r--r--src/System.Console/tests/System.Console.Tests.csproj3
-rw-r--r--src/System.Data.SqlClient/ref/System.Data.SqlClient.cs3
-rw-r--r--src/System.Data.SqlClient/src/Microsoft/SqlServer/Server/SqlDataRecord.cs7
-rw-r--r--src/System.Data.SqlClient/src/System/Data/SqlClient/SqlBulkCopy.cs1
-rw-r--r--src/System.Data.SqlClient/src/System/Data/SqlClient/SqlCommand.cs1
-rw-r--r--src/System.Data.SqlClient/src/System/Data/SqlClient/SqlDataReader.cs6
-rw-r--r--src/System.Data.SqlClient/src/System/Data/SqlClient/TdsParserStateObject.cs13
-rw-r--r--src/System.Data.SqlClient/tests/ManualTests/SQL/CommandCancelTest/CommandCancelTest.cs87
-rw-r--r--src/System.Data.SqlClient/tests/Tools/TDS/TDS/TDSPacketTokenType.cs34
-rw-r--r--src/System.Data.SqlClient/tests/Tools/TDS/TDS/TDSPacketType.cs25
-rw-r--r--src/System.Diagnostics.DiagnosticSource/src/ILLinkTrim.xml13
-rw-r--r--src/System.Diagnostics.PerformanceCounter/ref/System.Diagnostics.PerformanceCounter.cs4
-rw-r--r--src/System.Diagnostics.PerformanceCounter/ref/System.Diagnostics.PerformanceCounter.csproj5
-rw-r--r--src/System.DirectoryServices.AccountManagement/System.DirectoryServices.AccountManagement.sln8
-rw-r--r--src/System.DirectoryServices.AccountManagement/ref/Configurations.props2
-rw-r--r--src/System.DirectoryServices.AccountManagement/ref/System.DirectoryServices.AccountManagement.csproj7
-rw-r--r--src/System.DirectoryServices.Protocols/System.DirectoryServices.Protocols.sln8
-rw-r--r--src/System.DirectoryServices.Protocols/ref/Configurations.props2
-rw-r--r--src/System.DirectoryServices.Protocols/ref/System.DirectoryServices.Protocols.csproj17
-rw-r--r--src/System.DirectoryServices/System.DirectoryServices.sln8
-rw-r--r--src/System.DirectoryServices/ref/Configurations.props2
-rw-r--r--src/System.DirectoryServices/ref/System.DirectoryServices.csproj15
-rw-r--r--src/System.Drawing.Primitives/ref/System.Drawing.Primitives.cs217
-rw-r--r--src/System.Drawing.Primitives/src/System.Drawing.Primitives.csproj1
-rw-r--r--src/System.Drawing.Primitives/src/System/Drawing/Color.cs10
-rw-r--r--src/System.Drawing.Primitives/src/System/Drawing/KnownColor.cs10
-rw-r--r--src/System.Drawing.Primitives/src/System/Drawing/KnownColorTable.cs84
-rw-r--r--src/System.Drawing.Primitives/src/System/Drawing/SystemColors.cs75
-rw-r--r--src/System.Drawing.Primitives/tests/ColorTests.cs50
-rw-r--r--src/System.Drawing.Primitives/tests/PointFTests.cs10
-rw-r--r--src/System.Drawing.Primitives/tests/RectangleFTests.cs8
-rw-r--r--src/System.Drawing.Primitives/tests/SerializationTests.cs2
-rw-r--r--src/System.Drawing.Primitives/tests/SizeFTests.cs8
-rw-r--r--src/System.Globalization/System.Globalization.sln20
-rw-r--r--src/System.Globalization/tests/CultureInfo/CultureInfoNumberFormat.cs11
-rw-r--r--src/System.Globalization/tests/RegionInfo/RegionInfoTests.Methods.cs22
-rw-r--r--src/System.Globalization/tests/RegionInfo/RegionInfoTests.Properties.cs6
-rw-r--r--src/System.Globalization/tests/System.Globalization.Tests.csproj8
-rw-r--r--src/System.IO.FileSystem.AccessControl/src/System/IO/FileSystemAclExtensions.net46.cs14
-rw-r--r--src/System.IO.FileSystem/src/Microsoft/Win32/SafeHandles/SafeFileHandle.Windows.cs52
-rw-r--r--src/System.IO.FileSystem/src/Microsoft/Win32/SafeHandles/SafeFileHandle.Windows.netstandard1.3.cs61
-rw-r--r--src/System.IO.FileSystem/src/System/IO/Directory.cs6
-rw-r--r--src/System.IO.FileSystem/src/System/IO/DirectoryInfo.cs6
-rw-r--r--src/System.IO.FileSystem/src/System/IO/FileOptions.cs38
-rw-r--r--src/System.IO.FileSystem/tests/Directory/CreateDirectory.cs3
-rw-r--r--src/System.IO.FileSystem/tests/Directory/GetFileSystemEntries_str_str.cs44
-rw-r--r--src/System.IO.FileSystem/tests/Directory/Move.cs44
-rw-r--r--src/System.IO.FileSystem/tests/File/Move.cs1
-rw-r--r--src/System.IO.FileSystem/tests/FileInfo/Open.cs34
-rw-r--r--src/System.IO.FileSystem/tests/FileStream/CopyToAsync.cs52
-rw-r--r--src/System.IO.FileSystem/tests/FileStream/IsAsync.cs1
-rw-r--r--src/System.IO.FileSystem/tests/FileStream/ReadAsync.cs1
-rw-r--r--src/System.IO.FileSystem/tests/FileStream/SafeFileHandle.cs18
-rw-r--r--src/System.IO.FileSystem/tests/FileStream/Seek.cs6
-rw-r--r--src/System.IO.FileSystem/tests/FileStream/SetLength.cs2
-rw-r--r--src/System.IO.FileSystem/tests/FileStream/WriteAsync.cs1
-rw-r--r--src/System.IO.FileSystem/tests/FileStream/ctor_sfh_fa.cs1
-rw-r--r--src/System.IO.FileSystem/tests/FileStream/ctor_sfh_fa_buffer_async.cs1
-rw-r--r--src/System.IO.FileSystem/tests/FileStream/ctor_str_fm.cs4
-rw-r--r--src/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj3
-rw-r--r--src/System.IO.IsolatedStorage/src/Resources/Strings.resx2
-rw-r--r--src/System.IO.IsolatedStorage/src/System/IO/IsolatedStorage/IsolatedStorageFile.cs44
-rw-r--r--src/System.IO.IsolatedStorage/src/System/IO/IsolatedStorage/IsolatedStorageFileStream.cs21
-rw-r--r--src/System.IO.MemoryMappedFiles/src/Resources/Strings.resx3
-rw-r--r--src/System.IO.MemoryMappedFiles/src/System/IO/MemoryMappedFiles/MemoryMappedFile.cs4
-rw-r--r--src/System.IO.MemoryMappedFiles/tests/MemoryMappedFile.CreateFromFile.Tests.cs102
-rw-r--r--src/System.IO.MemoryMappedFiles/tests/System.IO.MemoryMappedFiles.Tests.csproj3
-rw-r--r--src/System.IO.Ports/tests/Legacy/Manual/Regression_142639.cs101
-rw-r--r--src/System.IO.Ports/tests/Legacy/Manual/USB_Serial_Regression.cs90
-rw-r--r--src/System.IO.Ports/tests/Support/Sleep.cs31
-rw-r--r--src/System.Linq.Expressions/src/ILLinkTrim.xml8
-rw-r--r--src/System.Linq.Expressions/src/Resources/System.Linq.Expressions.rd.xml8
-rw-r--r--src/System.Linq/src/ILLinkTrim.xml8
-rw-r--r--src/System.Linq/tests/ConcatTests.cs32
-rw-r--r--src/System.Linq/tests/EmptyPartitionTests.cs16
-rw-r--r--src/System.Linq/tests/GroupByTests.cs1
-rw-r--r--src/System.Linq/tests/MinTests.cs44
-rw-r--r--src/System.Linq/tests/OrderByDescendingTests.cs15
-rw-r--r--src/System.Linq/tests/OrderedSubsetting.cs5
-rw-r--r--src/System.Linq/tests/RangeTests.cs2
-rw-r--r--src/System.Linq/tests/SelectManyTests.cs11
-rw-r--r--src/System.Linq/tests/SelectTests.cs17
-rw-r--r--src/System.Linq/tests/ShortCircuitingTests.cs53
-rw-r--r--src/System.Linq/tests/System.Linq.Tests.csproj2
-rw-r--r--src/System.Linq/tests/TakeTests.cs1
-rw-r--r--src/System.Linq/tests/ToArrayTests.cs33
-rw-r--r--src/System.Linq/tests/ToLookupTests.cs1
-rw-r--r--src/System.Linq/tests/WhereTests.cs16
-rw-r--r--src/System.Net.Http/src/ILLinkTrim.xml6
-rw-r--r--src/System.Net.Http/src/System/Net/Http/Headers/ContentDispositionHeaderValue.cs2
-rw-r--r--src/System.Net.Http/tests/FunctionalTests/HttpClientHandlerTest.cs10
-rw-r--r--src/System.Net.Http/tests/UnitTests/Headers/ContentDispositionHeaderValueTest.cs9
-rw-r--r--src/System.Net.HttpListener/ref/Configurations.props2
-rw-r--r--src/System.Net.HttpListener/ref/System.Net.HttpListener.csproj4
-rw-r--r--src/System.Net.HttpListener/src/PinvokeAnalyzerExceptionList.analyzerdata46
-rw-r--r--src/System.Net.HttpListener/src/System.Net.HttpListener.csproj3
-rw-r--r--src/System.Net.Mail/ref/Configurations.props2
-rw-r--r--src/System.Net.Mail/ref/System.Net.Mail.csproj4
-rw-r--r--src/System.Net.NetworkInformation/src/ILLinkTrim.xml6
-rw-r--r--src/System.Net.Ping/src/ILLinkTrim.xml6
-rw-r--r--src/System.Net.Primitives/src/ApiCompatBaseline.uap.txt10
-rw-r--r--src/System.Net.Requests/tests/AssemblyInfo.cs9
-rw-r--r--src/System.Net.Requests/tests/HttpWebRequestHeaderTest.cs17
-rw-r--r--src/System.Net.Requests/tests/HttpWebResponseHeaderTest.cs2
-rw-r--r--src/System.Net.Security/src/ILLinkTrim.xml12
-rw-r--r--src/System.Net.Sockets/tests/FunctionalTests/SendReceive.cs15
-rw-r--r--src/System.Net.WebClient/tests/WebClientTest.cs11
-rw-r--r--src/System.Private.DataContractSerialization/src/ILLinkTrim.xml8
-rw-r--r--src/System.Private.DataContractSerialization/src/System.Private.DataContractSerialization.csproj3
-rw-r--r--src/System.Private.DataContractSerialization/src/System/Runtime/Serialization/OnDeserializedAttribute.cs13
-rw-r--r--src/System.Private.DataContractSerialization/src/System/Runtime/Serialization/OnDeserializingAttribute.cs13
-rw-r--r--src/System.Private.DataContractSerialization/src/System/Runtime/Serialization/OnSerializedAttribute.cs13
-rw-r--r--src/System.Private.DataContractSerialization/src/System/Runtime/Serialization/OnSerializingAttribute.cs13
-rw-r--r--src/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SerializationException.cs25
-rw-r--r--src/System.Private.DataContractSerialization/src/System/Runtime/Serialization/StreamingContext.cs75
-rw-r--r--src/System.Private.Xml/src/Resources/Strings.resx42
-rw-r--r--src/System.Private.Xml/src/System/Xml/Core/util/TernaryTreeGenerator.cs474
-rw-r--r--src/System.Private.Xml/src/System/Xml/Resolvers/XmlXapResolver.cs79
-rw-r--r--src/System.Private.Xml/src/System/Xml/Schema/GenerateConverter.cs1028
-rw-r--r--src/System.Private.Xml/src/System/Xml/Serialization/Compilation.cs194
-rw-r--r--src/System.Private.Xml/src/System/Xml/Serialization/XmlSerializer.cs44
-rw-r--r--src/System.Private.Xml/src/System/Xml/XPath/Internal/XmlIteratorQuery.cs49
-rw-r--r--src/System.Private.Xml/src/System/Xml/Xslt/XslCompiledTransformBase.cs110
-rw-r--r--src/System.Private.Xml/src/System/Xml/Xslt/XsltCommand.cs169
-rw-r--r--src/System.Private.Xml/src/System/Xml/Xslt/XsltCompiler.cs53
-rw-r--r--src/System.Private.Xml/src/Utils/DTDs/StripXmlComments/StripXmlComments.cs77
-rw-r--r--src/System.Reflection.Metadata/specs/PortablePdb-Metadata.md10
-rw-r--r--src/System.Reflection.TypeExtensions/System.Reflection.TypeExtensions.sln8
-rw-r--r--src/System.Reflection.TypeExtensions/pkg/System.Reflection.TypeExtensions.pkgproj23
-rw-r--r--src/System.Reflection.TypeExtensions/ref/Configurations.props4
-rw-r--r--src/System.Reflection.TypeExtensions/ref/System.Reflection.TypeExtensions.csproj15
-rw-r--r--src/System.Reflection.TypeExtensions/src/Configurations.props10
-rw-r--r--src/System.Reflection.TypeExtensions/src/System.Reflection.TypeExtensions.csproj6
-rw-r--r--src/System.Reflection/src/ApiCompatBaseline.uapaot.txt4
-rw-r--r--src/System.Resources.Reader/dir.props1
-rw-r--r--src/System.Runtime.CompilerServices.Unsafe/src/System.Runtime.CompilerServices.Unsafe.ilproj3
-rw-r--r--src/System.Runtime.Extensions/src/ApiCompatBaseline.uapaot.txt9
-rw-r--r--src/System.Runtime.Extensions/src/System/IO/Path.Unix.cs246
-rw-r--r--src/System.Runtime.Extensions/src/System/IO/Path.Win32.cs36
-rw-r--r--src/System.Runtime.InteropServices.RuntimeInformation/System.Runtime.InteropServices.RuntimeInformation.sln8
-rw-r--r--src/System.Runtime.InteropServices.RuntimeInformation/dir.props1
-rw-r--r--src/System.Runtime.InteropServices.RuntimeInformation/ref/Configurations.props5
-rw-r--r--src/System.Runtime.InteropServices.RuntimeInformation/ref/System.Runtime.InteropServices.RuntimeInformation.csproj17
-rw-r--r--src/System.Runtime.InteropServices.RuntimeInformation/src/System.Runtime.InteropServices.RuntimeInformation.csproj2
-rw-r--r--src/System.Runtime.Loader/src/ApiCompatBaseline.uapaot.txt20
-rw-r--r--src/System.Runtime.Serialization.Formatters/src/System/Runtime/Serialization/ObjectManager.cs2
-rw-r--r--src/System.Runtime.Serialization.Formatters/tests/FormatterServicesTests.Windows.cs28
-rw-r--r--src/System.Runtime.Serialization.Formatters/tests/FormatterServicesTests.cs232
-rw-r--r--src/System.Runtime.Serialization.Formatters/tests/System.Runtime.Serialization.Formatters.Tests.csproj4
-rw-r--r--src/System.Runtime.Serialization.Json/tests/Configurations.props1
-rw-r--r--src/System.Runtime.Serialization.Json/tests/DataContractJsonSerializer.cs82
-rw-r--r--src/System.Runtime.Serialization.Json/tests/ReflectionOnly/Configurations.props1
-rw-r--r--src/System.Runtime.Serialization.Json/tests/ReflectionOnly/System.Runtime.Serialization.Json.ReflectionOnly.Tests.csproj6
-rw-r--r--src/System.Runtime.Serialization.Json/tests/System.Runtime.Serialization.Json.Tests.csproj8
-rw-r--r--src/System.Runtime.Serialization.Xml/tests/Configurations.props1
-rw-r--r--src/System.Runtime.Serialization.Xml/tests/DataContractSerializer.CoreCLR.cs2
-rw-r--r--src/System.Runtime.Serialization.Xml/tests/DataContractSerializer.cs21
-rw-r--r--src/System.Runtime.Serialization.Xml/tests/DataContractSerializer.netcoreapp.cs12
-rw-r--r--src/System.Runtime.Serialization.Xml/tests/ReflectionOnly/Configurations.props1
-rw-r--r--src/System.Runtime.Serialization.Xml/tests/ReflectionOnly/System.Runtime.Serialization.Xml.ReflectionOnly.Tests.csproj8
-rw-r--r--src/System.Runtime.Serialization.Xml/tests/SerializationTypes.cs25
-rw-r--r--src/System.Runtime.Serialization.Xml/tests/System.Runtime.Serialization.Xml.Tests.csproj8
-rw-r--r--src/System.Runtime/src/ApiCompatBaseline.uapaot.txt25
-rw-r--r--src/System.Runtime/tests/System/GuidTests.cs117
-rw-r--r--src/System.Runtime/tests/System/HandleTests.cs16
-rw-r--r--src/System.Runtime/tests/System/TypeTests.cs23
-rw-r--r--src/System.Security.Cryptography.Algorithms/ref/System.Security.Cryptography.Algorithms.cs4
-rw-r--r--src/System.Security.Cryptography.Algorithms/src/System/Security/Cryptography/DSA.cs32
-rw-r--r--src/System.Security.Cryptography.Algorithms/src/System/Security/Cryptography/RSA.cs32
-rw-r--r--src/System.Security.Cryptography.Algorithms/tests/DSACreateTests.cs94
-rw-r--r--src/System.Security.Cryptography.Algorithms/tests/DefaultDSAProvider.cs4
-rw-r--r--src/System.Security.Cryptography.Algorithms/tests/DefaultRSAProvider.cs4
-rw-r--r--src/System.Security.Cryptography.Algorithms/tests/RSACreateTests.cs81
-rw-r--r--src/System.Security.Cryptography.Algorithms/tests/System.Security.Cryptography.Algorithms.Tests.csproj2
-rw-r--r--src/System.Security.Cryptography.Cng/tests/System.Security.Cryptography.Cng.Tests.csproj2
-rw-r--r--src/System.Security.Cryptography.Csp/ref/System.Security.Cryptography.Csp.cs27
-rw-r--r--src/System.Security.Cryptography.Csp/src/System.Security.Cryptography.Csp.csproj5
-rw-r--r--src/System.Security.Cryptography.Csp/src/System/Security/Cryptography/SHA1CryptoServiceProvider.cs5
-rw-r--r--src/System.Security.Cryptography.Csp/src/System/Security/Cryptography/SHA256CryptoServiceProvider.cs51
-rw-r--r--src/System.Security.Cryptography.Csp/src/System/Security/Cryptography/SHA384CryptoServiceProvider.cs51
-rw-r--r--src/System.Security.Cryptography.Csp/src/System/Security/Cryptography/SHA512CryptoServiceProvider.cs51
-rw-r--r--src/System.Security.Cryptography.Csp/tests/SHA1CryptoServiceProviderTests.cs46
-rw-r--r--src/System.Security.Cryptography.Csp/tests/SHAxCryptoServiceProviderTests.cs88
-rw-r--r--src/System.Security.Cryptography.Csp/tests/System.Security.Cryptography.Csp.Tests.csproj4
-rw-r--r--src/System.Security.Cryptography.X509Certificates/tests/System.Security.Cryptography.X509Certificates.Tests.csproj8
-rw-r--r--src/System.Security.Cryptography.X509Certificates/tests/X509FilesystemTests.Unix.cs2
-rw-r--r--src/System.Security.Cryptography.Xml/src/Configurations.props3
-rw-r--r--src/System.Security.Cryptography.Xml/src/System.Security.Cryptography.Xml.csproj2
-rw-r--r--src/System.Security.Cryptography.Xml/src/System/Security/Cryptography/Xml/EncryptionMethod.cs2
-rw-r--r--src/System.Security.Cryptography.Xml/src/System/Security/Cryptography/Xml/SignedXml.cs5
-rw-r--r--src/System.Security.Cryptography.Xml/src/System/Security/Cryptography/Xml/XmlLicenseTransform.cs2
-rw-r--r--src/System.Security.Cryptography.Xml/tests/Configurations.props3
-rw-r--r--src/System.Security.Cryptography.Xml/tests/EncryptedXmlTest.cs20
-rw-r--r--src/System.Security.Cryptography.Xml/tests/EncryptionMethodTests.cs167
-rw-r--r--src/System.Security.Cryptography.Xml/tests/SignedXmlTest.cs36
-rw-r--r--src/System.Security.Cryptography.Xml/tests/System.Security.Cryptography.Xml.Tests.csproj5
-rw-r--r--src/System.Security.Cryptography.Xml/tests/TestHelpers.cs17
-rw-r--r--src/System.Security.Cryptography.Xml/tests/XmlLicenseEncryptedRef.cs213
-rw-r--r--src/System.Security.Cryptography.Xml/tests/XmlLicenseSample.xml56
-rw-r--r--src/System.Security.Cryptography.Xml/tests/XmlLicenseTransformTest.cs260
-rw-r--r--src/System.Security.SecureString/dir.props1
-rw-r--r--src/System.Text.Encoding/tests/Performance/Perf.Encoding.cs2
-rw-r--r--src/System.Threading.Tasks.Dataflow/src/Base/DataflowBlock.cs36
-rw-r--r--src/System.Threading.Tasks.Dataflow/src/Internal/Common.cs4
-rw-r--r--src/System.Threading.Tasks.Dataflow/src/Internal/ProducerConsumerQueues.cs6
-rw-r--r--src/System.Threading.Tasks.Dataflow/src/System.Threading.Tasks.Dataflow.csproj8
-rw-r--r--src/System.Threading.Tasks.Dataflow/tests/System.Threading.Tasks.Dataflow.Tests.csproj18
-rw-r--r--src/System.Threading.Tasks/tests/System.Threading.Tasks.Tests.csproj1
-rw-r--r--src/System.Threading.Tasks/tests/Task/TaskFromAsyncWork.cs58
-rw-r--r--src/System.ValueTuple/dir.props2
-rw-r--r--src/System.ValueTuple/ref/Configurations.props2
-rw-r--r--src/System.ValueTuple/ref/System.ValueTuple.csproj6
-rw-r--r--src/System.ValueTuple/src/Configurations.props2
-rw-r--r--src/System.ValueTuple/src/System.ValueTuple.csproj10
-rw-r--r--src/System.Xml.XPath.XmlDocument/ref/System.Xml.XPath.XmlDocument.Forwards.cs7
-rw-r--r--src/Tools/dir.targets6
-rw-r--r--src/packages.builds8
-rw-r--r--src/shims/ApiCompatBaseline.netcoreapp.netfx461.ignore.txt2644
-rw-r--r--src/shims/ApiCompatBaseline.netcoreapp.netfx461.txt61
-rw-r--r--src/shims/ApiCompatBaseline.uap.netstandard20.txt37
-rw-r--r--src/shims/ApiCompatBaseline.uap.netstandard20Only.txt10
-rw-r--r--src/shims/ApiCompatBaseline.uapaot.netstandard20.txt170
-rw-r--r--src/shims/ApiCompatBaseline.uapaot.netstandard20Only.txt58
-rw-r--r--src/shims/dir.props5
-rw-r--r--src/src.builds15
-rw-r--r--src/upload-tests.proj2
398 files changed, 8182 insertions, 7719 deletions
diff --git a/Documentation/project-docs/issue-guide.md b/Documentation/project-docs/issue-guide.md
index c3b7e03b37..10f48631f8 100644
--- a/Documentation/project-docs/issue-guide.md
+++ b/Documentation/project-docs/issue-guide.md
@@ -102,10 +102,22 @@ Note: Area triage will apply the new scheme (issue types and assignee) throughou
### Triage rules - simplified
1. Each issue has exactly one **area-*** label
+1. Issue has no **Assignee**, unless someone is working on the issue at the moment
+1. Use **up-for-grabs** as much as possible, ideally with a quick note about next steps / complexity of the issue
+1. Set milestone to **Future**, unless you can 95%-commit you can fund the issue in specific milestone
+1. Each issue has exactly one "*issue type*" label (**bug**, **enhancement**, **api-needs-work**, **test bug**, **test enhancement**, **question**, **documentation**, etc.)
+1. Don't be afraid to say no, or close issues - just explain why and be polite
+1. Don't be afraid to be wrong - just be flexible when new information appears
+
+Feel free to use other labels if it helps your triage efforts (e.g. **needs more info**, **Design Discussion**, **blocked**, **blocking-partner**, **tenet-performance**, **tenet-compatibility**, **os-linux**/**os-windows**/**os-mac-os-x**/**os-unsupported**, **os-windows-uwp**/**os-windows-wsl**, **arch-arm32**/**arch-arm64**)
+
+#### Motivation for triage rules
+
+1. Each issue has exactly one **area-*** label
* Motivation: Issues with multiple areas have loose responbility (everyone blames the other side) and issues are double counted in reports.
1. Issue has no **Assignee**, unless someone is working on the issue at the moment
* Motivation: Observation is that contributors are less likely to grab assigned issues, no matter what the repo rules say.
-1. Use **up for grabs** as much as possible, ideally with a quick note about next steps / complexity of the issue
+1. Use **up-for-grabs** as much as possible, ideally with a quick note about next steps / complexity of the issue
* Note: Per http://up-for-grabs.net, such issues should be no longer than few nights' worth of work. They should be actionable (i.e. no misterious CI failures or UWP issues that can't be tested in the open).
1. Set milestone to **Future**, unless you can 95%-commit you can fund the issue in specific milestone
* Motivation: Helps communicate desire/timeline to community. Can spark further priority/impact discussion.
@@ -113,5 +125,3 @@ Note: Area triage will apply the new scheme (issue types and assignee) throughou
* Don't be afraid to be wrong when deciding 'bug' vs. 'test bug' (flip a coin if you must). The most useful values for tracking are 'api-*' vs. 'enhancement', 'question', and 'documentation'.
1. Don't be afraid to say no, or close issues - just explain why and be polite
1. Don't be afraid to be wrong - just be flexible when new information appears
-
-Feel free to use other labels if it helps your triage efforts (e.g. **needs more info**, **Design Discussion**, **blocked**, **blocking-partner**, **tenet-performance**, **tenet-compatibility**, **os-linux**/**os-windows**/**os-mac-os-x**/**os-unsupported**, **os-windows-uwp**/**os-windows-wsl**, **arch-arm32**/**arch-arm64**)
diff --git a/Packaging.props b/Packaging.props
index dd6ea6631f..3fed36986d 100644
--- a/Packaging.props
+++ b/Packaging.props
@@ -16,7 +16,6 @@
<XmlDocFileRoot>$(PackagesDir)Microsoft.Private.Intellisense/1.0.0-rc4-24206-00/xmldocs</XmlDocFileRoot>
<!-- We're currently not building a "live" baseline, instead we're using .NETCore 1.0 RTM stable versions as the baseline -->
<SkipBaseLineCheck>true</SkipBaseLineCheck>
- <LineupPackageVersion Condition="'$(LineupPackageVersion)' == ''">2.0.0</LineupPackageVersion>
<PlatformPackageVersion Condition="'$(PlatformPackageVersion)' == ''">2.0.0</PlatformPackageVersion>
<!-- by default all packages will use the same version which revs with respect to product version -->
diff --git a/README.md b/README.md
index ea7863e1e3..f06fb2713c 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,8 @@
+# Latest News and Announcements
+
+* [Announcement: Driving towards zero 2.0 bugs by May 10 (ZBB)](https://github.com/dotnet/corefx/issues/17619)
+* [Plan for better new-contributor friendly docs](https://github.com/dotnet/corefx/issues/17534)
+
# .NET Core Libraries (CoreFX)
The corefx repo contains the library implementation (called "CoreFX") for [.NET Core](http://github.com/dotnet/core). It includes System.Collections, System.IO, System.Xml, and many other components. You can see more information in [Documentation](Documentation/README.md). The corresponding [.NET Core Runtime repo](https://github.com/dotnet/coreclr) contains the runtime implementation (called "CoreCLR") for .NET Core. It includes RyuJIT, the .NET GC, and many other components. Runtime-specific library code - namely [System.Private.Corelib](https://github.com/dotnet/coreclr/tree/master/src/mscorlib) - lives in the CoreCLR repo. It needs to be built and versioned in tandem with the runtime. The rest of CoreFX is agnostic of runtime-implementation and can be run on any compatible .NET runtime.
diff --git a/Tools-Override/CloudTest.targets b/Tools-Override/CloudTest.targets
index fee715b700..0933afd5b7 100644
--- a/Tools-Override/CloudTest.targets
+++ b/Tools-Override/CloudTest.targets
@@ -431,7 +431,7 @@
<Target Name="CompressRuntimeDir" Condition="'$(SkipArchive)' != 'true'">
<ZipFileCreateFromDirectory
- SourceDirectory="$(ArchivePayloadRootDir)"
+ SourceDirectory="$(TestHostRootPath)"
DestinationArchive="$(TestRuntimeArchiveFile)"
OverwriteDestination="true" />
<ItemGroup>
diff --git a/Tools-Override/FrameworkTargeting.targets b/Tools-Override/FrameworkTargeting.targets
index 7afbceec57..dd14c2dbd0 100644
--- a/Tools-Override/FrameworkTargeting.targets
+++ b/Tools-Override/FrameworkTargeting.targets
@@ -222,17 +222,24 @@
</PropertyGroup>
<Target Name="BinPlace"
- DependsOnTargets="GetBinPlaceDirs;BinPlaceFiles;BinPlaceProps"
+ DependsOnTargets="GetBinPlaceConfiguration;BinPlaceFiles;BinPlaceProps"
AfterTargets="CopyFilesToOutputDirectory"
Condition="'$(EnableBinPlacing)' == 'true'" />
<Target Name="BinPlaceFiles"
Condition="'@(BinPlaceDir)' != ''"
- DependsOnTargets="GetBinPlaceItems" >
+ DependsOnTargets="GetBinPlaceItems"
+ Inputs="@(BinPlaceDir);%(BinPlaceDir.ItemName)"
+ Outputs="unused" >
+
+ <PropertyGroup>
+ <_BinPlaceItemName>%(BinPlaceDir.ItemName)</_BinPlaceItemName>
+ <_BinPlaceItemName Condition="'$(_BinPlaceItemName)' == ''">BinPlaceItem</_BinPlaceItemName>
+ </PropertyGroup>
<Message Importance="low" Text="BinPlaceDir: @(BinPlaceDir)" />
- <Copy SourceFiles="@(BinPlaceItem)"
+ <Copy SourceFiles="@($(_BinPlaceItemName))"
DestinationFolder="%(BinPlaceDir.Identity)"
SkipUnchangedFiles="true"
OverwriteReadOnlyFiles="true"
@@ -284,7 +291,7 @@
</Target>
<UsingTask TaskName="FindBestConfigurations" AssemblyFile="$(CoreFxToolsTaskDir)CoreFx.Tools.dll"/>
- <Target Name="GetBinPlaceDirs" DependsOnTargets="GetBuildConfigurations">
+ <Target Name="GetBinPlaceConfiguration" DependsOnTargets="GetBuildConfigurations">
<!-- find which, if any, build configuration of this project is best
for each binplace configuration -->
<FindBestConfigurations Properties="@(Property)"
@@ -297,12 +304,25 @@
<ItemGroup>
<_currentBinPlaceConfigurations Include="@(_bestBinlaceConfigurations)" Condition="'%(Identity)' == '$(Configuration)' OR '%(Identity)-$(ConfigurationGroup)' == '$(Configuration)'" />
- <BinPlaceDir Condition="'$(BinPlaceRuntime)' == 'true'" Include="%(_currentBinPlaceConfigurations.RuntimePath)" />
- <BinPlaceDir Condition="'$(BinPlaceRef)' == 'true'" Include="%(_currentBinPlaceConfigurations.RefPath)" />
+ <BinPlaceDir Condition="'$(BinPlaceRuntime)' == 'true'" Include="@(_currentBinPlaceConfigurations->'%(RuntimePath)')" />
+ <BinPlaceDir Condition="'$(BinPlaceRef)' == 'true'" Include="@(_currentBinPlaceConfigurations->'%(RefPath)')" />
<PackageFileDir Condition="'$(BinPlaceRuntime)' == 'true'" Include="%(_currentBinPlaceConfigurations.PackageFileRuntimePath)" />
<PackageFileDir Condition="'$(BinPlaceRef)' == 'true'" Include="%(_currentBinPlaceConfigurations.PackageFileRefPath)" />
+
+ <!-- permit BinplaceConfigurations to define SetProperties metadata,
+ set those properties when BinplaceConfiguration is active -->
+ <_binplacePropertyTuples Include="%(_currentBinPlaceConfigurations.SetProperties)" />
+
+ <_binplaceSetProperty Condition="'%(_binplacePropertyTuples.Identity)' != ''"
+ Include="$([System.String]::new('%(_binplacePropertyTuples.Identity)').Split('=')[0])">
+ <Value>$([System.String]::new('%(_binplacePropertyTuples.Identity)').Split('=')[1])</Value>
+ </_binplaceSetProperty>
</ItemGroup>
+
+ <CreateProperty Value="%(_binplaceSetProperty.Value)" Condition="'@(_binplaceSetProperty)' != ''" >
+ <Output TaskParameter="Value" PropertyName="%(_binplaceSetProperty.Identity)" />
+ </CreateProperty>
</Target>
<!-- Incremental clean only cleans paths under Intermediate or OutDir, handle additional paths -->
diff --git a/Tools-Override/resolveContract.targets b/Tools-Override/resolveContract.targets
index f8f98711f1..9466e251ec 100644
--- a/Tools-Override/resolveContract.targets
+++ b/Tools-Override/resolveContract.targets
@@ -14,13 +14,16 @@
<Target Name="ResolveMatchingContract">
<PropertyGroup>
- <ContractProject Condition="'$(ContractProject)' == ''">$(SourceDir)/$(AssemblyName)/ref/$(AssemblyName).csproj</ContractProject>
+ <ContractProject Condition="'$(ContractProject)' == ''">$(SourceDir)/$(MSBuildProjectName)/ref/$(MSBuildProjectName).csproj</ContractProject>
<HasMatchingContract Condition="'$(HasMatchingContract)' == '' and Exists('$(ContractProject)')">true</HasMatchingContract>
+ <ContractAssemblyPath Condition="'$(ContractAssemblyPath)' == ''">$(ContractOutputPath)/$(MSBuildProjectName).dll</ContractAssemblyPath>
</PropertyGroup>
<ItemGroup Condition="'$(HasMatchingContract)' == 'true'">
- <!-- add contract project as project reference to get target path -->
- <ProjectReference Include="$(ContractProject)">
+ <ResolvedMatchingContract Condition="'$(IsDesktopFacade)' != 'true' and Exists('$(ContractAssemblyPath)')" Include="$(ContractAssemblyPath)" />
+
+ <!-- If the contract doesn't exist in the default contract output path add a project reference to the contract project to resolve -->
+ <ProjectReference Condition="'@(ResolvedMatchingContract)' == ''" Include="$(ContractProject)">
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
<OutputItemType>ResolvedMatchingContract</OutputItemType>
</ProjectReference>
@@ -30,4 +33,4 @@
<Target Name="VerifyMatchingContract">
<Error Condition="'$(HasMatchingContract)' == 'true' and !Exists('%(ResolvedMatchingContract.Identity)')" Text="ResolveMatchingContract could not find a matching contract '%(ResolvedMatchingContract.Identity)' not found." />
</Target>
-</Project>
+</Project> \ No newline at end of file
diff --git a/Tools-Override/tests.targets b/Tools-Override/tests.targets
index f757e8fc61..a835562911 100644
--- a/Tools-Override/tests.targets
+++ b/Tools-Override/tests.targets
@@ -81,7 +81,7 @@
<PropertyGroup Condition="'$(IsTestProject)'=='true'">
<StartWorkingDirectory Condition="'$(StartWorkingDirectory)'==''">$(TestPath)</StartWorkingDirectory>
<StartAction Condition="'$(StartAction)'==''">Program</StartAction>
- <StartProgram Condition="'$(StartProgram)'==''">$(ArchivePayloadRootDir)dotnet.exe</StartProgram>
+ <StartProgram Condition="'$(StartProgram)'==''">$(TestHostRootPath)dotnet.exe</StartProgram>
<StartArguments Condition="'$(StartArguments)'==''">$(TestArguments) -wait -parallel none</StartArguments>
</PropertyGroup>
@@ -99,7 +99,6 @@
</ItemGroup>
<ItemGroup Condition="'$(BuildingNETFxVertical)' == 'true'">
<SupplementalTestData Include="$(RuntimePath)xunit.console.exe" />
- <SupplementalTestData Include="$(RuntimePath)xunit.console.exe.config" />
<SupplementalTestData Include="$(RuntimePath)xunit.execution.desktop.dll" />
</ItemGroup>
</Target>
@@ -124,14 +123,27 @@
</ItemGroup>
</Target>
- <Target Name="CopyRemoteExecutionConfigFile"
- BeforeTargets="GenerateTestExecutionScripts"
- Condition="'$(BuildingNETFxVertical)' == 'true' And Exists('$(TestPath)\RemoteExecutorConsoleApp.exe')">
+ <!-- We need to generate a simple config file for desktop test executors to tell them to use DEVPATH environment variable to use their dependencies from there.
+ DEVPATH is being set for desktop runs in RunTests.cmd to the TestHostPath. We need this approach to have desktop Helix runs. -->
+ <Target Name="GenerateDesktopExecutorsConfigFiles"
+ BeforeTargets="GenerateTestExecutionScripts"
+ Condition="'$(BuildingNETFxVertical)' == 'true'">
+ <PropertyGroup>
+ <XunitRunnerNetfxConfigFile>$(TestPath)\$(XunitExecutable).config</XunitRunnerNetfxConfigFile>
+ <RemoteExecutorConfigFile>$(TestPath)\RemoteExecutorConsoleApp.exe.config</RemoteExecutorConfigFile>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <ConfigFileLines Include="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;" />
+ <ConfigFileLines Include="&lt;configuration&gt;" />
+ <ConfigFileLines Include="&lt;runtime&gt;" />
+ <ConfigFileLines Include="&lt;developmentMode developerInstallation=&quot;true&quot; /&gt;" />
+ <ConfigFileLines Include="&lt;/runtime&gt;" />
+ <ConfigFileLines Include="&lt;/configuration&gt;" />
+ </ItemGroup>
- <Copy SourceFiles="$(RuntimePath)\xunit.console.exe.config"
- DestinationFiles="$(TestPath)\RemoteExecutorConsoleApp.exe.config"
- SkipUnchangedFiles="true"
- />
+ <WriteLinesToFile File="$(XunitRunnerNetfxConfigFile)" Lines="@(ConfigFileLines)" Overwrite="true"/>
+ <WriteLinesToFile Condition="Exists('$(TestPath)\RemoteExecutorConsoleApp.exe')" File="$(RemoteExecutorConfigFile)" Lines="@(ConfigFileLines)" Overwrite="true" />
</Target>
<!-- Generate the script to run the tests. The script performs two high-level steps:
@@ -140,7 +152,7 @@
directory.
2. Runs the tests. -->
<Target Name="GenerateTestExecutionScripts"
- DependsOnTargets="DiscoverTestInputs;SetupTestProperties">
+ DependsOnTargets="DiscoverTestInputs;SetupTestProperties;GenerateDesktopExecutorsConfigFiles">
<PropertyGroup>
<TargetOSTrait Condition="'$(TargetOS)'=='Windows_NT'">nonwindowstests</TargetOSTrait>
<TargetOSTrait Condition="'$(TargetOS)'=='Linux'">nonlinuxtests</TargetOSTrait>
@@ -198,6 +210,13 @@
Overwrite="true"
Encoding="Ascii" />
+ <!--======================================================
+ Section for netfx test runs
+ ====================================================== -->
+ <ItemGroup Condition="'$(BuildingNETFxVertical)' == 'true'" >
+ <TestCommandLines Include="set DEVPATH=%RUNTIME_PATH%" />
+ </ItemGroup>
+
<!--======================================================
Section for uapaot ilc test runs
====================================================== -->
@@ -296,7 +315,7 @@
<Error Text="We cannot run the tests for UAP because either the Runner or the Launcher could not be found. You need to specify the UAPToolsFolder property when calling build.cmd to fix this."
Condition="'$(BuildingUAPVertical)'=='true' and (!Exists('$(TestHostRootPath)\Runner') or !Exists('$(TestHostRootPath)\Launcher'))" />
- <Exec Command="$(TestPath)/$(RunnerScriptName) $(ArchivePayloadRootDir)"
+ <Exec Command="$(TestPath)/$(RunnerScriptName) $(TestHostRootPath)"
CustomErrorRegularExpression="Failed: [^0]"
ContinueOnError="true"
IgnoreStandardErrorWarningFormat="true"
diff --git a/buildpipeline/pipeline.json b/buildpipeline/pipeline.json
index d89965ad63..60d809317f 100644
--- a/buildpipeline/pipeline.json
+++ b/buildpipeline/pipeline.json
@@ -73,7 +73,8 @@
"PB_DockerTag": "rhel7_prereqs_2",
"PB_BuildArguments": "-buildArch=x64 -Release -portable",
"PB_SyncArguments": "-p -portable -- /p:ArchGroup=x64",
- "PB_TargetQueue": "Redhat.72.Amd64+Debian.82.Amd64+Ubuntu.1404.Amd64+Ubuntu.1604.Amd64+Ubuntu.1610.Amd64+suse.421.amd64+fedora.25.amd64"
+ "PB_TargetQueue": "Redhat.72.Amd64+Debian.82.Amd64+Ubuntu.1404.Amd64+Ubuntu.1604.Amd64+Ubuntu.1610.Amd64+suse.421.amd64+fedora.25.amd64",
+ "PB_CreateHelixArguments": "/p:ArchGroup=x64 /p:ConfigurationGroup=Release /p:\"TestProduct=corefx /p:\"TimeoutInSeconds=1200\" /p:\"TargetOS=Linux\" /p:\"HelixJobType=test/functional/portable/cli/\""
},
"ReportingParameters": {
"OperatingSystem": "RedHat 7",
@@ -161,7 +162,7 @@
"PB_DockerTag": "ubuntu1404_cross_prereqs_v2",
"PB_Architecture": "arm",
"PB_BuildArguments": "-portable",
- "PB_SyncArguments": "-p -portable -- /p:ArchGroup=arm",
+ "PB_SyncArguments": "-p -portable -- /p:ArchGroup=arm"
},
"ReportingParameters": {
"OperatingSystem": "Ubuntu 14.04",
@@ -213,7 +214,8 @@
"Parameters": {
"PB_BuildArguments": "-buildArch=x64 -Release -portable",
"PB_SyncArguments": "-p -portable -- /p:ArchGroup=x64",
- "PB_TargetQueue": "OSX.1012.Amd64"
+ "PB_TargetQueue": "OSX.1012.Amd64",
+ "PB_CreateHelixArguments": "/p:ArchGroup=x64 /p:ConfigurationGroup=Release /p:\"TestProduct=corefx /p:\"TimeoutInSeconds=1200\" /p:\"TargetOS=OSX\" /p:\"HelixJobType=test/functional/portable/cli/\""
},
"ReportingParameters": {
"OperatingSystem": "OSX",
@@ -340,7 +342,7 @@
"PB_BuildArguments": "-buildArch=x64 -Release -portable -- /p:SignType=real /p:RuntimeOS=win10",
"PB_BuildTestsArguments": "-buildArch=x64 -Release -SkipTests -Outerloop -portable -- /p:RuntimeOS=win10 /p:ArchiveTests=true",
"PB_SyncArguments": "-p -portable -- /p:ArchGroup=x64 /p:RuntimeOS=win10",
- "PB_CreateHelixArguments": "/p:ArchGroup=x64 /p:ConfigurationGroup=Release /p:\"TargetQueues=Windows.10.Amd64,Windows.7.Amd64,Windows.81.Amd64\" /p:\"TestProduct=corefx\" /p:\"TimeoutInSeconds=1200\" /p:\"TargetOS=Windows_NT\""
+ "PB_CreateHelixArguments": "/p:ArchGroup=x64 /p:ConfigurationGroup=Release /p:\"TargetQueues=Windows.10.Amd64,Windows.7.Amd64,Windows.81.Amd64\" /p:\"TestProduct=corefx\" /p:\"TimeoutInSeconds=1200\" /p:\"TargetOS=Windows_NT\" /p:\"HelixJobType=test/functional/portable/cli/\""
},
"ReportingParameters": {
"OperatingSystem": "Windows",
@@ -358,7 +360,7 @@
"PB_BuildArguments": "-buildArch=x86 -Release -portable -- /p:SignType=real /p:RuntimeOS=win10",
"PB_BuildTestsArguments": "-buildArch=x86 -Release -SkipTests -Outerloop -portable -- /p:RuntimeOS=win10 /p:ArchiveTests=true",
"PB_SyncArguments": "-p -portable -- /p:ArchGroup=x86 /p:RuntimeOS=win10",
- "PB_CreateHelixArguments": "/p:ArchGroup=x86 /p:ConfigurationGroup=Release /p:\"TargetQueues=Windows.10.Amd64,Windows.7.Amd64,Windows.81.Amd64\" /p:\"TestProduct=corefx\" /p:\"TimeoutInSeconds=1200\" /p:\"TargetOS=Windows_NT\""
+ "PB_CreateHelixArguments": "/p:ArchGroup=x86 /p:ConfigurationGroup=Release /p:\"TargetQueues=Windows.10.Amd64,Windows.7.Amd64,Windows.81.Amd64\" /p:\"TestProduct=corefx\" /p:\"TimeoutInSeconds=1200\" /p:\"TargetOS=Windows_NT\" /p:\"HelixJobType=test/functional/portable/cli/\""
},
"ReportingParameters": {
"OperatingSystem": "Windows",
@@ -547,7 +549,8 @@
"PB_DockerTag": "rhel7_prereqs_2",
"PB_BuildArguments": "-buildArch=x64 -Debug -portable",
"PB_SyncArguments": "-p -portable -- /p:ArchGroup=x64",
- "PB_TargetQueue": "Redhat.72.Amd64+Debian.82.Amd64+Ubuntu.1404.Amd64+Ubuntu.1604.Amd64+Ubuntu.1610.Amd64+suse.421.amd64+fedora.25.amd64"
+ "PB_TargetQueue": "Redhat.72.Amd64+Debian.82.Amd64+Ubuntu.1404.Amd64+Ubuntu.1604.Amd64+Ubuntu.1610.Amd64+suse.421.amd64+fedora.25.amd64",
+ "PB_CreateHelixArguments": "/p:ArchGroup=x64 /p:ConfigurationGroup=Debug /p:\"TestProduct=corefx /p:\"TimeoutInSeconds=1200\" /p:\"TargetOS=Linux\" /p:\"HelixJobType=test/functional/portable/cli/\""
},
"ReportingParameters": {
"OperatingSystem": "RedHat 7",
diff --git a/buildvertical.targets b/buildvertical.targets
index e8f08c4580..0de643de3f 100644
--- a/buildvertical.targets
+++ b/buildvertical.targets
@@ -53,7 +53,7 @@
<_NonPkgProjProjectReferenceBuildConfigurations>
<AdditionalProperties>Configuration=%(Identity);%(_NonPkgProjProjectReferenceBuildConfigurations.AdditionalProperties)</AdditionalProperties>
</_NonPkgProjProjectReferenceBuildConfigurations>
-
+
<!-- transform back to project -->
<_NonPkgProjProjectReferenceWitnConfiguration Include="@(_NonPkgProjProjectReferenceBuildConfigurations->'%(OriginalItemSpec)')" />
</ItemGroup>
@@ -101,10 +101,18 @@
<!-- Runs in a leaf project (eg: csproj) to determine all configurations -->
<Target Name="GetBuildConfigurations"
Returns="$(_AllBuildConfigurations)">
- <PropertyGroup>
- <_AllBuildConfigurations>$(BuildConfigurations)</_AllBuildConfigurations>
- <_AllBuildConfigurations Condition="'$(BuildConfigurations)' == ''">$(_traversalBuildConfigurations)</_AllBuildConfigurations>
- </PropertyGroup>
+ <PropertyGroup>
+ <_AllBuildConfigurations>$(BuildConfigurations)</_AllBuildConfigurations>
+ <_AllBuildConfigurations Condition="'$(BuildConfigurations)' == ''">$(_traversalBuildConfigurations)</_AllBuildConfigurations>
+ </PropertyGroup>
+
+ <!-- Filter out configurations for things not in netcoreapp when building only netcoreapp -->
+ <PropertyGroup Condition="'$(BuildNETCoreAppOnly)' == 'true' and ('$(MSBuildProjectExtension)' == '.csproj' or '$(MSBuildProjectExtension)' == '.ilproj')">
+ <PartOfNETCoreAppBuild Condition="'$(PartOfNETCoreAppBuild)' == ''">$(IsNETCoreApp)</PartOfNETCoreAppBuild>
+
+ <_AllBuildConfigurations Condition="'$(PartOfNETCoreAppBuild)' != 'true'"></_AllBuildConfigurations>
+ </PropertyGroup>
+
</Target>
<!-- Runs in a leaf project (eg: csproj) to determine configurations to package -->
diff --git a/dependencies.props b/dependencies.props
index 6ddaabde5f..d5a1132364 100644
--- a/dependencies.props
+++ b/dependencies.props
@@ -1,14 +1,6 @@
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- Source of truth for dependency tooling: the commit hash of the dotnet/versions master branch as of the last auto-upgrade. -->
- <!-- There are situations where the live .Net Native targeting pack wouldn't be suitable to pick up.
- These are usually temporary, but requires 'freezing' the .net native targeting pack on CoreFX.
- Use the property below to control this behavior
- -->
- <PropertyGroup>
- <DisableProjectNTfsAutoUpgrade Condition="'$(DisableProjectNTfsAutoUpgrade)'==''">false</DisableProjectNTfsAutoUpgrade>
- </PropertyGroup>
-
<!-- For detailed explanation of the reference versions see:
https://github.com/dotnet/buildtools/blob/master/Documentation/project-nuget-dependencies.md
@@ -17,24 +9,24 @@
These ref versions are pulled from https://github.com/dotnet/versions.
-->
<PropertyGroup>
- <CoreFxCurrentRef>5ee16d8f6fa0fd6fb9edc21704bdd27558e8bfc1</CoreFxCurrentRef>
- <CoreClrCurrentRef>5ee16d8f6fa0fd6fb9edc21704bdd27558e8bfc1</CoreClrCurrentRef>
+ <CoreFxCurrentRef>1871226e8e8a97d4be0f8ef9bcd4cf0dcb0dc740</CoreFxCurrentRef>
+ <CoreClrCurrentRef>c5d9786c02deba689dbb8134742b210db62381b8</CoreClrCurrentRef>
<ExternalCurrentRef>3b8a99621d89ad9877f053ba8af25e0f25dcd9d8</ExternalCurrentRef>
- <ProjectNTfsCurrentRef>5ee16d8f6fa0fd6fb9edc21704bdd27558e8bfc1</ProjectNTfsCurrentRef>
- <ProjectNTfsTestILCCurrentRef>5ee16d8f6fa0fd6fb9edc21704bdd27558e8bfc1</ProjectNTfsTestILCCurrentRef>
+ <ProjectNTfsCurrentRef>9a927087508a6abdfa41bfe040ad9fb4cc4ac792</ProjectNTfsCurrentRef>
+ <ProjectNTfsTestILCCurrentRef>9a927087508a6abdfa41bfe040ad9fb4cc4ac792</ProjectNTfsTestILCCurrentRef>
<SniCurrentRef>05650e53f2aa4497f74cd6e9b053d3f69f64b0bd</SniCurrentRef>
- <StandardCurrentRef>95c0dfc764c3083aa62e96c6eac211f40b6ce0df</StandardCurrentRef>
+ <StandardCurrentRef>52aad726b00182d1e0320f5e46a4a04b0c7deb0f</StandardCurrentRef>
</PropertyGroup>
<!-- Auto-upgraded properties for each build info dependency. -->
<PropertyGroup>
- <CoreFxExpectedPrerelease>preview1-25203-01</CoreFxExpectedPrerelease>
- <CoreClrExpectedPrerelease>preview1-25203-02</CoreClrExpectedPrerelease>
+ <CoreFxExpectedPrerelease>preview1-25205-01</CoreFxExpectedPrerelease>
+ <CoreClrExpectedPrerelease>preview1-25206-02</CoreClrExpectedPrerelease>
<ExternalExpectedPrerelease>beta-25016-01</ExternalExpectedPrerelease>
- <ProjectNTfsExpectedPrerelease>beta-25203-00</ProjectNTfsExpectedPrerelease>
- <ProjectNTfsTestILCExpectedPrerelease>beta-25203-00</ProjectNTfsTestILCExpectedPrerelease>
- <ProjectNTfsTestILCPackageVersion>1.0.0-beta-25203-00</ProjectNTfsTestILCPackageVersion>
- <NETStandardPackageVersion>2.0.0-preview1-25131-01</NETStandardPackageVersion>
+ <ProjectNTfsExpectedPrerelease>beta-25206-00</ProjectNTfsExpectedPrerelease>
+ <ProjectNTfsTestILCExpectedPrerelease>beta-25206-00</ProjectNTfsTestILCExpectedPrerelease>
+ <ProjectNTfsTestILCPackageVersion>1.0.0-beta-25206-00</ProjectNTfsTestILCPackageVersion>
+ <NETStandardPackageVersion>2.0.0-preview1-25206-03</NETStandardPackageVersion>
<NETStandardPackageId>NETStandard.Library</NETStandardPackageId>
<!-- Use the SNI runtime package -->
<SniPackageVersion>4.4.0-beta-25007-02</SniPackageVersion>
@@ -75,11 +67,11 @@
<BuildInfoPath>$(BaseDotNetBuildInfo)standard/$(DependencyBranch)</BuildInfoPath>
<CurrentRef>$(StandardCurrentRef)</CurrentRef>
</RemoteDependencyBuildInfo>
- <RemoteDependencyBuildInfo Condition="'$(DisableProjectNTfsAutoUpgrade)' != 'true'" Include="ProjectNTfs">
+ <RemoteDependencyBuildInfo Include="ProjectNTfs">
<BuildInfoPath>$(BaseDotNetBuildInfo)projectn-tfs/$(DependencyBranch)</BuildInfoPath>
<CurrentRef>$(ProjectNTfsCurrentRef)</CurrentRef>
</RemoteDependencyBuildInfo>
- <RemoteDependencyBuildInfo Condition="'$(DisableProjectNTfsAutoUpgrade)' != 'true'" Include="ProjectNTfsTestILC">
+ <RemoteDependencyBuildInfo Include="ProjectNTfsTestILC">
<BuildInfoPath>$(BaseDotNetBuildInfo)projectn-tfs-testilc/$(DependencyBranch)</BuildInfoPath>
<CurrentRef>$(ProjectNTfsTestILCCurrentRef)</CurrentRef>
</RemoteDependencyBuildInfo>
@@ -108,17 +100,17 @@
<ElementName>NETStandardPackageVersion</ElementName>
<PackageId>$(NETStandardPackageId)</PackageId>
</XmlUpdateStep>
- <XmlUpdateStep Condition="'$(DisableProjectNTfsAutoUpgrade)' != 'true'" Include="ProjectNTfs">
+ <XmlUpdateStep Include="ProjectNTfs">
<Path>$(MSBuildThisFileFullPath)</Path>
<ElementName>ProjectNTfsExpectedPrerelease</ElementName>
<BuildInfoName>ProjectNTfs</BuildInfoName>
</XmlUpdateStep>
- <XmlUpdateStep Condition="'$(DisableProjectNTfsAutoUpgrade)' != 'true'" Include="ProjectNTfsTestILC">
+ <XmlUpdateStep Include="ProjectNTfsTestILC">
<Path>$(MSBuildThisFileFullPath)</Path>
<ElementName>ProjectNTfsTestILCExpectedPrerelease</ElementName>
<BuildInfoName>ProjectNTfsTestILC</BuildInfoName>
</XmlUpdateStep>
- <XmlUpdateStep Condition="'$(DisableProjectNTfsAutoUpgrade)' != 'true'" Include="ProjectNTfsTestILC">
+ <XmlUpdateStep Include="ProjectNTfsTestILC">
<Path>$(MSBuildThisFileFullPath)</Path>
<ElementName>ProjectNTfsTestILCPackageVersion</ElementName>
<PackageId>TestILCNugetPackageForCoreFX</PackageId>
diff --git a/dir.props b/dir.props
index d8f70cf9ea..4ce980e488 100644
--- a/dir.props
+++ b/dir.props
@@ -148,6 +148,11 @@
<Import Project="$(BuildConfigurationImportFile)" Condition="Exists('$(BuildConfigurationImportFile)')" />
+ <PropertyGroup>
+ <!-- illink fails to run on Alpine CLI : https://github.com/dotnet/corefx/issues/18029 -->
+ <ILLinkTrimAssembly Condition="$(RuntimeOS.StartsWith('alpine'))">false</ILLinkTrimAssembly>
+ </PropertyGroup>
+
<!-- Import packaging props -->
<Import Project="$(MSBuildThisFileDirectory)Packaging.props"/>
@@ -254,6 +259,7 @@
<BinPlaceTestSharedFramework Condition="'$(_bc_TargetGroup)' == 'netcoreapp'">true</BinPlaceTestSharedFramework>
<BinPlaceILCInputFolder Condition="'$(_bc_TargetGroup)' == 'uapaot' And '$(BinPlaceILCInputFolder)' == ''">true</BinPlaceILCInputFolder>
<BinPlaceUAPFramework Condition="'$(_bc_TargetGroup)' == 'uap'">true</BinPlaceUAPFramework>
+ <BinPlaceNETFXRuntime Condition="'$(_bc_TargetGroup)' == 'netfx'">true</BinPlaceNETFXRuntime>
<NETCoreAppTestSharedFxVersion>9.9.9</NETCoreAppTestSharedFxVersion>
<TestHostRootPath>$(BinDir)testhost/$(BuildConfiguration)/</TestHostRootPath>
@@ -265,7 +271,6 @@
<UAPTestSharedFrameworkPath>$(TestHostRootPath)UAPLayout</UAPTestSharedFrameworkPath>
<!-- Constructed shared fx path for testing -->
- <ArchivePayloadRootDir Condition="'$(BinPlaceTestSharedFramework)' == 'true' or '$(BinPlaceUAPFramework)'=='true' or '$(BinPlaceILCInputFolder)' == 'true'">$(TestHostRootPath)</ArchivePayloadRootDir>
<UseDotNetNativeToolchain Condition="'$(BuildingUAPAOTVertical)' == 'true'">true</UseDotNetNativeToolchain>
<PackagesBasePath Condition="'$(PackagesBasePath)'==''">$(BinDir)$(OSPlatformConfig)</PackagesBasePath>
diff --git a/dir.targets b/dir.targets
index f829b043a6..d395f0ae9c 100644
--- a/dir.targets
+++ b/dir.targets
@@ -54,12 +54,13 @@
<RefPath>$(BuildConfigurationRefPath)</RefPath>
<RuntimePath>$(RuntimePath)</RuntimePath>
</BinPlaceConfiguration>
-
<!-- binplace to directories for packages -->
<BinPlaceConfiguration Condition="'$(IsNETCoreApp)' == 'true' AND '$(BuildingNETCoreAppVertical)' == 'true'" Include="netcoreapp-$(_bc_OSGroup)">
<PackageFileRefPath Condition="'$(IsNETCoreAppRef)' == 'true'">$(NETCoreAppPackageRefPath)</PackageFileRefPath>
<PackageFileRuntimePath>$(NETCoreAppPackageRuntimePath)</PackageFileRuntimePath>
<RuntimePath Condition="'$(BinPlaceNETCoreAppPackage)' == 'true'">$(NETCoreAppPackageRuntimePath)\..\runtime</RuntimePath>
+ <!-- enable trimming for any runtime project that's part of the shared framework and hasn't already set ILLinkTrimAssembly -->
+ <SetProperties Condition="'$(BinPlaceRuntime)' == 'true' AND '$(ILLinkTrimAssembly)' == ''">ILLinkTrimAssembly=true</SetProperties>
</BinPlaceConfiguration>
<BinPlaceConfiguration Condition="'$(IsUAP)' == 'true' AND '$(BuildingUAPVertical)' == 'true'" Include="uap-$(_bc_OSGroup)">
<PackageFileRefPath Condition="'$(IsUAPRef)'=='true'">$(UAPPackageRefPath)</PackageFileRefPath>
@@ -82,6 +83,9 @@
<BinPlaceConfiguration Condition="'$(BinPlaceUAPFramework)' == 'true'" Include="uap-$(_bc_OSGroup)">
<RuntimePath>$(UAPTestSharedFrameworkPath)</RuntimePath>
</BinPlaceConfiguration>
+ <BinPlaceConfiguration Condition="'$(BinPlaceNETFXRuntime)' == 'true'" Include="netfx-$(_bc_OSGroup)">
+ <RuntimePath>$(TestHostRootPath)</RuntimePath>
+ </BinPlaceConfiguration>
<!-- binplace targeting packs which may be different from BuildConfiguration -->
<BinPlaceConfiguration Include="netstandard">
@@ -107,6 +111,7 @@
<Import Condition="Exists('$(MSBuildThisFileDirectory)..\open.targets')" Project="$(MSBuildThisFileDirectory)..\open.targets" />
<Import Project="$(MSBuildThisFileDirectory)referenceFromRuntime.targets" />
+ <Import Project="$(MSBuildThisFileDirectory)illink.targets" />
<PropertyGroup>
<!-- We don't use any of MSBuild's resolution logic for resolving the framework, so just set these two properties to any folder that exists to skip
diff --git a/external/ILLink/ILLink.depproj b/external/ILLink/ILLink.depproj
new file mode 100644
index 0000000000..853c90047b
--- /dev/null
+++ b/external/ILLink/ILLink.depproj
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <NuGetTargetMoniker>.NETCoreApp,Version=v1.1</NuGetTargetMoniker>
+ <OutputPath>$(ToolsDir)ILLink</OutputPath>
+ <IsRuntimeAssembly>false</IsRuntimeAssembly>
+ </PropertyGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <Target Name="IncludeAllFiles"
+ AfterTargets="ResolveNuGetPackages">
+ <ItemGroup>
+ <ReferenceCopyLocalPaths Include="%(ReferenceCopyLocalPaths.RootDir)%(ReferenceCopyLocalPaths.Directory)\*.*" />
+ </ItemGroup>
+ </Target>
+</Project> \ No newline at end of file
diff --git a/external/ILLink/project.json.template b/external/ILLink/project.json.template
new file mode 100644
index 0000000000..e7c9cde5f3
--- /dev/null
+++ b/external/ILLink/project.json.template
@@ -0,0 +1,14 @@
+{
+ "dependencies": {
+ "Microsoft.NETCore.ILLink": {
+ "version": "0.1.8-preview",
+ "exclude": "compile"
+ }
+ },
+ "frameworks": {
+ "netcoreapp1.1": { }
+ },
+ "runtimes": {
+ "{RID}": {}
+ }
+}
diff --git a/external/dir.proj b/external/dir.proj
index 8d1b033ca6..3912e6143f 100644
--- a/external/dir.proj
+++ b/external/dir.proj
@@ -15,6 +15,7 @@
<Project Include="portable\portable.depproj" />
<Project Include="uapaotredist/uapaotredist.depproj" />
<Project Include="ilasm/ilasm.depproj" />
+ <Project Condition="'$(ILLinkTrimAssembly)' != 'false'" Include="ILLink/ILLink.depproj" />
</ItemGroup>
<Import Project="../dir.traversal.targets" />
diff --git a/external/harvestPackages/project.json.template b/external/harvestPackages/project.json.template
index 502350ed3b..2bbc08839a 100644
--- a/external/harvestPackages/project.json.template
+++ b/external/harvestPackages/project.json.template
@@ -27,6 +27,7 @@
"System.Reflection.Context": "4.3.0",
"System.Reflection.DispatchProxy": "4.3.0",
"System.Reflection.Metadata": "1.4.1",
+ "System.Reflection.TypeExtensions": "4.3.0",
"System.Runtime.CompilerServices.Unsafe": "4.3.0",
"System.Runtime.InteropServices.RuntimeInformation": "4.3.0",
"System.Runtime.WindowsRuntime": "4.3.0",
diff --git a/external/ilasm/project.json.template b/external/ilasm/project.json.template
index 9c4e239848..0cb3dfd08a 100644
--- a/external/ilasm/project.json.template
+++ b/external/ilasm/project.json.template
@@ -2,9 +2,9 @@
"frameworks": {
"{TFM}": {
"dependencies": {
- "Microsoft.NETCore.Platforms": "2.0.0-preview1-25203-01",
- "Microsoft.NETCore.Runtime.CoreCLR": "2.0.0-preview1-25203-02",
- "Microsoft.NETCore.ILAsm": "2.0.0-preview1-25203-02"
+ "Microsoft.NETCore.Platforms": "2.0.0-preview1-25205-01",
+ "Microsoft.NETCore.Runtime.CoreCLR": "2.0.0-preview1-25206-02",
+ "Microsoft.NETCore.ILAsm": "2.0.0-preview1-25206-02"
}
}
},
diff --git a/external/netstandard/netstandard.depproj b/external/netstandard/netstandard.depproj
index a927161ce8..798cdea514 100644
--- a/external/netstandard/netstandard.depproj
+++ b/external/netstandard/netstandard.depproj
@@ -22,6 +22,10 @@
<!-- only for netfx verticals will this project provide runtime assets -->
<RuntimePath>$(RuntimePath)</RuntimePath>
</BinPlaceConfiguration>
+ <BinPlaceConfiguration Include="$(Configuration)">
+ <!-- copy shims to the testhost as well in order to be able to run the netfx tests -->
+ <RuntimePath>$(TestHostRootPath)</RuntimePath>
+ </BinPlaceConfiguration>
</ItemGroup>
<Target Name="AddNETStandardRefs" AfterTargets="ResolveReferences"
diff --git a/external/netstandard/netstandard1.x/project.json.template b/external/netstandard/netstandard1.x/project.json.template
index bd36fd05be..044504a0c5 100644
--- a/external/netstandard/netstandard1.x/project.json.template
+++ b/external/netstandard/netstandard1.x/project.json.template
@@ -2,7 +2,7 @@
"frameworks": {
"{TFM}": {
"dependencies": {
- "NETStandard.Library": "2.0.0-preview1-25131-01",
+ "NETStandard.Library": "2.0.0-preview1-25206-03",
"System.Diagnostics.Contracts": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Dynamic.Runtime": "4.3.0",
diff --git a/external/netstandard/project.json.template b/external/netstandard/project.json.template
index c2e7ce7afb..887da1b01b 100644
--- a/external/netstandard/project.json.template
+++ b/external/netstandard/project.json.template
@@ -2,7 +2,7 @@
"frameworks": {
"{TFM}": {
"dependencies": {
- "NETStandard.Library": "2.0.0-preview1-25131-01"
+ "NETStandard.Library": "2.0.0-preview1-25206-03"
}
}
}
diff --git a/external/runtime/NETNative/project.json.template b/external/runtime/NETNative/project.json.template
index 710bd660be..0eebc7e5a8 100644
--- a/external/runtime/NETNative/project.json.template
+++ b/external/runtime/NETNative/project.json.template
@@ -2,7 +2,7 @@
"frameworks": {
"{TFM}": {
"dependencies": {
- "Microsoft.TargetingPack.Private.NETNative": "1.1.0-beta-25203-00"
+ "Microsoft.TargetingPack.Private.NETNative": "1.1.0-beta-25206-00"
}
}
},
diff --git a/external/runtime/project.json.template b/external/runtime/project.json.template
index df0f452c39..353c9969f6 100644
--- a/external/runtime/project.json.template
+++ b/external/runtime/project.json.template
@@ -2,10 +2,10 @@
"frameworks": {
"{TFM}": {
"dependencies": {
- "Microsoft.NETCore.Platforms": "2.0.0-preview1-25203-01",
- "Microsoft.NETCore.Runtime.CoreCLR": "2.0.0-preview1-25203-02",
- "Microsoft.NETCore.TestHost": "2.0.0-preview1-25203-02",
- "runtime.native.System.Data.SqlClient.sni": "4.4.0-preview1-25203-01",
+ "Microsoft.NETCore.Platforms": "2.0.0-preview1-25205-01",
+ "Microsoft.NETCore.Runtime.CoreCLR": "2.0.0-preview1-25206-02",
+ "Microsoft.NETCore.TestHost": "2.0.0-preview1-25206-02",
+ "runtime.native.System.Data.SqlClient.sni": "4.4.0-preview1-25205-01",
"Microsoft.NETCore.DotNetHost": "1.2.0-beta-001259-00",
"Microsoft.NETCore.DotNetHostPolicy": "1.2.0-beta-001259-00"
}
diff --git a/external/test-runtime/optional.json b/external/test-runtime/optional.json
index 37fab82050..9352803e1d 100644
--- a/external/test-runtime/optional.json
+++ b/external/test-runtime/optional.json
@@ -4,23 +4,8 @@
"dependencies": {
"Microsoft.DotNet.IBCMerge": "4.6.0-alpha-00001",
"Microsoft.DotNet.UAP.TestTools": "1.0.2",
- "TestILCNugetPackageForCoreFX": "1.0.0-beta-25203-00"
+ "TestILCNugetPackageForCoreFX": "1.0.0-beta-25206-00"
}
}
- },
- "runtimes": {
- "centos.7-x64": {},
- "debian.8-x64": {},
- "fedora.23-x64": {},
- "fedora.24-x64": {},
- "opensuse.13.2-x64": {},
- "opensuse.42.1-x64": {},
- "osx.10.10-x64": {},
- "rhel.7-x64": {},
- "ubuntu.14.04-x64": {},
- "ubuntu.16.04-x64": {},
- "ubuntu.16.10-x64": {},
- "win7-x64": {},
- "win7-x86": {}
}
}
diff --git a/illink.targets b/illink.targets
new file mode 100644
index 0000000000..b59e9fce0c
--- /dev/null
+++ b/illink.targets
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <TargetsTriggeredByCompilation>
+ $(TargetsTriggeredByCompilation);
+ _SetILLinkTrimAssembly;
+ ILLinkTrimAssembly
+ </TargetsTriggeredByCompilation>
+ </PropertyGroup>
+
+ <!-- Inputs and outputs of ILLinkTrimAssembly -->
+ <PropertyGroup>
+ <ILLinkToolPath Condition="'$(ILLinkToolPath)' == ''">$(ToolsDir)ILLink/illink.dll</ILLinkToolPath>
+ <ILLinkTrimAssemblyPath>$(IntermediateOutputPath)$(TargetName)$(TargetExt)</ILLinkTrimAssemblyPath>
+ <ILLinkTrimAssemblySymbols>$(IntermediateOutputPath)$(TargetName).pdb</ILLinkTrimAssemblySymbols>
+ <ILLinkTrimInputPath>$(IntermediateOutputPath)PreTrim/</ILLinkTrimInputPath>
+ <ILLinkTrimInputAssembly>$(ILLinkTrimInputPath)$(TargetName)$(TargetExt)</ILLinkTrimInputAssembly>
+ <ILLinkTrimInputSymbols>$(ILLinkTrimInputPath)$(TargetName).pdb</ILLinkTrimInputSymbols>
+ <ILLinkTrimOutputPath>$(IntermediateOutputPath)</ILLinkTrimOutputPath>
+
+ <ILLinkTrimXml Condition="'$(ILLinkTrimXml)' == '' AND Exists('$(MSBuildProjectDirectory)/ILLinkTrim.xml')">$(MSBuildProjectDirectory)/ILLinkTrim.xml</ILLinkTrimXml>
+
+ <!-- if building a PDB, tell illink to rewrite the symbols file -->
+ <ILLinkRewritePDBs Condition="'$(ILLinkRewritePDBs)' == '' AND '$(DebugSymbols)' != 'false'">true</ILLinkRewritePDBs>
+ </PropertyGroup>
+
+ <!-- Custom binplacing for pre/post-trimming and reports that is useful for analysis
+ Must be enabled by setting BinPlaceILLinkTrimAssembly=true
+ -->
+ <ItemGroup Condition="'$(BinPlaceILLinkTrimAssembly)' == 'true'">
+ <BinPlaceConfiguration Include="$(BuildConfiguration)">
+ <RuntimePath>$(BinDir)ILLinkTrimAssembly/$(BuildConfiguration)/trimmed</RuntimePath>
+ <ItemName>TrimmedItem</ItemName>
+ </BinPlaceConfiguration>
+ <BinPlaceConfiguration Include="$(BuildConfiguration)">
+ <RuntimePath>$(BinDir)ILLinkTrimAssembly/$(BuildConfiguration)/reports</RuntimePath>
+ <ItemName>TrimmingReport</ItemName>
+ </BinPlaceConfiguration>
+ <BinPlaceConfiguration Include="$(BuildConfiguration)">
+ <RuntimePath>$(BinDir)ILLinkTrimAssembly/$(BuildConfiguration)/pretrimmed</RuntimePath>
+ <ItemName>PreTrimmedItem</ItemName>
+ </BinPlaceConfiguration>
+ </ItemGroup>
+
+ <Target Name="_SetILLinkTrimAssembly"
+ Condition="'$(ILLinkTrimAssembly)' == ''"
+ DependsOnTargets="GetBinPlaceConfiguration">
+ <PropertyGroup>
+ <!-- Currently ILLink cannot handle type projections from Windows.winmd, disable if the project references it -->
+ <ILLinkTrimAssembly Condition="'%(ReferencePath.FileName)%(ReferencePath.Extension)' == 'Windows.winmd'">false</ILLinkTrimAssembly>
+ </PropertyGroup>
+ </Target>
+
+ <!-- ILLinkTrimAssembly
+ Examines the "input assembly" for IL that is unreachable from public API and trims that,
+ rewriting the assembly to an "output assembly"
+ -->
+ <Target Name="ILLinkTrimAssembly" Condition="'$(ILLinkTrimAssembly)' == 'true'" DependsOnTargets="EnsureBuildToolsRuntime">
+ <ItemGroup>
+ <!-- currently only directories are supported by ILLink. -->
+ <_ILLinkReferenceDirectory Include="%(ReferencePath.RootDir)%(ReferencePath.Directory)" />
+ </ItemGroup>
+
+ <PropertyGroup>
+ <!-- Root public entry points in this assembly.
+ Currently this must be passed as name and directory.
+ Directory of this assembly *must* occur before directory of references. -->
+ <ILLinkArgs>$(ILLinkArgs) -r $(TargetName)</ILLinkArgs>
+ <ILLinkArgs>$(ILLinkArgs) -d $(ILLinkTrimInputPath)</ILLinkArgs>
+ <!-- directories to examine for assembly dependencies -->
+ <ILLinkArgs>$(ILLinkArgs) @(_ILLinkReferenceDirectory->'-d %(Identity)', ' ')</ILLinkArgs>
+ <!-- don't trim anything that's defined in core assemblies -->
+ <ILLinkArgs>$(ILLinkArgs) -c skip</ILLinkArgs>
+ <ILLinkArgs>$(ILLinkArgs) -p skip netstandard</ILLinkArgs>
+ <!-- keep type-forward assemblies (facades) -->
+ <ILLinkArgs>$(ILLinkArgs) -t</ILLinkArgs>
+ <ILLinkArgs>$(ILLinkArgs) -out $(ILLinkTrimOutputPath)</ILLinkArgs>
+ <ILLinkArgs Condition="'$(ILLinkTrimXml)' != ''">$(ILLinkArgs) -x $(ILLinkTrimXml)</ILLinkArgs>
+ <ILLinkArgs Condition="'$(ILLinkRewritePDBs)' == 'true' AND Exists('$(ILLinkTrimAssemblySymbols)')">$(ILLinkArgs) -b true</ILLinkArgs>
+ </PropertyGroup>
+
+ <MakeDir Directories="$(ILLinkTrimInputPath)" />
+
+ <!-- Move the assembly into a subdirectory for ILLink -->
+ <Move SourceFiles="$(ILLinkTrimAssemblyPath)"
+ DestinationFolder="$(ILLinkTrimInputPath)"
+ />
+
+ <!-- Move the PDB into a subdirectory for ILLink if we are rewriting PDBs -->
+ <Move SourceFiles="$(ILLinkTrimAssemblySymbols)"
+ DestinationFolder="$(ILLinkTrimInputPath)"
+ Condition="'$(ILLinkRewritePDBs)' == 'true' AND Exists('$(ILLinkTrimAssemblySymbols)')"
+ />
+
+ <PropertyGroup>
+ <ILLinkCmd>$(OverrideToolHost) "$(ILLinkToolPath)"</ILLinkCmd>
+ </PropertyGroup>
+
+ <Exec Command="$(ILLinkCmd) $(ILLinkArgs)" />
+ </Target>
+
+ <!-- ILLink reporting.
+ Only enabled when developer specifies a path to the AsmDiff tool with property AsmDiffCmd.
+ EG: AsmDiffCmd=d:\tools\asmdiff\asmdiff.exe
+ This is necessary until the AsmDiff tool is ported to .NET Core. -->
+ <Target Name="_CreateILLinkTrimAssemblyReports"
+ AfterTargets="ILLinkTrimAssembly"
+ Condition="'$(AsmDiffCmd)' != ''">
+ <PropertyGroup>
+ <AsmDiffArgs>$(AsmDiffArgs) $(ILLinkTrimInputAssembly)</AsmDiffArgs>
+ <AsmDiffArgs>$(AsmDiffArgs) $(ILLinkTrimAssemblyPath)</AsmDiffArgs>
+ <AsmDiffArgs>$(AsmDiffArgs) -includePrivateApis -includeInternalApis -alwaysDiffMembers -diffAttributes</AsmDiffArgs>
+
+ <AsmDiffReport>$(IntermediateOutputPath)$(TargetName).diff.html</AsmDiffReport>
+ <AsmDiffReportArgs>$(AsmDiffArgs) -out:$(AsmDiffReport)</AsmDiffReportArgs>
+ <AsmDiffReportArgs>$(AsmDiffReportArgs) -unchanged -changed -added -removed</AsmDiffReportArgs>
+
+ <AsmDiffList>$(IntermediateOutputPath)$(TargetName).diff.csv</AsmDiffList>
+ <AsmDiffListArgs>$(AsmDiffArgs) -out:$(AsmDiffList)</AsmDiffListArgs>
+ <AsmDiffListArgs>$(AsmDiffListArgs) -unchanged -changed -added -removed </AsmDiffListArgs>
+ <AsmDiffListArgs>$(AsmDiffListArgs) -diffWriter:CSV</AsmDiffListArgs>
+ </PropertyGroup>
+
+ <Exec Command="$(AsmDiffCmd) $(AsmDiffReportArgs)" />
+ <Message Text="Assembly trimming diff: $(AsmDiffReport)" />
+ <Exec Command="$(AsmDiffCmd) $(AsmDiffListArgs)" />
+ <Message Text="Assembly trimming report: $(AsmDiffList)" />
+ </Target>
+
+ <!-- Similar to _CheckForCompileOutputs and runs in the same places,
+ always set these even if compile didn't run. -->
+ <Target Name="_CheckForILLinkTrimAssemblyOutputs"
+ BeforeTargets="CopyFilesToOutputDirectory;_CleanGetCurrentAndPriorFileWrites"
+ Condition="'$(ILLinkTrimAssembly)' == 'true'">
+ <ItemGroup>
+ <PreTrimmedItem Condition="Exists('$(ILLinkTrimInputAssembly)')" Include="$(ILLinkTrimInputAssembly)" />
+ <PreTrimmedItem Condition="'$(ILLinkRewritePDBs)' == 'true' AND Exists('$(ILLinkTrimInputSymbols)')" Include="$(ILLinkTrimInputSymbols)" />
+ <FileWrites Include="@(PreTrimmedItem)" />
+
+ <TrimmedItem Condition="Exists('$(ILLinkTrimAssemblyPath)')" Include="$(ILLinkTrimAssemblyPath)" />
+ <TrimmedItem Condition="'$(ILLinkRewritePDBs)' == 'true' AND Exists('$(ILLinkTrimAssemblySymbols)')" Include="$(ILLinkTrimAssemblySymbols)" />
+
+ <TrimmingReport Condition="Exists('$(AsmDiffReport)')" Include="$(AsmDiffReport)" />
+ <TrimmingReport Condition="Exists('$(AsmDiffList)')" Include="$(AsmDiffList)" />
+ </ItemGroup>
+ </Target>
+</Project>
diff --git a/init-tools.sh b/init-tools.sh
index 946b087077..e4705a7410 100755
--- a/init-tools.sh
+++ b/init-tools.sh
@@ -43,10 +43,6 @@ get_current_linux_name() {
echo "alpine"
return 0
elif [ "$(cat /etc/*-release | grep -cim1 fedora)" -eq 1 ]; then
- if [ "$(cat /etc/*-release | grep -cim1 23)" -eq 1 ]; then
- echo "fedora.23"
- return 0
- fi
if [ "$(cat /etc/*-release | grep -cim1 24)" -eq 1 ]; then
echo "fedora.24"
return 0
diff --git a/perf.groovy b/perf.groovy
index 451ba02105..11655d0b2f 100644
--- a/perf.groovy
+++ b/perf.groovy
@@ -15,7 +15,6 @@ def projectFolder = Utilities.getFolderName(project) + '/' + Utilities.getFolder
def osGroupMap = ['Ubuntu14.04':'Linux',
'Ubuntu16.04':'Linux',
'Debian8.4':'Linux',
- 'Fedora23':'Linux',
'OSX':'OSX',
'Windows_NT':'Windows_NT',
'CentOS7.1': 'Linux',
@@ -27,7 +26,6 @@ def osGroupMap = ['Ubuntu14.04':'Linux',
def targetNugetRuntimeMap = ['OSX' : 'osx.10.10-x64',
'Ubuntu14.04' : 'ubuntu.14.04-x64',
'Ubuntu16.04' : 'ubuntu.16.04-x64',
- 'Fedora23' : 'fedora.23-x64',
'Debian8.4' : 'debian.8-x64',
'CentOS7.1' : 'centos.7-x64',
'OpenSUSE13.2' : 'opensuse.13.2-x64',
@@ -43,7 +41,6 @@ def osShortName = ['Windows 10': 'win10',
'CentOS7.1' : 'centos7.1',
'Debian8.4' : 'debian8.4',
'OpenSUSE13.2' : 'opensuse13.2',
- 'Fedora23' : 'fedora23',
'RHEL7.2' : 'rhel7.2']
diff --git a/pkg/Microsoft.NETCore.Targets/Microsoft.NETCore.Targets.builds b/pkg/Microsoft.NETCore.Targets/Microsoft.NETCore.Targets.builds
deleted file mode 100644
index a280e2a666..0000000000
--- a/pkg/Microsoft.NETCore.Targets/Microsoft.NETCore.Targets.builds
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
- <ItemGroup>
- <Project Include="Microsoft.NETCore.Targets.pkgproj"/>
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.traversal.targets))\dir.traversal.targets" />
-</Project> \ No newline at end of file
diff --git a/pkg/Microsoft.NETCore.Targets/Microsoft.NETCore.Targets.pkgproj b/pkg/Microsoft.NETCore.Targets/Microsoft.NETCore.Targets.pkgproj
deleted file mode 100644
index 0b95f5441f..0000000000
--- a/pkg/Microsoft.NETCore.Targets/Microsoft.NETCore.Targets.pkgproj
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
-
- <PropertyGroup>
- <PackageVersion>$(LineupPackageVersion)</PackageVersion>
- <IsLineupPackage>true</IsLineupPackage>
- <RuntimeFileSource>runtime.json</RuntimeFileSource>
- <SkipValidatePackage>true</SkipValidatePackage>
- </PropertyGroup>
-
- <Import Project="..\NETStandard.Library\NETStandard.Library.packages.targets" />
-
- <ItemGroup>
- <!-- make this package installable and noop in a packages.config-based project -->
- <File Include="$(PlaceHolderFile)">
- <TargetPath>lib/netstandard1.0</TargetPath>
- </File>
-
- <Package Include="System.Private.Uri" />
- <NativePackage Include="runtime.native.System.IO.Compression" />
- <NativePackage Include="runtime.native.System" />
- <NativePackage Include="runtime.native.System.Net.Http" />
- <NativePackage Include="runtime.native.System.Security.Cryptography" />
- <NativePackage Include="runtime.native.System.Security.Cryptography.Apple" />
- <NativePackage Include="runtime.native.System.Security.Cryptography.OpenSsl" />
- <NativePackage Include="runtime.native.System.Net.Security" />
- </ItemGroup>
-
- <ItemGroup>
- <LineupProjectReference Include="@(Package->'$(SourceDir)%(Identity)/pkg/%(Identity).pkgproj')" />
- <LineupProjectReference Include="@(NativePackage->'$(SourceDir)Native/pkg/%(Identity)/%(Identity).pkgproj')" />
- </ItemGroup>
- <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
-</Project>
diff --git a/pkg/Microsoft.NETCore.Targets/runtime.json b/pkg/Microsoft.NETCore.Targets/runtime.json
deleted file mode 100644
index 925514c361..0000000000
--- a/pkg/Microsoft.NETCore.Targets/runtime.json
+++ /dev/null
@@ -1,92 +0,0 @@
-{
- "supports": {
- "uwp.10.0.app": {
- "uap10.0": [
- "win10-x86",
- "win10-x86-aot",
- "win10-x64",
- "win10-x64-aot",
- "win10-arm",
- "win10-arm-aot"
- ]
- },
- "net45.app": {
- "net45": [
- "",
- "win-x86",
- "win-x64"
- ]
- },
- "net451.app": {
- "net451": [
- "",
- "win-x86",
- "win-x64"
- ]
- },
- "net452.app": {
- "net452": [
- "",
- "win-x86",
- "win-x64"
- ]
- },
- "net46.app": {
- "net46": [
- "",
- "win-x86",
- "win-x64"
- ]
- },
- "net461.app": {
- "net461": [
- "",
- "win-x86",
- "win-x64"
- ]
- },
- "net462.app": {
- "net462": [
- "",
- "win-x86",
- "win-x64"
- ]
- },
- "netcoreapp1.0.app": {
- "netcoreapp1.0": [
- "win7-x86",
- "win7-x64",
- "osx.10.11-x64",
- "centos.7-x64",
- "debian.8-x64",
- "linuxmint.17-x64",
- "opensuse.13.2-x64",
- "rhel.7.2-x64",
- "ubuntu.14.04-x64",
- "ubuntu.16.04-x64"
- ]
- },
- "win8.app": {
- "win8": ""
- },
- "win81.app": {
- "win81": ""
- },
- "wp8.app": {
- "wp8": ""
- },
- "wp81.app": {
- "wp81": ""
- },
- "wpa81.app": {
- "wpa81": ""
- },
- "dnxcore50.app": {
- "dnxcore50": [
- "win7-x86",
- "win7-x64"
- ]
- }
- }
- }
-
diff --git a/pkg/Microsoft.Private.CoreFx.NETCoreApp/Microsoft.Private.CoreFx.NETCoreApp.pkgproj b/pkg/Microsoft.Private.CoreFx.NETCoreApp/Microsoft.Private.CoreFx.NETCoreApp.pkgproj
index b8508c59cf..fb9b1f4775 100644
--- a/pkg/Microsoft.Private.CoreFx.NETCoreApp/Microsoft.Private.CoreFx.NETCoreApp.pkgproj
+++ b/pkg/Microsoft.Private.CoreFx.NETCoreApp/Microsoft.Private.CoreFx.NETCoreApp.pkgproj
@@ -27,7 +27,7 @@
<PropertyGroup>
<IsLineupPackage Condition="'$(PackageTargetRuntime)' == ''">true</IsLineupPackage>
- <PreventImplementationReference Condition="'$(PackageTargetRuntime)' != ''">true</PreventImplementationReference>
+ <PreventImplementationReference Condition="'$(PackageTargetRuntime)' != ''">true</PreventImplementationReference>
<TargetFrameworkName>netcoreapp</TargetFrameworkName>
<TargetFrameworkVersion>2.0</TargetFrameworkVersion>
<TargetFramework>$(TargetFrameworkName)$(TargetFrameworkVersion)</TargetFramework>
@@ -37,8 +37,6 @@
<RefBinDir>$(NETCoreAppPackageRefPath)</RefBinDir>
<LibBinDir>$(NETCoreAppPackageRuntimePath)</LibBinDir>
- <NETStandardLibraryPackage>NETStandard.Library2</NETStandardLibraryPackage>
- <NETStandardLibraryPackageVersion>2.0.0-beta-24709-0</NETStandardLibraryPackageVersion>
<NETStandardVersion>2.0</NETStandardVersion>
<!-- Include symbols in package by default-->
@@ -112,13 +110,15 @@
<Target Name="VerifyNETStandard" AfterTargets="Build">
<ItemGroup>
- <_NETStandardFile Include="$(PackagesDir)$(NETStandardLibraryPackage)\$(NETStandardLibraryPackageVersion)\ref\netstandard$(NETStandardVersion)\*.dll" />
+ <_NETStandardFile Include="$(PackagesDir)$(NETStandardPackageId)\$(NETStandardPackageVersion)\build\netstandard$(NETStandardVersion)\ref\*.dll" />
+ <!-- force a missing file there are no files found in the package -->
+ <_NETStandardFile Include="$(PackagesDir)$(NETStandardPackageId)\$(NETStandardPackageVersion)\build\netstandard$(NETStandardVersion)\ref\MISSING_REF_BUILD" Condition="'@(_NETStandardFile)' == ''" />
<_NETStandardMissingFile Include="@(_NETStandardFile->'%(FileName)')" Exclude="@(File->'%(FileName)')" />
<_NETStandardMissingFileError Include="@(_NETStandardMissingFile)" Exclude="@(SuppressNETStandardMissingFile)" />
<_NETStandardSuppressedMissingFile Include="@(_NETStandardMissingFile)" Exclude="@(_NETStandardMissingFileError)" />
</ItemGroup>
- <Message Condition="'@(_NETStandardSuppressedMissingFile)' != ''" Text="Files'@(_NETStandardSuppressedMissingFile)' are part of '$(NETStandardLibraryPackage)' but missing from this package. This error has been suppressed." />
- <Error Condition="'@(_NETStandardMissingFileError)' != ''" Text="Files '@(_NETStandardMissingFileError)' are part of '$(NETStandardLibraryPackage)' but missing from this package." />
+ <Message Condition="'@(_NETStandardSuppressedMissingFile)' != ''" Text="Files'@(_NETStandardSuppressedMissingFile)' are part of '$(NETStandardPackageId)' but missing from this package. This error has been suppressed." />
+ <Error Condition="'@(_NETStandardMissingFileError)' != ''" Text="Files '@(_NETStandardMissingFileError)' are part of '$(NETStandardPackageId)' but missing from this package." />
</Target>
<Target Name="GetSymbolPackageFiles" BeforeTargets="GetPackageFiles">
diff --git a/pkg/Microsoft.Private.CoreFx.NETCoreApp/Microsoft.Private.CoreFx.NETCoreApp.props b/pkg/Microsoft.Private.CoreFx.NETCoreApp/Microsoft.Private.CoreFx.NETCoreApp.props
index d971faf20e..1aa7c047b1 100644
--- a/pkg/Microsoft.Private.CoreFx.NETCoreApp/Microsoft.Private.CoreFx.NETCoreApp.props
+++ b/pkg/Microsoft.Private.CoreFx.NETCoreApp/Microsoft.Private.CoreFx.NETCoreApp.props
@@ -42,7 +42,6 @@
<Platform>armel</Platform>
</OfficialBuildRID>
<OfficialBuildRID Include="debian.8-x64" />
- <OfficialBuildRID Include="fedora.23-x64" />
<OfficialBuildRID Include="fedora.24-x64" />
<OfficialBuildRID Include="linux-x64" />
<OfficialBuildRID Include="opensuse.13.2-x64" />
diff --git a/pkg/Microsoft.Private.CoreFx.UAP/Microsoft.Private.CoreFx.UAP.pkgproj b/pkg/Microsoft.Private.CoreFx.UAP/Microsoft.Private.CoreFx.UAP.pkgproj
index 2811b7920a..116e2cd674 100644
--- a/pkg/Microsoft.Private.CoreFx.UAP/Microsoft.Private.CoreFx.UAP.pkgproj
+++ b/pkg/Microsoft.Private.CoreFx.UAP/Microsoft.Private.CoreFx.UAP.pkgproj
@@ -96,7 +96,9 @@
<Target Name="VerifyNETStandard" AfterTargets="Build">
<ItemGroup>
- <_NETStandardFile Include="$(PackagesDir)$(NETStandardPackageId)\$(NETStandardPackageVersion)\ref\netstandard$(NETStandardVersion)\*.dll" />
+ <_NETStandardFile Include="$(PackagesDir)$(NETStandardPackageId)\$(NETStandardPackageVersion)\build\netstandard$(NETStandardVersion)\ref\*.dll" />
+ <!-- force a missing file there are no files found in the package -->
+ <_NETStandardFile Include="$(PackagesDir)$(NETStandardPackageId)\$(NETStandardPackageVersion)\build\netstandard$(NETStandardVersion)\ref\MISSING_REF_BUILD" Condition="'@(_NETStandardFile)' == ''" />
<_NETStandardMissingFile Include="@(_NETStandardFile->'%(FileName)')" Exclude="@(File->'%(FileName)')" />
<_NETStandardMissingFileError Include="@(_NETStandardMissingFile)" Exclude="@(SuppressNETStandardMissingFile)" />
<_NETStandardSuppressedMissingFile Include="@(_NETStandardMissingFile)" Exclude="@(_NETStandardMissingFileError)" />
diff --git a/pkg/Microsoft.Private.PackageBaseline/packageIndex.json b/pkg/Microsoft.Private.PackageBaseline/packageIndex.json
index 25df2d23ec..a4f3bcee34 100644
--- a/pkg/Microsoft.Private.PackageBaseline/packageIndex.json
+++ b/pkg/Microsoft.Private.PackageBaseline/packageIndex.json
@@ -3117,7 +3117,8 @@
"AssemblyVersionInPackageVersion": {
"4.0.0.0": "4.0.0",
"4.1.0.0": "4.1.0",
- "4.1.1.0": "4.3.0"
+ "4.1.1.0": "4.3.0",
+ "4.1.2.0": "4.4.0"
}
},
"System.Resources.Reader": {
diff --git a/src/Common/src/Interop/Windows/Crypt32/Interop.CryptProtectMemory.cs b/src/Common/src/Interop/Windows/Crypt32/Interop.CryptProtectMemory.cs
deleted file mode 100644
index b10cb6a041..0000000000
--- a/src/Common/src/Interop/Windows/Crypt32/Interop.CryptProtectMemory.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-using System.Runtime.InteropServices;
-using System.Security;
-
-internal partial class Interop
-{
- internal partial class Crypt32
- {
- internal const uint CRYPTPROTECTMEMORY_BLOCK_SIZE = 16;
- internal const uint CRYPTPROTECTMEMORY_SAME_PROCESS = 0;
-
- [DllImport(Libraries.Crypt32, CharSet = CharSet.Unicode, SetLastError = true)]
- internal static extern bool CryptProtectMemory(SafeBSTRHandle pData, uint cbData, uint dwFlags);
-
- [DllImport(Libraries.Crypt32, CharSet = CharSet.Unicode, SetLastError = true)]
- internal static extern bool CryptUnprotectMemory(SafeBSTRHandle pData, uint cbData, uint dwFlags);
- }
-}
diff --git a/src/Common/src/Interop/Windows/NtDll/Interop.ZeroMemory.cs b/src/Common/src/Interop/Windows/NtDll/Interop.ZeroMemory.cs
deleted file mode 100644
index caa0329bd0..0000000000
--- a/src/Common/src/Interop/Windows/NtDll/Interop.ZeroMemory.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-using System.Runtime.InteropServices;
-using System.Security;
-
-internal partial class Interop
-{
- internal partial class NtDll
- {
- [DllImport(Libraries.NtDll, CharSet = CharSet.Unicode, EntryPoint = "RtlZeroMemory")]
- internal static extern void ZeroMemory(SafeBSTRHandle address, uint length);
-
- [DllImport(Libraries.NtDll, CharSet = CharSet.Unicode, EntryPoint = "RtlZeroMemory")]
- internal static extern void ZeroMemory(IntPtr address, UIntPtr length);
- }
-}
diff --git a/src/Common/src/Interop/Windows/advapi32/Interop.GetUserNameW.cs b/src/Common/src/Interop/Windows/advapi32/Interop.GetUserNameW.cs
deleted file mode 100644
index b59b536028..0000000000
--- a/src/Common/src/Interop/Windows/advapi32/Interop.GetUserNameW.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System.Runtime.InteropServices;
-using System.Text;
-
-internal partial class Interop
-{
- internal partial class Advapi32
- {
-#pragma warning disable BCL0015 // not available on Windows 7
- [DllImport(Libraries.Advapi32, CharSet = CharSet.Unicode, SetLastError = true)]
- internal static extern bool GetUserNameW([Out] StringBuilder lpBuffer, ref int lpnSize);
-#pragma warning restore BCL0015
- }
-}
diff --git a/src/Common/src/Interop/Windows/advapi32/Interop.RegEnumKeyEx.cs b/src/Common/src/Interop/Windows/advapi32/Interop.RegEnumKeyEx.cs
index 8469e3242a..bedf282773 100644
--- a/src/Common/src/Interop/Windows/advapi32/Interop.RegEnumKeyEx.cs
+++ b/src/Common/src/Interop/Windows/advapi32/Interop.RegEnumKeyEx.cs
@@ -15,7 +15,7 @@ internal partial class Interop
internal static extern unsafe int RegEnumKeyEx(
SafeRegistryHandle hKey,
int dwIndex,
- char* lpName,
+ char[] lpName,
ref int lpcbName,
int[] lpReserved,
[Out]StringBuilder lpClass,
diff --git a/src/Common/src/Interop/Windows/advapi32/Interop.RegEnumValue.cs b/src/Common/src/Interop/Windows/advapi32/Interop.RegEnumValue.cs
index 696723bafe..e02ba98fef 100644
--- a/src/Common/src/Interop/Windows/advapi32/Interop.RegEnumValue.cs
+++ b/src/Common/src/Interop/Windows/advapi32/Interop.RegEnumValue.cs
@@ -14,7 +14,7 @@ internal partial class Interop
internal static extern unsafe int RegEnumValue(
SafeRegistryHandle hKey,
int dwIndex,
- char* lpValueName,
+ char[] lpValueName,
ref int lpcbValueName,
IntPtr lpReserved_MustBeZero,
int[] lpType,
diff --git a/src/Common/src/Interop/Windows/kernel32/Interop.GetCurrentThreadId.cs b/src/Common/src/Interop/Windows/kernel32/Interop.GetCurrentThreadId.cs
deleted file mode 100644
index 91f812df8f..0000000000
--- a/src/Common/src/Interop/Windows/kernel32/Interop.GetCurrentThreadId.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-using System.Runtime.InteropServices;
-
-internal static partial class Interop
-{
- internal static partial class Kernel32
- {
- [DllImport(Interop.Libraries.Kernel32)]
- internal extern static int GetCurrentThreadId();
- }
-}
diff --git a/src/Common/src/Interop/Windows/kernel32/Interop.GetFileInformationByHandleEx.cs b/src/Common/src/Interop/Windows/kernel32/Interop.GetFileInformationByHandleEx.cs
deleted file mode 100644
index 146c4638ee..0000000000
--- a/src/Common/src/Interop/Windows/kernel32/Interop.GetFileInformationByHandleEx.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using Microsoft.Win32.SafeHandles;
-using System;
-using System.Runtime.InteropServices;
-
-internal partial class Interop
-{
- internal partial class Kernel32
- {
- [DllImport(Libraries.Kernel32, SetLastError = true)]
- internal static extern bool GetFileInformationByHandleEx(SafeFileHandle hFile, FILE_INFO_BY_HANDLE_CLASS FileInformationClass, out FILE_STANDARD_INFO lpFileInformation, uint dwBufferSize);
-
- internal partial struct FILE_STANDARD_INFO
- {
- internal long AllocationSize;
- internal long EndOfFile;
- internal uint NumberOfLinks;
- internal BOOL DeletePending;
- internal BOOL Directory;
- }
-
- }
-}
diff --git a/src/Common/src/Interop/Windows/kernel32/Interop.GetFileType_SafePipeHandle.cs b/src/Common/src/Interop/Windows/kernel32/Interop.GetFileType_SafePipeHandle.cs
deleted file mode 100644
index d97396ffb3..0000000000
--- a/src/Common/src/Interop/Windows/kernel32/Interop.GetFileType_SafePipeHandle.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-using System.Runtime.InteropServices;
-
-internal partial class Interop
-{
- internal partial class Kernel32
- {
- [DllImport(Libraries.Kernel32, SetLastError = true)]
- internal extern static uint GetFileType(IntPtr hFile);
- }
-}
diff --git a/src/Common/src/Interop/Windows/kernel32/Interop.GetLongPathNameW.cs b/src/Common/src/Interop/Windows/kernel32/Interop.GetLongPathNameW.cs
deleted file mode 100644
index 6caa3c607e..0000000000
--- a/src/Common/src/Interop/Windows/kernel32/Interop.GetLongPathNameW.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-using System.Runtime.InteropServices;
-
-partial class Interop
-{
- partial class Kernel32
- {
- /// <summary>
- /// WARNING: This method does not implicitly handle long paths. Use GetFullPath/PathHelper.
- /// </summary>
- [DllImport(Libraries.Kernel32, SetLastError = true, CharSet = CharSet.Unicode, BestFitMapping = false, ExactSpelling = true)]
- internal static extern uint GetLongPathNameW(SafeHandle lpszShortPath, SafeHandle lpszLongPath, uint cchBuffer);
- }
-}
diff --git a/src/Common/src/Interop/Windows/kernel32/Interop.GetTickCount64.cs b/src/Common/src/Interop/Windows/kernel32/Interop.GetTickCount64.cs
deleted file mode 100644
index c2a437c82b..0000000000
--- a/src/Common/src/Interop/Windows/kernel32/Interop.GetTickCount64.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System.Runtime.InteropServices;
-
-internal partial class Interop
-{
- internal partial class Kernel32
- {
- [DllImport(Libraries.Kernel32)]
- internal static extern long GetTickCount64();
- }
-}
diff --git a/src/Common/src/Interop/Windows/oleaut32/Interop.SysAllocStringLen.cs b/src/Common/src/Interop/Windows/oleaut32/Interop.SysAllocStringLen.cs
deleted file mode 100644
index 65da4eaaea..0000000000
--- a/src/Common/src/Interop/Windows/oleaut32/Interop.SysAllocStringLen.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-using System.Runtime.InteropServices;
-using System.Security;
-
-internal partial class Interop
-{
- internal partial class OleAut32
- {
- [DllImport(Libraries.OleAut32, CharSet = CharSet.Unicode)]
- internal static extern SafeBSTRHandle SysAllocStringLen(IntPtr src, uint len); // BSTR
- }
-}
diff --git a/src/Common/src/Interop/Windows/oleaut32/Interop.SysStringLen.cs b/src/Common/src/Interop/Windows/oleaut32/Interop.SysStringLen.cs
deleted file mode 100644
index 027d8eece9..0000000000
--- a/src/Common/src/Interop/Windows/oleaut32/Interop.SysStringLen.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-using System.Runtime.InteropServices;
-using System.Security;
-
-internal partial class Interop
-{
- internal partial class OleAut32
- {
- [DllImport(Libraries.OleAut32)]
- internal static extern uint SysStringLen(SafeBSTRHandle bstr);
-
- [DllImport(Libraries.OleAut32)]
- internal static extern uint SysStringLen(IntPtr bstr);
-
- [DllImport(Libraries.OleAut32)]
- internal static extern void SysFreeString(IntPtr bstr);
- }
-}
diff --git a/src/Common/src/Interop/Windows/user32/Interop.MessageBox.cs b/src/Common/src/Interop/Windows/user32/Interop.MessageBox.cs
deleted file mode 100644
index 7a864931fd..0000000000
--- a/src/Common/src/Interop/Windows/user32/Interop.MessageBox.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-using System.Runtime.InteropServices;
-
-internal partial class Interop
-{
- internal partial class User32
- {
- internal const int MB_ICONHAND = 0x00000010;
- internal const int MB_OKCANCEL = 0x00000001;
- internal const int MB_RIGHT = 0x00080000;
- internal const int MB_RTLREADING = 0x00100000;
- internal const int MB_TOPMOST = 0x00040000;
-
- internal const int IDCANCEL = 2;
- internal const int IDOK = 1;
-
- [DllImport(Libraries.User32, CharSet = CharSet.Unicode, EntryPoint = "MessageBoxW", ExactSpelling = true, SetLastError = true)]
- private static extern int MessageBoxSystem(IntPtr hWnd, string text, string caption, int type);
-
- internal static int MessageBox(IntPtr hWnd, string text, string caption, int type)
- {
- try
- {
- return MessageBoxSystem(hWnd, text, caption, type);
- }
- catch (DllNotFoundException)
- {
- return 0;
- }
- catch (TypeLoadException)
- {
- return 0;
- }
- }
- }
-}
diff --git a/src/Common/src/Microsoft/Win32/SafeHandles/CriticalHandleMinusOneIsInvalid.cs b/src/Common/src/Microsoft/Win32/SafeHandles/CriticalHandleMinusOneIsInvalid.cs
deleted file mode 100644
index a616931592..0000000000
--- a/src/Common/src/Microsoft/Win32/SafeHandles/CriticalHandleMinusOneIsInvalid.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-using System.Runtime.InteropServices;
-
-namespace Microsoft.Win32.SafeHandles
-{
- // Issue 2499: Replace ad-hoc definitions of SafeHandleZeroOrMinusOneIsInvalid with a single definition
- //
- // Other definitions of this type should be removed in favor of this definition.
- internal abstract class CriticalHandleMinusOneIsInvalid : CriticalHandle
- {
- protected CriticalHandleMinusOneIsInvalid() : base(new IntPtr(-1))
- {
- }
-
- public override bool IsInvalid
- {
- get { return handle == new IntPtr(-1); }
- }
- }
-}
diff --git a/src/Common/src/Microsoft/Win32/SafeHandles/SafeHandleMinusOneIsInvalid.cs b/src/Common/src/Microsoft/Win32/SafeHandles/SafeHandleMinusOneIsInvalid.cs
deleted file mode 100644
index b48e28f047..0000000000
--- a/src/Common/src/Microsoft/Win32/SafeHandles/SafeHandleMinusOneIsInvalid.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-using System.Runtime.InteropServices;
-
-namespace Microsoft.Win32.SafeHandles
-{
- // Issue 2499: Replace ad-hoc definitions of SafeHandleZeroOrMinusOneIsInvalid with a single definition
- //
- // Other definitions of this type should be removed in favor of this definition.
- internal abstract class SafeHandleMinusOneIsInvalid : SafeHandle
- {
- protected SafeHandleMinusOneIsInvalid(bool ownsHandle)
- : base(new IntPtr(-1), ownsHandle)
- {
- }
-
- public override bool IsInvalid
- {
- get { return handle == new IntPtr(-1); }
- }
- }
-}
diff --git a/src/Common/src/System/Drawing/ColorTable.cs b/src/Common/src/System/Drawing/ColorTable.cs
index 125dbb0a5d..10a7a53217 100644
--- a/src/Common/src/System/Drawing/ColorTable.cs
+++ b/src/Common/src/System/Drawing/ColorTable.cs
@@ -10,7 +10,6 @@ namespace System.Drawing
internal static class ColorTable
{
private static readonly Lazy<Dictionary<string, Color>> s_colorConstants = new Lazy<Dictionary<string, Color>>(GetColors);
- private static readonly Lazy<Dictionary<string, Color>> s_systemColorConstants = new Lazy<Dictionary<string, Color>>(GetSystemColors);
private static Dictionary<string, Color> GetColors()
{
@@ -19,17 +18,8 @@ namespace System.Drawing
return dict;
}
- private static Dictionary<string, Color> GetSystemColors()
- {
- var dict = new Dictionary<string, Color>(StringComparer.OrdinalIgnoreCase);
- FillConstants(dict, typeof(SystemColors));
- return dict;
- }
-
internal static Dictionary<string, Color> Colors => s_colorConstants.Value;
- internal static Dictionary<string, Color> SystemColors => s_systemColorConstants.Value;
-
private static void FillConstants(Dictionary<string, Color> colors, Type enumType)
{
const MethodAttributes attrs = MethodAttributes.Public | MethodAttributes.Static;
@@ -49,6 +39,12 @@ namespace System.Drawing
}
internal static bool TryGetNamedColor(string name, out Color result) =>
- Colors.TryGetValue(name, out result) || SystemColors.TryGetValue(name, out result);
+ Colors.TryGetValue(name, out result);
+
+ internal static bool IsKnownNamedColor(string name)
+ {
+ Color result;
+ return Colors.TryGetValue(name, out result);
+ }
}
} \ No newline at end of file
diff --git a/src/Common/src/System/Security/Cryptography/RSASecurityTransforms.cs b/src/Common/src/System/Security/Cryptography/RSASecurityTransforms.cs
index e2c6ab0c21..4b86406ab8 100644
--- a/src/Common/src/System/Security/Cryptography/RSASecurityTransforms.cs
+++ b/src/Common/src/System/Security/Cryptography/RSASecurityTransforms.cs
@@ -53,8 +53,8 @@ namespace System.Security.Cryptography
{
// All values are in bits.
// 1024 was achieved via experimentation.
- // 1024 and 1024+64 both generated successfully, 1024-64 produced errSecParam.
- new KeySizes(minSize: 1024, maxSize: 16384, skipSize: 64),
+ // 1024 and 1024+8 both generated successfully, 1024-8 produced errSecParam.
+ new KeySizes(minSize: 1024, maxSize: 16384, skipSize: 8),
};
}
}
@@ -470,7 +470,8 @@ namespace System.Security.Cryptography
parameters.Exponent = KeyBlobHelpers.TrimPaddingByte(privateKey.ReadIntegerBytes());
int modulusLen = parameters.Modulus.Length;
- int halfModulus = modulusLen / 2;
+ // Add one so that odd byte-length values (RSA 1032) get padded correctly.
+ int halfModulus = (modulusLen + 1) / 2;
parameters.D = KeyBlobHelpers.PadOrTrim(privateKey.ReadIntegerBytes(), modulusLen);
parameters.P = KeyBlobHelpers.PadOrTrim(privateKey.ReadIntegerBytes(), halfModulus);
diff --git a/src/Common/src/System/Xml/ExceptionType.cs b/src/Common/src/System/Xml/ExceptionType.cs
deleted file mode 100644
index 78997538dc..0000000000
--- a/src/Common/src/System/Xml/ExceptionType.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Xml
-{
- internal enum ExceptionType
- {
- ArgumentException,
- XmlException,
- }
-}
diff --git a/src/Common/src/System/Xml/Schema/XmlUntypedConverter.cs b/src/Common/src/System/Xml/Schema/XmlUntypedConverter.cs
deleted file mode 100644
index 46ca6c1583..0000000000
--- a/src/Common/src/System/Xml/Schema/XmlUntypedConverter.cs
+++ /dev/null
@@ -1,380 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Xml.Schema
-{
- // SUMMARY
- // =======
- // For each Xml type, there is a set of Clr types that can represent it. Some of these mappings involve
- // loss of fidelity. For example, xsd:dateTime can be represented as System.DateTime, but only at the expense
- // of normalizing the time zone. And xs:duration can be represented as System.TimeSpan, but only at the expense
- // of discarding variations such as "P50H", "P1D26H", "P2D2H", all of which are normalized as "P2D2H".
- //
- // Implementations of this class convert between the various Clr representations of Xml types. Note that
- // in *no* case is the Xml type ever modified. Only the Clr type is changed. This means that in cases where
- // the Xml type is part of the representation (such as XmlAtomicValue), the destination value is guaranteed
- // to have the same Xml type.
- //
- // For all converters, converting to typeof(object) is identical to converting to XmlSchemaType.Datatype.ValueType.
- //
- //
- // ATOMIC MAPPINGS
- // ===============
- //
- // -----------------------------------------------------------------------------------------------------------
- // Source/Destination System.String Other Clr Type
- // -----------------------------------------------------------------------------------------------------------
- // System.String No-op conversion. Use Xsd rules to convert from the string
- // to primitive, full-fidelity Clr type (use
- // XmlConvert where possible). Use Clr rules
- // to convert to destination type.
- // -----------------------------------------------------------------------------------------------------------
- // Other Clr Type Use Clr rules to convert from Use Clr rules to convert from source to
- // source type to primitive, full- destination type.
- // fidelity Clr type. Use Xsd rules
- // to convert to a string (use
- // XmlConvert where possible).
- // -----------------------------------------------------------------------------------------------------------
- //
- //
- // LIST MAPPINGS
- // =============
- // The following Clr types can be used to represent Xsd list types: IList, ICollection, IEnumerable, Type[],
- // String.
- //
- // -----------------------------------------------------------------------------------------------------------
- // Source/Destination System.String Clr List Type
- // -----------------------------------------------------------------------------------------------------------
- // System.String No-op conversion Tokenize the string by whitespace, create a
- // String[] from tokens, and follow List => List
- // rules.
- // -----------------------------------------------------------------------------------------------------------
- // Clr List Type Follow List => String[] rules, Create destination list having the same length
- // then concatenate strings from array, as the source list. For each item in the
- // separating adjacent strings with a source list, call the atomic converter to
- // single space character. convert to the destination type. The destination
- // item type for IList, ICollection, IEnumerable
- // is typeof(object). The destination item type
- // for Type[] is Type.
- // -----------------------------------------------------------------------------------------------------------
- //
- //
- // UNION MAPPINGS
- // ==============
- // Union types may only be represented using System.Xml.Schema.XmlAtomicValue or System.String. Either the
- // source type or the destination type must therefore always be either System.String or
- // System.Xml.Schema.XmlAtomicValue.
- //
- // -----------------------------------------------------------------------------------------------------------
- // Source/Destination System.String XmlAtomicValue Other Clr Type
- // -----------------------------------------------------------------------------------------------------------
- // System.String No-op conversion Follow System.String=> Call ParseValue in order to determine
- // Other Clr Type rules. the member type. Call ChangeType on
- // the member type's converter to convert
- // to desired Clr type.
- // -----------------------------------------------------------------------------------------------------------
- // XmlAtomicValue Follow XmlAtomicValue No-op conversion. Call ReadValueAs, where destinationType
- // => Other Clr Type is the desired Clr type.
- // rules.
- // -----------------------------------------------------------------------------------------------------------
- // Other Clr Type InvalidCastException InvalidCastException InvalidCastException
- // -----------------------------------------------------------------------------------------------------------
- //
- //
- // EXAMPLES
- // ========
- //
- // -----------------------------------------------------------------------------------------------------------
- // Source Destination
- // Xml Type Value Type Conversion Steps Explanation
- // -----------------------------------------------------------------------------------------------------------
- // xs:int "10" Byte "10" => 10M => (byte) 10 Primitive, full-fidelity for xs:int
- // is a truncated decimal
- // -----------------------------------------------------------------------------------------------------------
- // xs:int "10.10" Byte FormatException xs:integer parsing rules do not
- // allow fractional parts
- // -----------------------------------------------------------------------------------------------------------
- // xs:int 10.10M Byte 10.10M => (byte) 10 Default Clr rules truncate when
- // converting from Decimal to Byte
- // -----------------------------------------------------------------------------------------------------------
- // xs:int 10.10M Decimal 10.10M => 10.10M Decimal => Decimal is no-op
- // -----------------------------------------------------------------------------------------------------------
- // xs:int 10.10M String 10.10M => 10M => "10"
- // -----------------------------------------------------------------------------------------------------------
- // xs:int "hello" String "hello" => "hello" String => String is no-op
- // -----------------------------------------------------------------------------------------------------------
- // xs:byte "300" Int32 "300" => 300M => (int) 300
- // -----------------------------------------------------------------------------------------------------------
- // xs:byte 300 Byte 300 => 300M => OverflowException Clr overflows when converting from
- // Decimal to Byte
- // -----------------------------------------------------------------------------------------------------------
- // xs:byte 300 XmlAtomicValue new XmlAtomicValue(xs:byte, 300) Invalid atomic value created
- // -----------------------------------------------------------------------------------------------------------
- // xs:double 1.234f String 1.234f => 1.2339999675750732d => Converting a Single value to a Double
- // "1.2339999675750732" value zero-extends it in base-2, so
- // "garbage" digits appear when it's
- // converted to base-10.
- // -----------------------------------------------------------------------------------------------------------
- // xs:int* {1, "2", String {1, "2", 3.1M} => Delegate to xs:int converter to
- // 3.1M} {"1", "2", "3"} => "1 2 3" convert each item to a string.
- // -----------------------------------------------------------------------------------------------------------
- // xs:int* "1 2 3" Int32[] "1 2 3" => {"1", "2", "3"} =>
- // {1, 2, 3}
- // -----------------------------------------------------------------------------------------------------------
- // xs:int* {1, "2", Object[] {1, "2", 3.1M} => xs:int converter uses Int32 by default,
- // 3.1M} {(object)1, (object)2, (object)3} so returns boxed Int32 values.
- // -----------------------------------------------------------------------------------------------------------
- // (xs:int | "1 2001" XmlAtomicValue[] "1 2001" => {(xs:int) 1,
- // xs:gYear)* (xs:gYear) 2001}
- // -----------------------------------------------------------------------------------------------------------
- // (xs:int* | "1 2001" String "1 2001" No-op conversion even though
- // xs:gYear*) ParseValue would fail if it were called.
- // -----------------------------------------------------------------------------------------------------------
- // (xs:int* | "1 2001" Int[] XmlSchemaException ParseValue fails.
- // xs:gYear*)
- // -----------------------------------------------------------------------------------------------------------
- //
- internal static class XmlUntypedConverter
- {
- public static bool ToBoolean(string value)
- {
- if (value == null) throw new ArgumentNullException(nameof(value));
-
- return XmlConvert.ToBoolean((string)value);
- }
-
- private static DateTime UntypedAtomicToDateTime(string value)
- {
- return (DateTime)(new XsdDateTime(value, XsdDateTimeFlags.AllXsd));
- }
-
- public static DateTime ToDateTime(string value)
- {
- if (value == null) throw new ArgumentNullException(nameof(value));
-
- return UntypedAtomicToDateTime((string)value);
- }
-
- public static double ToDouble(string value)
- {
- if (value == null) throw new ArgumentNullException(nameof(value));
-
- return XmlConvert.ToDouble((string)value);
- }
-
- public static int ToInt32(string value)
- {
- if (value == null) throw new ArgumentNullException(nameof(value));
-
- return XmlConvert.ToInt32((string)value);
- }
-
- public static long ToInt64(string value)
- {
- if (value == null) throw new ArgumentNullException(nameof(value));
-
- return XmlConvert.ToInt64((string)value);
- }
-
- private static readonly Type DecimalType = typeof(decimal);
- private static readonly Type Int32Type = typeof(int);
- private static readonly Type Int64Type = typeof(long);
- private static readonly Type StringType = typeof(string);
- private static readonly Type ByteType = typeof(byte);
- private static readonly Type Int16Type = typeof(short);
- private static readonly Type SByteType = typeof(sbyte);
- private static readonly Type UInt16Type = typeof(ushort);
- private static readonly Type UInt32Type = typeof(uint);
- private static readonly Type UInt64Type = typeof(ulong);
- private static readonly Type DoubleType = typeof(double);
- private static readonly Type SingleType = typeof(float);
- private static readonly Type DateTimeType = typeof(DateTime);
- private static readonly Type DateTimeOffsetType = typeof(DateTimeOffset);
- private static readonly Type BooleanType = typeof(bool);
- private static readonly Type ByteArrayType = typeof(Byte[]);
- private static readonly Type XmlQualifiedNameType = typeof(XmlQualifiedName);
- private static readonly Type UriType = typeof(Uri);
- private static readonly Type TimeSpanType = typeof(TimeSpan);
-
- private static string Base64BinaryToString(byte[] value)
- {
- return Convert.ToBase64String(value);
- }
-
- private static string DateTimeToString(DateTime value)
- {
- return (new XsdDateTime(value, XsdDateTimeFlags.DateTime)).ToString();
- }
-
- private static string DateTimeOffsetToString(DateTimeOffset value)
- {
- return (new XsdDateTime(value, XsdDateTimeFlags.DateTime)).ToString();
- }
-
- private static string QNameToString(XmlQualifiedName qname, IXmlNamespaceResolver nsResolver)
- {
- string prefix;
-
- if (nsResolver == null)
- return string.Concat("{", qname.Namespace, "}", qname.Name);
-
- prefix = nsResolver.LookupPrefix(qname.Namespace);
- if (prefix == null)
- throw new InvalidCastException(SR.Format(SR.XmlConvert_TypeNoPrefix, qname.ToString(), qname.Namespace));
-
- return (prefix.Length != 0) ? string.Concat(prefix, ":", qname.Name) : qname.Name;
- }
-
- private static string AnyUriToString(Uri value)
- {
- return value.OriginalString;
- }
-
- public static string ToString(object value, IXmlNamespaceResolver nsResolver)
- {
- if (value == null) throw new ArgumentNullException(nameof(value));
-
- Type sourceType = value.GetType();
-
- if (sourceType == BooleanType) return XmlConvert.ToString((bool)value);
- if (sourceType == ByteType) return XmlConvert.ToString((byte)value);
- if (sourceType == ByteArrayType) return Base64BinaryToString((byte[])value);
- if (sourceType == DateTimeType) return DateTimeToString((DateTime)value);
- if (sourceType == DateTimeOffsetType) return DateTimeOffsetToString((DateTimeOffset)value);
- if (sourceType == DecimalType) return XmlConvert.ToString((decimal)value);
- if (sourceType == DoubleType) return XmlConvert.ToString((double)value);
- if (sourceType == Int16Type) return XmlConvert.ToString((short)value);
- if (sourceType == Int32Type) return XmlConvert.ToString((int)value);
- if (sourceType == Int64Type) return XmlConvert.ToString((long)value);
- if (sourceType == SByteType) return XmlConvert.ToString((sbyte)value);
- if (sourceType == SingleType) return XmlConvert.ToString((float)value);
- if (sourceType == StringType) return ((string)value);
- if (sourceType == TimeSpanType) return XmlConvert.ToString((TimeSpan)value);
- if (sourceType == UInt16Type) return XmlConvert.ToString((ushort)value);
- if (sourceType == UInt32Type) return XmlConvert.ToString((uint)value);
- if (sourceType == UInt64Type) return XmlConvert.ToString((ulong)value);
- Uri valueAsUri = value as Uri;
- if (valueAsUri != null) return AnyUriToString(valueAsUri);
- XmlQualifiedName valueAsXmlQualifiedName = value as XmlQualifiedName;
- if (valueAsXmlQualifiedName != null) return QNameToString(valueAsXmlQualifiedName, nsResolver);
-
- throw new InvalidCastException(SR.Format(SR.XmlConvert_TypeToString, sourceType.Name));
- }
-
- private static byte[] StringToBase64Binary(string value)
- {
- return Convert.FromBase64String(XmlConvertEx.TrimString(value));
- }
-
- private static short Int32ToInt16(int value)
- {
- if (value < (int)Int16.MinValue || value > (int)Int16.MaxValue)
- throw new OverflowException(SR.Format(SR.XmlConvert_Overflow, new string[] { XmlConvert.ToString(value), nameof(Int16) }));
-
- return (short)value;
- }
-
- private static byte Int32ToByte(int value)
- {
- if (value < (int)Byte.MinValue || value > (int)Byte.MaxValue)
- throw new OverflowException(SR.Format(SR.XmlConvert_Overflow, new string[] { XmlConvert.ToString(value), nameof(Byte) }));
-
- return (byte)value;
- }
-
- private static ulong DecimalToUInt64(decimal value)
- {
- if (value < (decimal)UInt64.MinValue || value > (decimal)UInt64.MaxValue)
- throw new OverflowException(SR.Format(SR.XmlConvert_Overflow, new string[] { XmlConvert.ToString(value), nameof(UInt64) }));
-
- return (ulong)value;
- }
-
- private static sbyte Int32ToSByte(int value)
- {
- if (value < (int)SByte.MinValue || value > (int)SByte.MaxValue)
- throw new OverflowException(SR.Format(SR.XmlConvert_Overflow, new string[] { XmlConvert.ToString(value), nameof(SByte) }));
-
- return (sbyte)value;
- }
-
- private static DateTimeOffset UntypedAtomicToDateTimeOffset(string value)
- {
- return (DateTimeOffset)(new XsdDateTime(value, XsdDateTimeFlags.AllXsd));
- }
-
- private static XmlQualifiedName StringToQName(string value, IXmlNamespaceResolver nsResolver)
- {
- string prefix, localName, ns;
-
- value = value.Trim();
-
- // Parse prefix:localName
- try
- {
- ValidateNames.ParseQNameThrow(value, out prefix, out localName);
- }
- catch (XmlException e)
- {
- throw new FormatException(e.Message);
- }
-
- // Throw error if no namespaces are in scope
- if (nsResolver == null)
- throw new InvalidCastException(SR.Format(SR.XmlConvert_TypeNoNamespace, value, prefix));
-
- // Lookup namespace
- ns = nsResolver.LookupNamespace(prefix);
- if (ns == null)
- throw new InvalidCastException(SR.Format(SR.XmlConvert_TypeNoNamespace, value, prefix));
-
- // Create XmlQualifiedName
- return new XmlQualifiedName(localName, ns);
- }
-
- private static ushort Int32ToUInt16(int value)
- {
- if (value < (int)UInt16.MinValue || value > (int)UInt16.MaxValue)
- throw new OverflowException(SR.Format(SR.XmlConvert_Overflow, new string[] { XmlConvert.ToString(value), nameof(UInt16) }));
-
- return (ushort)value;
- }
-
- private static uint Int64ToUInt32(long value)
- {
- if (value < (long)UInt32.MinValue || value > (long)UInt32.MaxValue)
- throw new OverflowException(SR.Format(SR.XmlConvert_Overflow, new string[] { XmlConvert.ToString(value), nameof(UInt32) }));
-
- return (uint)value;
- }
-
- public static object ChangeType(string value, Type destinationType, IXmlNamespaceResolver nsResolver)
- {
- if (value == null) throw new ArgumentNullException(nameof(value));
- if (destinationType == null) throw new ArgumentNullException(nameof(destinationType));
-
- if (destinationType == BooleanType) return XmlConvert.ToBoolean((string)value);
- if (destinationType == ByteType) return Int32ToByte(XmlConvert.ToInt32((string)value));
- if (destinationType == ByteArrayType) return StringToBase64Binary((string)value);
- if (destinationType == DateTimeType) return UntypedAtomicToDateTime((string)value);
- if (destinationType == DateTimeOffsetType) return XmlConvert.ToDateTimeOffset((string)value);
- if (destinationType == DecimalType) return XmlConvert.ToDecimal((string)value);
- if (destinationType == DoubleType) return XmlConvert.ToDouble((string)value);
- if (destinationType == Int16Type) return Int32ToInt16(XmlConvert.ToInt32((string)value));
- if (destinationType == Int32Type) return XmlConvert.ToInt32((string)value);
- if (destinationType == Int64Type) return XmlConvert.ToInt64((string)value);
- if (destinationType == SByteType) return Int32ToSByte(XmlConvert.ToInt32((string)value));
- if (destinationType == SingleType) return XmlConvert.ToSingle((string)value);
- if (destinationType == TimeSpanType) return XmlConvert.ToTimeSpan((string)value);
- if (destinationType == UInt16Type) return Int32ToUInt16(XmlConvert.ToInt32((string)value));
- if (destinationType == UInt32Type) return Int64ToUInt32(XmlConvert.ToInt64((string)value));
- if (destinationType == UInt64Type) return DecimalToUInt64(XmlConvert.ToDecimal((string)value));
- if (destinationType == UriType) return XmlConvertEx.ToUri((string)value);
- if (destinationType == XmlQualifiedNameType) return StringToQName((string)value, nsResolver);
- if (destinationType == StringType) return ((string)value);
-
- throw new InvalidCastException(SR.Format(SR.XmlConvert_TypeFromString, destinationType.Name));
- }
- }
-}
diff --git a/src/Common/src/System/Xml/XPathNavigatorEx.cs b/src/Common/src/System/Xml/XPathNavigatorEx.cs
deleted file mode 100644
index 25a2cf3838..0000000000
--- a/src/Common/src/System/Xml/XPathNavigatorEx.cs
+++ /dev/null
@@ -1,80 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Xml.XPath
-{
- internal static class XPathNavigatorEx
- {
- // Get mask that will allow XPathNodeType content matching to be performed using only a shift and an and operation
- private const int AllMask = 0x7FFFFFFF;
- private const int NoAttrNmspMask = AllMask & ~(1 << (int)XPathNodeType.Attribute) & ~(1 << (int)XPathNodeType.Namespace);
- private const int TextMask = (1 << (int)XPathNodeType.Text) | (1 << (int)XPathNodeType.SignificantWhitespace) | (1 << (int)XPathNodeType.Whitespace);
- private static readonly int[] ContentKindMasks = {
- (1 << (int) XPathNodeType.Root), // Root
- (1 << (int) XPathNodeType.Element), // Element
- 0, // Attribute (not content)
- 0, // Namespace (not content)
- TextMask, // Text
- (1 << (int) XPathNodeType.SignificantWhitespace), // SignificantWhitespace
- (1 << (int) XPathNodeType.Whitespace), // Whitespace
- (1 << (int) XPathNodeType.ProcessingInstruction), // ProcessingInstruction
- (1 << (int) XPathNodeType.Comment), // Comment
- NoAttrNmspMask, // All
- };
-
- public static int GetContentKindMask(XPathNodeType type)
- {
- return ContentKindMasks[(int)type];
- }
-
- public static int GetKindMask(XPathNodeType type)
- {
- if (type == XPathNodeType.All)
- return AllMask;
- else if (type == XPathNodeType.Text)
- return TextMask;
-
- return (1 << (int)type);
- }
-
- public static bool MoveToNonDescendant(this XPathNavigator xpNavigator)
- {
- // If current node is document, there is no next non-descendant
- if (xpNavigator.NodeType == XPathNodeType.Root)
- return false;
-
- // If sibling exists, it is the next non-descendant
- if (xpNavigator.MoveToNext())
- return true;
-
- // The current node is either an attribute, namespace, or last child node
- XPathNavigator navSave = xpNavigator.Clone();
-
- if (!xpNavigator.MoveToParent())
- return false;
-
- switch (navSave.NodeType)
- {
- case XPathNodeType.Attribute:
- case XPathNodeType.Namespace:
- // Next node in document order is first content-child of parent
- if (xpNavigator.MoveToFirstChild())
- return true;
- break;
- }
-
- while (!xpNavigator.MoveToNext())
- {
- if (!xpNavigator.MoveToParent())
- {
- // Restore original position and return false
- xpNavigator.MoveTo(navSave);
- return false;
- }
- }
-
- return true;
- }
- }
-}
diff --git a/src/Common/src/System/Xml/XmlAttributeCollectionEx.cs b/src/Common/src/System/Xml/XmlAttributeCollectionEx.cs
deleted file mode 100644
index 3022244eb5..0000000000
--- a/src/Common/src/System/Xml/XmlAttributeCollectionEx.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Xml
-{
- internal static class XmlAttributeCollectionEx
- {
- public static int FindNodeOffsetNS(this XmlAttributeCollection collection, XmlAttribute node)
- {
- for (int i = 0; i < collection.Count; i++)
- {
- XmlAttribute tmp = collection[i];
- if (tmp.LocalName == node.LocalName
- && tmp.NamespaceURI == node.NamespaceURI)
- {
- return i;
- }
- }
- return -1;
- }
- }
-}
diff --git a/src/Common/src/System/Xml/XmlConst.cs b/src/Common/src/System/Xml/XmlConst.cs
deleted file mode 100644
index 58edbf5cb4..0000000000
--- a/src/Common/src/System/Xml/XmlConst.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Xml
-{
- /// <summary>
- /// This class defines a set of common strings for sharing across multiple source files.
- /// </summary>
- internal static class XmlConst
- {
- #region Reserved namespaces
- internal const string ReservedNsXml = "http://www.w3.org/XML/1998/namespace";
- internal const string ReservedNsXmlNs = "http://www.w3.org/2000/xmlns/";
- internal const string ReservedNsDataType = "urn:schemas-microsoft-com:datatypes";
- internal const string ReservedNsDataTypeAlias = "uuid:C2F41010-65B3-11D1-A29F-00AA00C14882";
- internal const string ReservedNsDataTypeOld = "urn:uuid:C2F41010-65B3-11D1-A29F-00AA00C14882/";
- internal const string ReservedNsMsxsl = "urn:schemas-microsoft-com:xslt";
- internal const string ReservedNsXdr = "urn:schemas-microsoft-com:xml-data";
- internal const string ReservedNsXslDebug = "urn:schemas-microsoft-com:xslt-debug";
- internal const string ReservedNsXdrAlias = "uuid:BDC6E3F0-6DA3-11D1-A2A3-00AA00C14882";
- internal const string ReservedNsWdXsl = "http://www.w3.org/TR/WD-xsl";
- internal const string ReservedNsXs = "http://www.w3.org/2001/XMLSchema";
- internal const string ReservedNsXsd = "http://www.w3.org/2001/XMLSchema-datatypes";
- internal const string ReservedNsXsi = "http://www.w3.org/2001/XMLSchema-instance";
- internal const string ReservedNsXslt = "http://www.w3.org/1999/XSL/Transform";
- internal const string ReservedNsExsltCommon = "http://exslt.org/common";
- internal const string ReservedNsExsltDates = "http://exslt.org/dates-and-times";
- internal const string ReservedNsExsltMath = "http://exslt.org/math";
- internal const string ReservedNsExsltRegExps = "http://exslt.org/regular-expressions";
- internal const string ReservedNsExsltSets = "http://exslt.org/sets";
- internal const string ReservedNsExsltStrings = "http://exslt.org/strings";
- internal const string ReservedNsXQueryFunc = "http://www.w3.org/2003/11/xpath-functions";
- internal const string ReservedNsXQueryDataType = "http://www.w3.org/2003/11/xpath-datatypes";
- internal const string ReservedNsCollationBase = "http://collations.microsoft.com";
- internal const string ReservedNsCollCodePoint = "http://www.w3.org/2004/10/xpath-functions/collation/codepoint";
- internal const string ReservedNsXsltInternal = "http://schemas.microsoft.com/framework/2003/xml/xslt/internal";
- #endregion
-
- #region Local namespaces
- public const string NsXml = "xml";
- public const string NsXmlNs = "xmlns";
- #endregion
-
- #region Attributes
- public const string AttrLang = "lang";
- public const string AttrSpace = "space";
- public const string AttrSpaceValueDefault = "default";
- public const string AttrSpaceValuePreserve = "preserve";
- public const string AttrXmlLang = NsXml + ":" + AttrLang;
- #endregion
-
- public const string XmlDeclarationTag = "xml";
- }
-}
diff --git a/src/Common/src/System/Xml/XmlConvertEx.cs b/src/Common/src/System/Xml/XmlConvertEx.cs
deleted file mode 100644
index 837078dae8..0000000000
--- a/src/Common/src/System/Xml/XmlConvertEx.cs
+++ /dev/null
@@ -1,274 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System.Globalization;
-
-namespace System.Xml
-{
- internal static class XmlConvertEx
- {
- private static XmlCharType xmlCharType = XmlCharType.Instance;
- private static readonly char[] WhitespaceChars = new char[] { ' ', '\t', '\n', '\r' };
-
- #region XPath
- public static double ToXPathDouble(object o)
- {
- string str = o as string;
- if (str != null)
- {
- str = TrimString(str);
- if (str.Length != 0 && str[0] != '+')
- {
- double d;
- if (Double.TryParse(str, NumberStyles.AllowLeadingSign | NumberStyles.AllowDecimalPoint | NumberStyles.AllowTrailingWhite, NumberFormatInfo.InvariantInfo, out d))
- {
- return d;
- }
- }
- return Double.NaN;
- }
- if (o is double)
- {
- return (double)o;
- }
- if (o is bool)
- {
- return ((bool)o) ? 1.0 : 0.0;
- }
- try
- {
- return Convert.ToDouble(o, NumberFormatInfo.InvariantInfo);
- }
- catch (FormatException) { }
- catch (OverflowException) { }
- catch (ArgumentNullException) { }
- return Double.NaN;
- }
-
- // Rounding to closest integer.
- // If there are few such integers then we choose the one closest to positive infinity
- public static double XPathRound(double value)
- {
- double temp = Math.Round(value);
- return (value - temp == 0.5) ? temp + 1 : temp;
- }
- #endregion
-
- public static string TrimString(string value)
- {
- return value.Trim(WhitespaceChars);
- }
-
- public static string[] SplitString(string value)
- {
- return value.Split(WhitespaceChars, StringSplitOptions.RemoveEmptyEntries);
- }
-
- public static Uri ToUri(string s)
- {
- if (!string.IsNullOrEmpty(s))
- { //string.Empty is a valid uri but not " "
- s = TrimString(s);
- if (s.Length == 0 || s.IndexOf("##", StringComparison.Ordinal) != -1)
- {
- throw new FormatException(SR.Format(SR.XmlConvert_BadFormat, s, nameof(Uri)));
- }
- }
- Uri uri;
- if (!Uri.TryCreate(s, UriKind.RelativeOrAbsolute, out uri))
- {
- throw new FormatException(SR.Format(SR.XmlConvert_BadFormat, s, nameof(Uri)));
- }
- return uri;
- }
-
- public static string EscapeValueForDebuggerDisplay(string value)
- {
- System.Text.StringBuilder sb = null;
- int i = 0;
- int start = 0;
- while (i < value.Length)
- {
- char ch = value[i];
- if ((int)ch < 0x20 || ch == '"')
- {
- if (sb == null)
- {
- sb = new System.Text.StringBuilder(value.Length + 4);
- }
- if (i - start > 0)
- {
- sb.Append(value, start, i - start);
- }
- start = i + 1;
- switch (ch)
- {
- case '"':
- sb.Append("\\\"");
- break;
- case '\r':
- sb.Append("\\r");
- break;
- case '\n':
- sb.Append("\\n");
- break;
- case '\t':
- sb.Append("\\t");
- break;
- default:
- sb.Append(ch);
- break;
- }
- }
- i++;
- }
- if (sb == null)
- {
- return value;
- }
- if (i - start > 0)
- {
- sb.Append(value, start, i - start);
- }
- return sb.ToString();
- }
-
- public static Exception CreateInvalidSurrogatePairException(char low, char hi)
- {
- return CreateInvalidSurrogatePairException(low, hi, ExceptionType.ArgumentException);
- }
-
- private static Exception CreateInvalidSurrogatePairException(char low, char hi, ExceptionType exceptionType)
- {
- return CreateInvalidSurrogatePairException(low, hi, exceptionType, 0, 0);
- }
-
- private static Exception CreateInvalidSurrogatePairException(char low, char hi, ExceptionType exceptionType, int lineNo, int linePos)
- {
- string[] args = new string[] {
- ((uint)hi).ToString( "X", CultureInfo.InvariantCulture ),
- ((uint)low).ToString( "X", CultureInfo.InvariantCulture )
- };
- return CreateException(SR.Xml_InvalidSurrogatePairWithArgs, args, exceptionType, lineNo, linePos);
- }
-
- private static Exception CreateException(string res, string[] args, ExceptionType exceptionType, int lineNo, int linePos)
- {
- switch (exceptionType)
- {
- case ExceptionType.ArgumentException:
- return new ArgumentException(SR.Format(res, args));
- case ExceptionType.XmlException:
- default:
- return new System.Xml.XmlException(SR.Format(res, args), null, lineNo, linePos);
- }
- }
-
- private static Exception CreateException(string res, string arg, ExceptionType exceptionType, int lineNo, int linePos)
- {
- return CreateException(res, new string[] { arg }, exceptionType, lineNo, linePos);
- }
-
- private static Exception CreateException(string res, ExceptionType exceptionType, int lineNo, int linePos)
- {
- return CreateException(res, Array.Empty<string>(), exceptionType, lineNo, linePos);
- }
-
- public static Exception CreateInvalidCharException(string data, int invCharPos, ExceptionType exceptionType)
- {
- return CreateException(SR.Xml_InvalidCharacter, XmlExceptionHelper.BuildCharExceptionArgs(data, invCharPos), exceptionType, 0, invCharPos + 1);
- }
-
- public static Exception CreateInvalidHighSurrogateCharException(char hi)
- {
- return CreateInvalidHighSurrogateCharException(hi, ExceptionType.ArgumentException);
- }
-
- private static Exception CreateInvalidHighSurrogateCharException(char hi, ExceptionType exceptionType)
- {
- return CreateInvalidHighSurrogateCharException(hi, exceptionType, 0, 0);
- }
-
- private static Exception CreateInvalidHighSurrogateCharException(char hi, ExceptionType exceptionType, int lineNo, int linePos)
- {
- return CreateException(SR.Xml_InvalidSurrogateHighChar, ((uint)hi).ToString("X", CultureInfo.InvariantCulture), exceptionType, lineNo, linePos);
- }
-
- public static void VerifyCharData(string data, ExceptionType exceptionType)
- {
- VerifyCharData(data, exceptionType, exceptionType);
- }
-
- public static unsafe void VerifyCharData(string data, ExceptionType invCharExceptionType, ExceptionType invSurrogateExceptionType)
- {
- if (string.IsNullOrEmpty(data))
- {
- return;
- }
-
- int i = 0;
- int len = data.Length;
- for (; ;)
- {
- while (i < len && (xmlCharType.charProperties[data[i]] & XmlCharType.fCharData) != 0)
- {
- i++;
- }
- if (i == len)
- {
- return;
- }
-
- char ch = data[i];
- if (XmlCharType.IsHighSurrogate(ch))
- {
- if (i + 1 == len)
- {
- throw CreateException(SR.Xml_InvalidSurrogateMissingLowChar, invSurrogateExceptionType, 0, i + 1);
- }
- ch = data[i + 1];
- if (XmlCharType.IsLowSurrogate(ch))
- {
- i += 2;
- continue;
- }
- else
- {
- throw CreateInvalidSurrogatePairException(data[i + 1], data[i], invSurrogateExceptionType, 0, i + 1);
- }
- }
- throw CreateInvalidCharException(data, i, invCharExceptionType);
- }
- }
-
- public static string VerifyQName(string name, ExceptionType exceptionType)
- {
- if (string.IsNullOrEmpty(name))
- {
- throw new ArgumentNullException(nameof(name));
- }
-
- int colonPosition = -1;
-
- int endPos = ValidateNames.ParseQName(name, 0, out colonPosition);
- if (endPos != name.Length)
- {
- throw CreateException(SR.Xml_BadNameChar, XmlExceptionHelper.BuildCharExceptionArgs(name, endPos), exceptionType, 0, endPos + 1);
- }
- return name;
- }
-
- // Trim beginning of a string using XML whitespace characters
- public static string TrimStringStart(string value)
- {
- return value.TrimStart(WhitespaceChars);
- }
-
- // Trim end of a string using XML whitespace characters
- public static string TrimStringEnd(string value)
- {
- return value.TrimEnd(WhitespaceChars);
- }
- }
-}
diff --git a/src/Common/src/System/Xml/XmlNameHelper.cs b/src/Common/src/System/Xml/XmlNameHelper.cs
deleted file mode 100644
index 7c7fe9d7ba..0000000000
--- a/src/Common/src/System/Xml/XmlNameHelper.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Xml
-{
- internal static class XmlNameHelper
- {
- public static int GetHashCode(string name)
- {
- int hashCode = 0;
- if (name != null)
- {
- for (int i = name.Length - 1; i >= 0; i--)
- {
- char ch = name[i];
- if (ch == ':') break;
- hashCode += (hashCode << 7) ^ ch;
- }
- hashCode -= hashCode >> 17;
- hashCode -= hashCode >> 11;
- hashCode -= hashCode >> 5;
- }
- return hashCode;
- }
- }
-}
diff --git a/src/Common/src/System/Xml/XmlParsingHelper.cs b/src/Common/src/System/Xml/XmlParsingHelper.cs
deleted file mode 100644
index 633033b20f..0000000000
--- a/src/Common/src/System/Xml/XmlParsingHelper.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System.IO;
-
-namespace System.Xml
-{
- internal static class XmlParsingHelper
- {
- public static void ParseXmlDeclarationValue(string strValue, out string version, out string encoding, out string standalone)
- {
- version = null;
- encoding = null;
- standalone = null;
- TextReader fragmentReader = new StringReader(strValue);
- XmlReaderSettings settings = new XmlReaderSettings { ConformanceLevel = ConformanceLevel.Fragment };
- XmlReader tempreader = XmlReader.Create(fragmentReader, settings);
- try
- {
- tempreader.Read();
- //get version info.
- if (tempreader.MoveToAttribute("version"))
- version = tempreader.Value;
- //get encoding info
- if (tempreader.MoveToAttribute("encoding"))
- encoding = tempreader.Value;
- //get standalone info
- if (tempreader.MoveToAttribute("standalone"))
- standalone = tempreader.Value;
- }
- finally
- {
- tempreader.Dispose();
- }
- }
- }
-}
diff --git a/src/Common/src/System/Xml/XmlRawWriterBase64Encoder.cs b/src/Common/src/System/Xml/XmlRawWriterBase64Encoder.cs
deleted file mode 100644
index f82e41fa24..0000000000
--- a/src/Common/src/System/Xml/XmlRawWriterBase64Encoder.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Xml
-{
- internal partial class XmlRawWriterBase64Encoder : Base64Encoder
- {
- XmlRawWriter rawWriter;
-
- internal XmlRawWriterBase64Encoder(XmlRawWriter rawWriter)
- {
- this.rawWriter = rawWriter;
- }
-
- internal override void WriteChars(char[] chars, int index, int count)
- {
- rawWriter.WriteRaw(chars, index, count);
- }
- }
-}
diff --git a/src/Common/src/System/Xml/XmlReaderExtensions.cs b/src/Common/src/System/Xml/XmlReaderExtensions.cs
deleted file mode 100644
index 801d7198cb..0000000000
--- a/src/Common/src/System/Xml/XmlReaderExtensions.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Xml
-{
- internal static class XmlReaderExtensions
- {
- public static bool CanReadContentAs(this System.Xml.XmlReader reader)
- {
- const uint CanReadContentAsBitmap = 0x1E1BC;
- return 0 != (CanReadContentAsBitmap & (1 << (int)reader.NodeType));
- }
-
- private static string AddLineInfo(string message, System.Xml.IXmlLineInfo lineInfo)
- {
- if (lineInfo != null)
- {
- string[] lineArgs = new string[2];
- lineArgs[0] = lineInfo.LineNumber.ToString(System.Globalization.CultureInfo.InvariantCulture);
- lineArgs[1] = lineInfo.LinePosition.ToString(System.Globalization.CultureInfo.InvariantCulture);
- message += " " + SR.Format(SR.Xml_ErrorPosition, lineArgs);
- }
- return message;
- }
-
- public static Exception CreateReadContentAsException(this System.Xml.XmlReader reader, string methodName)
- {
- System.Xml.IXmlLineInfo lineInfo = reader as System.Xml.IXmlLineInfo;
- return new InvalidOperationException(AddLineInfo(SR.Format(SR.Xml_InvalidReadContentAs, methodName, reader.NodeType), lineInfo));
- }
-
- public static Exception CreateReadElementContentAsException(this System.Xml.XmlReader reader, string methodName)
- {
- System.Xml.IXmlLineInfo lineInfo = reader as System.Xml.IXmlLineInfo;
- return new InvalidOperationException(AddLineInfo(SR.Format(SR.Xml_InvalidReadElementContentAs, methodName, reader.NodeType), lineInfo));
- }
- }
-}
diff --git a/src/Common/src/System/Xml/XmlStandalone.cs b/src/Common/src/System/Xml/XmlStandalone.cs
deleted file mode 100644
index c652737436..0000000000
--- a/src/Common/src/System/Xml/XmlStandalone.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Xml
-{
- internal enum XmlStandalone
- {
- // Do not change the constants - XmlBinaryWriter depends in it
- Omit = 0,
- Yes = 1,
- No = 2,
- }
-}
diff --git a/src/Common/src/System/Xml/XmlTextWriterBase64Encoder.cs b/src/Common/src/System/Xml/XmlTextWriterBase64Encoder.cs
deleted file mode 100644
index 799d5feb76..0000000000
--- a/src/Common/src/System/Xml/XmlTextWriterBase64Encoder.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Xml
-{
- internal partial class XmlTextWriterBase64Encoder : Base64Encoder
- {
- XmlTextEncoder xmlTextEncoder;
-
- internal XmlTextWriterBase64Encoder(XmlTextEncoder xmlTextEncoder)
- {
- this.xmlTextEncoder = xmlTextEncoder;
- }
-
- internal override void WriteChars(char[] chars, int index, int count)
- {
- xmlTextEncoder.WriteRaw(chars, index, count);
- }
- }
-}
diff --git a/src/Common/src/System/Xml/XmlWriterExtensions.cs b/src/Common/src/System/Xml/XmlWriterExtensions.cs
deleted file mode 100644
index c9346617e1..0000000000
--- a/src/Common/src/System/Xml/XmlWriterExtensions.cs
+++ /dev/null
@@ -1,149 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System.Diagnostics;
-
-namespace System.Xml.XPath
-{
- internal static class XmlWriterExtensions
- {
- private static void WriteLocalNamespaces(this XmlWriter writer, XPathNavigator nsNav)
- {
- string prefix = nsNav.LocalName;
- string ns = nsNav.Value;
-
- if (nsNav.MoveToNextNamespace(XPathNamespaceScope.Local))
- {
- writer.WriteLocalNamespaces(nsNav);
- }
-
- if (prefix.Length == 0)
- {
- writer.WriteAttributeString(string.Empty, "xmlns", XmlConst.ReservedNsXmlNs, ns);
- }
- else
- {
- writer.WriteAttributeString("xmlns", prefix, XmlConst.ReservedNsXmlNs, ns);
- }
- }
- public static void WriteNode(this XmlWriter writer, XPathNavigator navigator, bool defattr)
- {
- if (navigator == null)
- {
- throw new ArgumentNullException(nameof(navigator));
- }
- int iLevel = 0;
-
- navigator = navigator.Clone();
-
- while (true)
- {
- bool mayHaveChildren = false;
- XPathNodeType nodeType = navigator.NodeType;
-
- switch (nodeType)
- {
- case XPathNodeType.Element:
- writer.WriteStartElement(navigator.Prefix, navigator.LocalName, navigator.NamespaceURI);
-
- // Copy attributes
- if (navigator.MoveToFirstAttribute())
- {
- do
- {
- writer.WriteStartAttribute(navigator.Prefix, navigator.LocalName, navigator.NamespaceURI);
- // copy string value to writer
- writer.WriteString(navigator.Value);
- writer.WriteEndAttribute();
- } while (navigator.MoveToNextAttribute());
- navigator.MoveToParent();
- }
-
- // Copy namespaces
- if (navigator.MoveToFirstNamespace(XPathNamespaceScope.Local))
- {
- writer.WriteLocalNamespaces(navigator);
- navigator.MoveToParent();
- }
- mayHaveChildren = true;
- break;
- case XPathNodeType.Attribute:
- // do nothing on root level attribute
- break;
- case XPathNodeType.Text:
- writer.WriteString(navigator.Value);
- break;
- case XPathNodeType.SignificantWhitespace:
- case XPathNodeType.Whitespace:
- writer.WriteWhitespace(navigator.Value);
- break;
- case XPathNodeType.Root:
- mayHaveChildren = true;
- break;
- case XPathNodeType.Comment:
- writer.WriteComment(navigator.Value);
- break;
- case XPathNodeType.ProcessingInstruction:
- writer.WriteProcessingInstruction(navigator.LocalName, navigator.Value);
- break;
- case XPathNodeType.Namespace:
- // do nothing on root level namespace
- break;
- default:
- Debug.Fail("Unmatched state in switch");
- break;
- }
-
- if (mayHaveChildren)
- {
- // If children exist, move down to next level
- if (navigator.MoveToFirstChild())
- {
- iLevel++;
- continue;
- }
- else
- {
- // EndElement
- if (navigator.NodeType == XPathNodeType.Element)
- {
- if (navigator.IsEmptyElement)
- {
- writer.WriteEndElement();
- }
- else
- {
- writer.WriteFullEndElement();
- }
- }
- }
- }
-
- // No children
- while (true)
- {
- if (iLevel == 0)
- {
- // The entire subtree has been copied
- return;
- }
-
- if (navigator.MoveToNext())
- {
- // Found a sibling, so break to outer loop
- break;
- }
-
- // No siblings, so move up to previous level
- iLevel--;
- navigator.MoveToParent();
-
- // EndElement
- if (navigator.NodeType == XPathNodeType.Element)
- writer.WriteFullEndElement();
- }
- }
- }
- }
-}
diff --git a/src/Common/tests/System/NonRuntimeType.cs b/src/Common/tests/System/NonRuntimeType.cs
new file mode 100644
index 0000000000..bb012708a8
--- /dev/null
+++ b/src/Common/tests/System/NonRuntimeType.cs
@@ -0,0 +1,49 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Globalization;
+using System.Reflection;
+
+namespace System
+{
+ public class NonRuntimeType : Type
+ {
+ public override Assembly Assembly => null;
+ public override string AssemblyQualifiedName => null;
+ public override Type BaseType => null;
+ public override string FullName => null;
+ public override Guid GUID => Guid.Empty;
+ public override Module Module => null;
+ public override string Namespace => null;
+ public override Type UnderlyingSystemType => null;
+ public override string Name => null;
+ public override ConstructorInfo[] GetConstructors(BindingFlags bindingAttr) => null;
+ public override object[] GetCustomAttributes(bool inherit) => null;
+ public override object[] GetCustomAttributes(Type attributeType, bool inherit) => null;
+ public override Type GetElementType() => null;
+ public override EventInfo GetEvent(string name, BindingFlags bindingAttr) => null;
+ public override EventInfo[] GetEvents(BindingFlags bindingAttr) => null;
+ public override FieldInfo GetField(string name, BindingFlags bindingAttr) => null;
+ public override FieldInfo[] GetFields(BindingFlags bindingAttr) => null;
+ public override Type GetInterface(string name, bool ignoreCase) => null;
+ public override Type[] GetInterfaces() => null;
+ public override MemberInfo[] GetMembers(BindingFlags bindingAttr) => null;
+ public override MethodInfo[] GetMethods(BindingFlags bindingAttr) => null;
+ public override Type GetNestedType(string name, BindingFlags bindingAttr) => null;
+ public override Type[] GetNestedTypes(BindingFlags bindingAttr) => null;
+ public override PropertyInfo[] GetProperties(BindingFlags bindingAttr) => null;
+ public override object InvokeMember(string name, BindingFlags invokeAttr, Binder binder, object target, object[] args, ParameterModifier[] modifiers, CultureInfo culture, string[] namedParameters) => null;
+ public override bool IsDefined(Type attributeType, bool inherit) => false;
+ protected override TypeAttributes GetAttributeFlagsImpl() => TypeAttributes.NotPublic;
+ protected override ConstructorInfo GetConstructorImpl(BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers) => null;
+ protected override MethodInfo GetMethodImpl(string name, BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers) => null;
+ protected override PropertyInfo GetPropertyImpl(string name, BindingFlags bindingAttr, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers) => null;
+ protected override bool HasElementTypeImpl() => false;
+ protected override bool IsArrayImpl() => false;
+ protected override bool IsByRefImpl() => false;
+ protected override bool IsCOMObjectImpl() => false;
+ protected override bool IsPointerImpl() => false;
+ protected override bool IsPrimitiveImpl() => false;
+ }
+} \ No newline at end of file
diff --git a/src/Common/tests/System/PlatformDetection.cs b/src/Common/tests/System/PlatformDetection.cs
index 4fe087d68c..03ab37a4a1 100644
--- a/src/Common/tests/System/PlatformDetection.cs
+++ b/src/Common/tests/System/PlatformDetection.cs
@@ -27,8 +27,6 @@ namespace System
GetWindowsVersion() == 10 && GetWindowsMinorVersion() == 0 && GetWindowsBuildNumber() >= 14393;
public static bool IsWindows10Version1703OrGreater { get; } = IsWindows &&
GetWindowsVersion() == 10 && GetWindowsMinorVersion() == 0 && GetWindowsBuildNumber() >= 15063;
- public static bool IsWindows10VersionInsiderPreviewOrGreater { get; } = IsWindows &&
- GetWindowsVersion() == 10 && GetWindowsMinorVersion() == 0 && GetWindowsBuildNumber() >= 14917;
// Windows OneCoreUAP SKU doesn't have httpapi.dll
public static bool HasHttpApi { get; } = (IsWindows &&
File.Exists(Path.Combine(Environment.GetEnvironmentVariable("windir"), "System32", "httpapi.dll")));
diff --git a/src/Common/tests/System/Security/Cryptography/AlgorithmImplementations/RSA/ImportExport.cs b/src/Common/tests/System/Security/Cryptography/AlgorithmImplementations/RSA/ImportExport.cs
index a1cbdb35d8..e7d3262ef0 100644
--- a/src/Common/tests/System/Security/Cryptography/AlgorithmImplementations/RSA/ImportExport.cs
+++ b/src/Common/tests/System/Security/Cryptography/AlgorithmImplementations/RSA/ImportExport.cs
@@ -121,6 +121,27 @@ namespace System.Security.Cryptography.Rsa.Tests
}
[Fact]
+ public static void ImportExport1032()
+ {
+ RSAParameters imported = TestData.RSA1032Parameters;
+ RSAParameters exported;
+ RSAParameters exportedPublic;
+
+ using (RSA rsa = RSAFactory.Create())
+ {
+ rsa.ImportParameters(imported);
+ exported = rsa.ExportParameters(true);
+ exportedPublic = rsa.ExportParameters(false);
+ }
+
+ AssertKeyEquals(ref imported, ref exported);
+
+ Assert.Equal(exportedPublic.Modulus, imported.Modulus);
+ Assert.Equal(exportedPublic.Exponent, imported.Exponent);
+ Assert.Null(exportedPublic.D);
+ }
+
+ [Fact]
public static void ImportReset()
{
using (RSA rsa = RSAFactory.Create())
diff --git a/src/Microsoft.CSharp/src/Microsoft.CSharp.csproj b/src/Microsoft.CSharp/src/Microsoft.CSharp.csproj
index d658f928c3..50445c4624 100644
--- a/src/Microsoft.CSharp/src/Microsoft.CSharp.csproj
+++ b/src/Microsoft.CSharp/src/Microsoft.CSharp.csproj
@@ -88,7 +88,6 @@
<Compile Include="Microsoft\CSharp\RuntimeBinder\Semantics\GroupToArgsBinderResult.cs" />
<Compile Include="Microsoft\CSharp\RuntimeBinder\Semantics\ImplicitConversion.cs" />
<Compile Include="Microsoft\CSharp\RuntimeBinder\Semantics\InputFile.cs" />
- <Compile Include="Microsoft\CSharp\RuntimeBinder\Semantics\ITypeOrNamespace.cs" />
<Compile Include="Microsoft\CSharp\RuntimeBinder\Semantics\LangCompiler.cs" />
<Compile Include="Microsoft\CSharp\RuntimeBinder\Semantics\MemberLookup.cs" />
<Compile Include="Microsoft\CSharp\RuntimeBinder\Semantics\MemberLookupResults.cs" />
@@ -145,6 +144,8 @@
<Compile Include="Microsoft\CSharp\RuntimeBinder\Semantics\Tree\Event.cs" />
<Compile Include="Microsoft\CSharp\RuntimeBinder\Semantics\Tree\EXPR.cs" />
<Compile Include="Microsoft\CSharp\RuntimeBinder\Semantics\Tree\ExpressionIterator.cs" />
+ <Compile Include="Microsoft\CSharp\RuntimeBinder\Semantics\Tree\ExprOperator.cs" />
+ <Compile Include="Microsoft\CSharp\RuntimeBinder\Semantics\Tree\ExprWithType.cs" />
<Compile Include="Microsoft\CSharp\RuntimeBinder\Semantics\Tree\Field.cs" />
<Compile Include="Microsoft\CSharp\RuntimeBinder\Semantics\Tree\FieldInfo.cs" />
<Compile Include="Microsoft\CSharp\RuntimeBinder\Semantics\Tree\HoistedLocal.cs" />
@@ -164,7 +165,6 @@
<Compile Include="Microsoft\CSharp\RuntimeBinder\Semantics\Tree\This.cs" />
<Compile Include="Microsoft\CSharp\RuntimeBinder\Semantics\Tree\TypeArguments.cs" />
<Compile Include="Microsoft\CSharp\RuntimeBinder\Semantics\Tree\TypeOf.cs" />
- <Compile Include="Microsoft\CSharp\RuntimeBinder\Semantics\Tree\TypeOrNamespace.cs" />
<Compile Include="Microsoft\CSharp\RuntimeBinder\Semantics\Tree\UnaryOperator.cs" />
<Compile Include="Microsoft\CSharp\RuntimeBinder\Semantics\Tree\UnboundAnonymousFunction.cs" />
<Compile Include="Microsoft\CSharp\RuntimeBinder\Semantics\Tree\UserDefinedConversion.cs" />
@@ -217,6 +217,10 @@
<Reference Include="System.Linq" />
<Reference Include="System.Linq.Expressions" />
<Reference Include="System.ObjectModel" />
+ <Reference Include="System.Reflection, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.5\Profile\Profile259\System.Reflection.dll</HintPath>
+ </Reference>
<Reference Include="System.Resources.ResourceManager" />
<Reference Include="System.Runtime" />
<Reference Include="System.Runtime.Extensions" />
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Errors/UserStringBuilder.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Errors/UserStringBuilder.cs
index 5ed7c07341..ffdd821a85 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Errors/UserStringBuilder.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Errors/UserStringBuilder.cs
@@ -656,21 +656,20 @@ namespace Microsoft.CSharp.RuntimeBinder.Errors
// Add [] with (rank-1) commas inside
ErrAppendChar('[');
-#if ! CSEE
// known rank.
- if (rank > 1)
+ if (rank == 1)
{
- ErrAppendChar('*');
+ if (!elementType.AsArrayType().IsSZArray)
+ {
+ ErrAppendChar('*');
+ }
}
-#endif
-
- for (int i = rank; i > 1; --i)
+ else
{
- ErrAppendChar(',');
-#if ! CSEE
-
- ErrAppendChar('*');
-#endif
+ for (int i = rank; i > 1; --i)
+ {
+ ErrAppendChar(',');
+ }
}
ErrAppendChar(']');
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/ExpressionTreeCallRewriter.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/ExpressionTreeCallRewriter.cs
index 04389aa503..aa8afa5a1b 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/ExpressionTreeCallRewriter.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/ExpressionTreeCallRewriter.cs
@@ -5,6 +5,7 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
using System.Linq.Expressions;
using System.Reflection;
using Microsoft.CSharp.RuntimeBinder.Semantics;
@@ -20,6 +21,7 @@ namespace Microsoft.CSharp.RuntimeBinder
{
public readonly Expression Expression;
public ExpressionExpr(Expression e)
+ : base(0)
{
Expression = e;
}
@@ -53,7 +55,7 @@ namespace Microsoft.CSharp.RuntimeBinder
// Assert all of these first, and then unwrap them.
Debug.Assert(pExpr != null);
- Debug.Assert(pExpr.Kind == ExpressionKind.EK_SEQUENCE);
+ Debug.Assert(pExpr.Kind == ExpressionKind.Sequence);
ExprBinOp binOp = (ExprBinOp)pExpr;
Debug.Assert(binOp != null);
Debug.Assert(binOp.OptionalRightChild is ExprCall);
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/RuntimeBinder.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/RuntimeBinder.cs
index ab18a3b9ef..fbb695e8f9 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/RuntimeBinder.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/RuntimeBinder.cs
@@ -509,7 +509,7 @@ namespace Microsoft.CSharp.RuntimeBinder
boundLambda.ArgumentScope = pScope;
ExprReturn returnStatement = _exprFactory.CreateReturn(0, pScope, call);
- ExprBlock block = _exprFactory.CreateBlock(null, returnStatement, pScope);
+ ExprBlock block = _exprFactory.CreateBlock(returnStatement, pScope);
boundLambda.OptionalBody = block;
return boundLambda;
}
@@ -860,7 +860,7 @@ namespace Microsoft.CSharp.RuntimeBinder
throw Error.InternalCompilerError();
}
- callingObject = _exprFactory.CreateClass(_symbolTable.GetCTypeFromType(t), null, t.ContainsGenericParameters ?
+ callingObject = _exprFactory.CreateClass(_symbolTable.GetCTypeFromType(t), t.ContainsGenericParameters ?
_exprFactory.CreateTypeArguments(SymbolLoader.getBSymmgr().AllocParams(_symbolTable.GetCTypeArrayFromTypes(t.GetGenericArguments())), null) : null);
}
else
@@ -1052,7 +1052,7 @@ namespace Microsoft.CSharp.RuntimeBinder
// WindowsRuntimeMarshal.Add\RemoveEventHandler(...)
Type windowsRuntimeMarshalType = SymbolTable.WindowsRuntimeMarshalType;
_symbolTable.PopulateSymbolTableWithName(methodName, new List<Type> { evtType }, windowsRuntimeMarshalType);
- ExprClass marshalClass = _exprFactory.CreateClass(_symbolTable.GetCTypeFromType(windowsRuntimeMarshalType), null, null);
+ ExprClass marshalClass = _exprFactory.CreateClass(_symbolTable.GetCTypeFromType(windowsRuntimeMarshalType), null);
ExprMemberGroup addEventGrp = CreateMemberGroupEXPR(methodName, new List<Type> { evtType }, marshalClass, SYMKIND.SK_MethodSymbol);
Expr expr = _binder.BindMethodGroupToArguments(
BindingFlag.BIND_RVALUEREQUIRED | BindingFlag.BIND_STMTEXPRONLY,
@@ -1233,7 +1233,7 @@ namespace Microsoft.CSharp.RuntimeBinder
if (result == null)
{
- result = _binder.bindUDUnop(op == OperatorKind.OP_TRUE ? ExpressionKind.EK_TRUE : ExpressionKind.EK_FALSE, arg1);
+ result = _binder.bindUDUnop(op == OperatorKind.OP_TRUE ? ExpressionKind.True : ExpressionKind.False, arg1);
}
// If the result is STILL null, then that means theres no implicit conversion to bool,
@@ -1270,9 +1270,9 @@ namespace Microsoft.CSharp.RuntimeBinder
arg1.ErrorString = Operators.GetDisplayName(GetOperatorKind(payload.Operation, payload.IsLogicalOperation));
arg2.ErrorString = Operators.GetDisplayName(GetOperatorKind(payload.Operation, payload.IsLogicalOperation));
- if (ek > ExpressionKind.EK_MULTIOFFSET)
+ if (ek > ExpressionKind.MultiOffset)
{
- ek = (ExpressionKind)(ek - ExpressionKind.EK_MULTIOFFSET);
+ ek = (ExpressionKind)(ek - ExpressionKind.MultiOffset);
}
return _binder.BindStandardBinop(ek, arg1, arg2);
}
@@ -1387,7 +1387,7 @@ namespace Microsoft.CSharp.RuntimeBinder
{
// If our argument is a static type, then we're calling a static property.
Expr callingObject = argument.Info.IsStaticType ?
- _exprFactory.CreateClass(_symbolTable.GetCTypeFromType(argument.Value as Type), null, null) :
+ _exprFactory.CreateClass(_symbolTable.GetCTypeFromType(argument.Value as Type), null) :
CreateLocal(argument.Type, argument.Info.IsOut, local);
if (!argument.Info.UseCompileTimeType && argument.Value == null)
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/COperators.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/COperators.cs
index f5d0b6f5b5..bcf813e2b9 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/COperators.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/COperators.cs
@@ -25,74 +25,74 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
private static readonly Dictionary<OperatorKind, OPINFO> s_rgOpInfo = new Dictionary<OperatorKind, OPINFO>()
{
-{OperatorKind.OP_NONE, new OPINFO(TokenKind.Unknown , PredefinedName.PN_COUNT , ExpressionKind.EK_COUNT , 0)},
-{OperatorKind.OP_ASSIGN, new OPINFO(TokenKind.Equal , PredefinedName.PN_COUNT , ExpressionKind.EK_COUNT , 2)},
-{OperatorKind.OP_ADDEQ, new OPINFO(TokenKind.PlusEqual , PredefinedName.PN_COUNT , ExpressionKind.EK_MULTIOFFSET + (int)ExpressionKind.EK_ADD , 2)},
-{OperatorKind.OP_SUBEQ, new OPINFO(TokenKind.MinusEqual , PredefinedName.PN_COUNT , ExpressionKind.EK_MULTIOFFSET + (int)ExpressionKind.EK_SUB , 2)},
-{OperatorKind.OP_MULEQ, new OPINFO(TokenKind.SplatEqual , PredefinedName.PN_COUNT , ExpressionKind.EK_MULTIOFFSET + (int)ExpressionKind.EK_MUL , 2)},
-{OperatorKind.OP_DIVEQ, new OPINFO(TokenKind.SlashEqual , PredefinedName.PN_COUNT , ExpressionKind.EK_MULTIOFFSET + (int)ExpressionKind.EK_DIV , 2)},
-{OperatorKind.OP_MODEQ, new OPINFO(TokenKind.PercentEqual , PredefinedName.PN_COUNT , ExpressionKind.EK_MULTIOFFSET + (int)ExpressionKind.EK_MOD , 2)},
-{OperatorKind.OP_ANDEQ, new OPINFO(TokenKind.AndEqual , PredefinedName.PN_COUNT , ExpressionKind.EK_MULTIOFFSET + (int)ExpressionKind.EK_BITAND, 2)},
-{OperatorKind.OP_XOREQ, new OPINFO(TokenKind.HatEqual , PredefinedName.PN_COUNT , ExpressionKind.EK_MULTIOFFSET + (int)ExpressionKind.EK_BITXOR, 2)},
-{OperatorKind.OP_OREQ, new OPINFO(TokenKind.BarEqual , PredefinedName.PN_COUNT , ExpressionKind.EK_MULTIOFFSET + (int)ExpressionKind.EK_BITOR , 2)},
-{OperatorKind.OP_LSHIFTEQ, new OPINFO(TokenKind.LeftShiftEqual , PredefinedName.PN_COUNT , ExpressionKind.EK_MULTIOFFSET + (int)ExpressionKind.EK_LSHIFT, 2)},
-{OperatorKind.OP_RSHIFTEQ, new OPINFO(TokenKind.RightShiftEqual , PredefinedName.PN_COUNT , ExpressionKind.EK_MULTIOFFSET + (int)ExpressionKind.EK_RSHIFT, 2)},
-{OperatorKind.OP_QUESTION, new OPINFO(TokenKind.Question , PredefinedName.PN_COUNT , ExpressionKind.EK_COUNT , 2)},
-{OperatorKind.OP_VALORDEF, new OPINFO(TokenKind.QuestionQuestion , PredefinedName.PN_COUNT , ExpressionKind.EK_COUNT , 2)},
-{OperatorKind.OP_LOGOR, new OPINFO(TokenKind.LogicalOr , PredefinedName.PN_COUNT , ExpressionKind.EK_LOGOR , 2)},
-{OperatorKind.OP_LOGAND, new OPINFO(TokenKind.LogicalAnd , PredefinedName.PN_COUNT , ExpressionKind.EK_LOGAND , 2)},
-{OperatorKind.OP_BITOR, new OPINFO(TokenKind.Bar , PredefinedName.PN_OPBITWISEOR , ExpressionKind.EK_BITOR , 2)},
-{OperatorKind.OP_BITXOR, new OPINFO(TokenKind.Hat , PredefinedName.PN_OPXOR , ExpressionKind.EK_BITXOR , 2)},
-{OperatorKind.OP_BITAND, new OPINFO(TokenKind.Ampersand , PredefinedName.PN_OPBITWISEAND , ExpressionKind.EK_BITAND , 2)},
-{OperatorKind.OP_EQ, new OPINFO(TokenKind.EqualEqual , PredefinedName.PN_OPEQUALITY , ExpressionKind.EK_EQ , 2)},
-{OperatorKind.OP_NEQ, new OPINFO(TokenKind.NotEqual , PredefinedName.PN_OPINEQUALITY , ExpressionKind.EK_NE , 2)},
-{OperatorKind.OP_LT, new OPINFO(TokenKind.LessThan , PredefinedName.PN_OPLESSTHAN , ExpressionKind.EK_LT , 2)},
-{OperatorKind.OP_LE, new OPINFO(TokenKind.LessThanEqual , PredefinedName.PN_OPLESSTHANOREQUAL , ExpressionKind.EK_LE , 2)},
-{OperatorKind.OP_GT, new OPINFO(TokenKind.GreaterThan , PredefinedName.PN_OPGREATERTHAN , ExpressionKind.EK_GT , 2)},
-{OperatorKind.OP_GE, new OPINFO(TokenKind.GreaterThanEqual , PredefinedName.PN_OPGREATERTHANOREQUAL , ExpressionKind.EK_GE , 2)},
-{OperatorKind.OP_IS, new OPINFO(TokenKind.Is , PredefinedName.PN_COUNT , ExpressionKind.EK_COUNT , 2)},
-{OperatorKind.OP_AS, new OPINFO(TokenKind.As , PredefinedName.PN_COUNT , ExpressionKind.EK_COUNT , 2)},
-{OperatorKind.OP_LSHIFT, new OPINFO(TokenKind.LeftShift , PredefinedName.PN_OPLEFTSHIFT , ExpressionKind.EK_LSHIFT , 2)},
-{OperatorKind.OP_RSHIFT, new OPINFO(TokenKind.RightShift , PredefinedName.PN_OPRIGHTSHIFT , ExpressionKind.EK_RSHIFT , 2)},
-{OperatorKind.OP_ADD, new OPINFO(TokenKind.Plus , PredefinedName.PN_OPPLUS , ExpressionKind.EK_ADD , 2)},
-{OperatorKind.OP_SUB, new OPINFO(TokenKind.Minus , PredefinedName.PN_OPMINUS , ExpressionKind.EK_SUB , 2)},
-{OperatorKind.OP_MUL, new OPINFO(TokenKind.Splat , PredefinedName.PN_OPMULTIPLY , ExpressionKind.EK_MUL , 2)},
-{OperatorKind.OP_DIV, new OPINFO(TokenKind.Slash , PredefinedName.PN_OPDIVISION , ExpressionKind.EK_DIV , 2)},
-{OperatorKind.OP_MOD, new OPINFO(TokenKind.Percent , PredefinedName.PN_OPMODULUS , ExpressionKind.EK_MOD , 2)},
-{OperatorKind.OP_NOP, new OPINFO(TokenKind.Unknown , PredefinedName.PN_COUNT , ExpressionKind.EK_COUNT , 1)},
-{OperatorKind.OP_UPLUS, new OPINFO(TokenKind.Plus , PredefinedName.PN_OPUNARYPLUS , ExpressionKind.EK_UPLUS , 1)},
-{OperatorKind.OP_NEG, new OPINFO(TokenKind.Minus , PredefinedName.PN_OPUNARYMINUS , ExpressionKind.EK_NEG , 1)},
-{OperatorKind.OP_BITNOT, new OPINFO(TokenKind.Tilde , PredefinedName.PN_OPCOMPLEMENT , ExpressionKind.EK_BITNOT , 1)},
-{OperatorKind.OP_LOGNOT, new OPINFO(TokenKind.Bang , PredefinedName.PN_OPNEGATION , ExpressionKind.EK_LOGNOT , 1)},
-{OperatorKind.OP_PREINC, new OPINFO(TokenKind.PlusPlus , PredefinedName.PN_OPINCREMENT , ExpressionKind.EK_ADD , 1)},
-{OperatorKind.OP_PREDEC, new OPINFO(TokenKind.MinusMinus , PredefinedName.PN_OPDECREMENT , ExpressionKind.EK_SUB , 1)},
-{OperatorKind.OP_TYPEOF, new OPINFO(TokenKind.TypeOf , PredefinedName.PN_COUNT , ExpressionKind.EK_TYPEOF , 1)},
-{OperatorKind.OP_CHECKED, new OPINFO(TokenKind.Checked , PredefinedName.PN_COUNT , ExpressionKind.EK_COUNT , 1)},
-{OperatorKind.OP_UNCHECKED, new OPINFO(TokenKind.Unchecked , PredefinedName.PN_COUNT , ExpressionKind.EK_COUNT , 1)},
-{OperatorKind.OP_MAKEREFANY, new OPINFO(TokenKind.MakeRef , PredefinedName.PN_COUNT , ExpressionKind.EK_COUNT , 1)},
-{OperatorKind.OP_REFVALUE, new OPINFO(TokenKind.RefValue , PredefinedName.PN_COUNT , ExpressionKind.EK_COUNT , 2)},
-{OperatorKind.OP_REFTYPE, new OPINFO(TokenKind.RefType , PredefinedName.PN_COUNT , ExpressionKind.EK_COUNT , 1)},
-{OperatorKind.OP_ARGS, new OPINFO(TokenKind.ArgList , PredefinedName.PN_COUNT , ExpressionKind.EK_COUNT , 0)},
-{OperatorKind.OP_CAST, new OPINFO(TokenKind.Unknown , PredefinedName.PN_COUNT , ExpressionKind.EK_COUNT , 2)},
-{OperatorKind.OP_INDIR, new OPINFO(TokenKind.Splat , PredefinedName.PN_COUNT , ExpressionKind.EK_COUNT , 1)},
-{OperatorKind.OP_ADDR, new OPINFO(TokenKind.Ampersand , PredefinedName.PN_COUNT , ExpressionKind.EK_COUNT , 1)},
-{OperatorKind.OP_COLON, new OPINFO(TokenKind.Colon , PredefinedName.PN_COUNT , ExpressionKind.EK_COUNT , 2)},
-{OperatorKind.OP_THIS, new OPINFO(TokenKind.This , PredefinedName.PN_COUNT , ExpressionKind.EK_COUNT , 0)},
-{OperatorKind.OP_BASE, new OPINFO(TokenKind.Base , PredefinedName.PN_COUNT , ExpressionKind.EK_COUNT , 0)},
-{OperatorKind.OP_NULL, new OPINFO(TokenKind.Null , PredefinedName.PN_COUNT , ExpressionKind.EK_COUNT , 0)},
-{OperatorKind.OP_TRUE, new OPINFO(TokenKind.True , PredefinedName.PN_OPTRUE , ExpressionKind.EK_COUNT , 1)},
-{OperatorKind.OP_FALSE, new OPINFO(TokenKind.False , PredefinedName.PN_OPFALSE , ExpressionKind.EK_COUNT , 1)},
-{OperatorKind.OP_CALL, new OPINFO(TokenKind.Unknown , PredefinedName.PN_COUNT , ExpressionKind.EK_COUNT , 0)},
-{OperatorKind.OP_DEREF, new OPINFO(TokenKind.Unknown , PredefinedName.PN_COUNT , ExpressionKind.EK_COUNT , 0)},
-{OperatorKind.OP_PAREN, new OPINFO(TokenKind.Unknown , PredefinedName.PN_COUNT , ExpressionKind.EK_COUNT , 0)},
-{OperatorKind.OP_POSTINC, new OPINFO(TokenKind.PlusPlus , PredefinedName.PN_COUNT , ExpressionKind.EK_ADD , 1)},
-{OperatorKind.OP_POSTDEC, new OPINFO(TokenKind.MinusMinus , PredefinedName.PN_COUNT , ExpressionKind.EK_SUB , 1)},
-{OperatorKind.OP_DOT, new OPINFO(TokenKind.Dot , PredefinedName.PN_COUNT , ExpressionKind.EK_COUNT , 2)},
-{OperatorKind.OP_IMPLICIT, new OPINFO(TokenKind.Implicit , PredefinedName.PN_OPIMPLICITMN , ExpressionKind.EK_COUNT , 1)},
-{OperatorKind.OP_EXPLICIT, new OPINFO(TokenKind.Explicit , PredefinedName.PN_OPEXPLICITMN , ExpressionKind.EK_COUNT , 1)},
-{OperatorKind.OP_EQUALS, new OPINFO(TokenKind.Unknown , PredefinedName.PN_OPEQUALS , ExpressionKind.EK_COUNT , 2)},
-{OperatorKind.OP_COMPARE, new OPINFO(TokenKind.Unknown , PredefinedName.PN_OPCOMPARE , ExpressionKind.EK_COUNT , 2)},
-{OperatorKind.OP_DEFAULT, new OPINFO(TokenKind.Unknown , PredefinedName.PN_COUNT , ExpressionKind.EK_COUNT , 0)}
+{OperatorKind.OP_NONE, new OPINFO(TokenKind.Unknown , PredefinedName.PN_COUNT , ExpressionKind.ExpressionKindCount , 0)},
+{OperatorKind.OP_ASSIGN, new OPINFO(TokenKind.Equal , PredefinedName.PN_COUNT , ExpressionKind.ExpressionKindCount , 2)},
+{OperatorKind.OP_ADDEQ, new OPINFO(TokenKind.PlusEqual , PredefinedName.PN_COUNT , ExpressionKind.MultiOffset + (int)ExpressionKind.Add , 2)},
+{OperatorKind.OP_SUBEQ, new OPINFO(TokenKind.MinusEqual , PredefinedName.PN_COUNT , ExpressionKind.MultiOffset + (int)ExpressionKind.Subtract , 2)},
+{OperatorKind.OP_MULEQ, new OPINFO(TokenKind.SplatEqual , PredefinedName.PN_COUNT , ExpressionKind.MultiOffset + (int)ExpressionKind.Multiply , 2)},
+{OperatorKind.OP_DIVEQ, new OPINFO(TokenKind.SlashEqual , PredefinedName.PN_COUNT , ExpressionKind.MultiOffset + (int)ExpressionKind.Divide , 2)},
+{OperatorKind.OP_MODEQ, new OPINFO(TokenKind.PercentEqual , PredefinedName.PN_COUNT , ExpressionKind.MultiOffset + (int)ExpressionKind.Modulo , 2)},
+{OperatorKind.OP_ANDEQ, new OPINFO(TokenKind.AndEqual , PredefinedName.PN_COUNT , ExpressionKind.MultiOffset + (int)ExpressionKind.BitwiseAnd, 2)},
+{OperatorKind.OP_XOREQ, new OPINFO(TokenKind.HatEqual , PredefinedName.PN_COUNT , ExpressionKind.MultiOffset + (int)ExpressionKind.BitwiseExclusiveOr, 2)},
+{OperatorKind.OP_OREQ, new OPINFO(TokenKind.BarEqual , PredefinedName.PN_COUNT , ExpressionKind.MultiOffset + (int)ExpressionKind.BitwiseOr , 2)},
+{OperatorKind.OP_LSHIFTEQ, new OPINFO(TokenKind.LeftShiftEqual , PredefinedName.PN_COUNT , ExpressionKind.MultiOffset + (int)ExpressionKind.LeftShirt, 2)},
+{OperatorKind.OP_RSHIFTEQ, new OPINFO(TokenKind.RightShiftEqual , PredefinedName.PN_COUNT , ExpressionKind.MultiOffset + (int)ExpressionKind.RightShift, 2)},
+{OperatorKind.OP_QUESTION, new OPINFO(TokenKind.Question , PredefinedName.PN_COUNT , ExpressionKind.ExpressionKindCount , 2)},
+{OperatorKind.OP_VALORDEF, new OPINFO(TokenKind.QuestionQuestion , PredefinedName.PN_COUNT , ExpressionKind.ExpressionKindCount , 2)},
+{OperatorKind.OP_LOGOR, new OPINFO(TokenKind.LogicalOr , PredefinedName.PN_COUNT , ExpressionKind.LogicalOr , 2)},
+{OperatorKind.OP_LOGAND, new OPINFO(TokenKind.LogicalAnd , PredefinedName.PN_COUNT , ExpressionKind.LogicalAnd , 2)},
+{OperatorKind.OP_BITOR, new OPINFO(TokenKind.Bar , PredefinedName.PN_OPBITWISEOR , ExpressionKind.BitwiseOr , 2)},
+{OperatorKind.OP_BITXOR, new OPINFO(TokenKind.Hat , PredefinedName.PN_OPXOR , ExpressionKind.BitwiseExclusiveOr , 2)},
+{OperatorKind.OP_BITAND, new OPINFO(TokenKind.Ampersand , PredefinedName.PN_OPBITWISEAND , ExpressionKind.BitwiseAnd , 2)},
+{OperatorKind.OP_EQ, new OPINFO(TokenKind.EqualEqual , PredefinedName.PN_OPEQUALITY , ExpressionKind.Eq , 2)},
+{OperatorKind.OP_NEQ, new OPINFO(TokenKind.NotEqual , PredefinedName.PN_OPINEQUALITY , ExpressionKind.NotEq , 2)},
+{OperatorKind.OP_LT, new OPINFO(TokenKind.LessThan , PredefinedName.PN_OPLESSTHAN , ExpressionKind.LessThan , 2)},
+{OperatorKind.OP_LE, new OPINFO(TokenKind.LessThanEqual , PredefinedName.PN_OPLESSTHANOREQUAL , ExpressionKind.LessThanOrEqual , 2)},
+{OperatorKind.OP_GT, new OPINFO(TokenKind.GreaterThan , PredefinedName.PN_OPGREATERTHAN , ExpressionKind.GreaterThan , 2)},
+{OperatorKind.OP_GE, new OPINFO(TokenKind.GreaterThanEqual , PredefinedName.PN_OPGREATERTHANOREQUAL , ExpressionKind.GreaterThanOrEqual , 2)},
+{OperatorKind.OP_IS, new OPINFO(TokenKind.Is , PredefinedName.PN_COUNT , ExpressionKind.ExpressionKindCount , 2)},
+{OperatorKind.OP_AS, new OPINFO(TokenKind.As , PredefinedName.PN_COUNT , ExpressionKind.ExpressionKindCount , 2)},
+{OperatorKind.OP_LSHIFT, new OPINFO(TokenKind.LeftShift , PredefinedName.PN_OPLEFTSHIFT , ExpressionKind.LeftShirt , 2)},
+{OperatorKind.OP_RSHIFT, new OPINFO(TokenKind.RightShift , PredefinedName.PN_OPRIGHTSHIFT , ExpressionKind.RightShift , 2)},
+{OperatorKind.OP_ADD, new OPINFO(TokenKind.Plus , PredefinedName.PN_OPPLUS , ExpressionKind.Add , 2)},
+{OperatorKind.OP_SUB, new OPINFO(TokenKind.Minus , PredefinedName.PN_OPMINUS , ExpressionKind.Subtract , 2)},
+{OperatorKind.OP_MUL, new OPINFO(TokenKind.Splat , PredefinedName.PN_OPMULTIPLY , ExpressionKind.Multiply , 2)},
+{OperatorKind.OP_DIV, new OPINFO(TokenKind.Slash , PredefinedName.PN_OPDIVISION , ExpressionKind.Divide , 2)},
+{OperatorKind.OP_MOD, new OPINFO(TokenKind.Percent , PredefinedName.PN_OPMODULUS , ExpressionKind.Modulo , 2)},
+{OperatorKind.OP_NOP, new OPINFO(TokenKind.Unknown , PredefinedName.PN_COUNT , ExpressionKind.ExpressionKindCount , 1)},
+{OperatorKind.OP_UPLUS, new OPINFO(TokenKind.Plus , PredefinedName.PN_OPUNARYPLUS , ExpressionKind.UnaryPlus , 1)},
+{OperatorKind.OP_NEG, new OPINFO(TokenKind.Minus , PredefinedName.PN_OPUNARYMINUS , ExpressionKind.Negate , 1)},
+{OperatorKind.OP_BITNOT, new OPINFO(TokenKind.Tilde , PredefinedName.PN_OPCOMPLEMENT , ExpressionKind.BitwiseNot , 1)},
+{OperatorKind.OP_LOGNOT, new OPINFO(TokenKind.Bang , PredefinedName.PN_OPNEGATION , ExpressionKind.LogicalNot , 1)},
+{OperatorKind.OP_PREINC, new OPINFO(TokenKind.PlusPlus , PredefinedName.PN_OPINCREMENT , ExpressionKind.Add , 1)},
+{OperatorKind.OP_PREDEC, new OPINFO(TokenKind.MinusMinus , PredefinedName.PN_OPDECREMENT , ExpressionKind.Subtract , 1)},
+{OperatorKind.OP_TYPEOF, new OPINFO(TokenKind.TypeOf , PredefinedName.PN_COUNT , ExpressionKind.TypeOf , 1)},
+{OperatorKind.OP_CHECKED, new OPINFO(TokenKind.Checked , PredefinedName.PN_COUNT , ExpressionKind.ExpressionKindCount , 1)},
+{OperatorKind.OP_UNCHECKED, new OPINFO(TokenKind.Unchecked , PredefinedName.PN_COUNT , ExpressionKind.ExpressionKindCount , 1)},
+{OperatorKind.OP_MAKEREFANY, new OPINFO(TokenKind.MakeRef , PredefinedName.PN_COUNT , ExpressionKind.ExpressionKindCount , 1)},
+{OperatorKind.OP_REFVALUE, new OPINFO(TokenKind.RefValue , PredefinedName.PN_COUNT , ExpressionKind.ExpressionKindCount , 2)},
+{OperatorKind.OP_REFTYPE, new OPINFO(TokenKind.RefType , PredefinedName.PN_COUNT , ExpressionKind.ExpressionKindCount , 1)},
+{OperatorKind.OP_ARGS, new OPINFO(TokenKind.ArgList , PredefinedName.PN_COUNT , ExpressionKind.ExpressionKindCount , 0)},
+{OperatorKind.OP_CAST, new OPINFO(TokenKind.Unknown , PredefinedName.PN_COUNT , ExpressionKind.ExpressionKindCount , 2)},
+{OperatorKind.OP_INDIR, new OPINFO(TokenKind.Splat , PredefinedName.PN_COUNT , ExpressionKind.ExpressionKindCount , 1)},
+{OperatorKind.OP_ADDR, new OPINFO(TokenKind.Ampersand , PredefinedName.PN_COUNT , ExpressionKind.ExpressionKindCount , 1)},
+{OperatorKind.OP_COLON, new OPINFO(TokenKind.Colon , PredefinedName.PN_COUNT , ExpressionKind.ExpressionKindCount , 2)},
+{OperatorKind.OP_THIS, new OPINFO(TokenKind.This , PredefinedName.PN_COUNT , ExpressionKind.ExpressionKindCount , 0)},
+{OperatorKind.OP_BASE, new OPINFO(TokenKind.Base , PredefinedName.PN_COUNT , ExpressionKind.ExpressionKindCount , 0)},
+{OperatorKind.OP_NULL, new OPINFO(TokenKind.Null , PredefinedName.PN_COUNT , ExpressionKind.ExpressionKindCount , 0)},
+{OperatorKind.OP_TRUE, new OPINFO(TokenKind.True , PredefinedName.PN_OPTRUE , ExpressionKind.ExpressionKindCount , 1)},
+{OperatorKind.OP_FALSE, new OPINFO(TokenKind.False , PredefinedName.PN_OPFALSE , ExpressionKind.ExpressionKindCount , 1)},
+{OperatorKind.OP_CALL, new OPINFO(TokenKind.Unknown , PredefinedName.PN_COUNT , ExpressionKind.ExpressionKindCount , 0)},
+{OperatorKind.OP_DEREF, new OPINFO(TokenKind.Unknown , PredefinedName.PN_COUNT , ExpressionKind.ExpressionKindCount , 0)},
+{OperatorKind.OP_PAREN, new OPINFO(TokenKind.Unknown , PredefinedName.PN_COUNT , ExpressionKind.ExpressionKindCount , 0)},
+{OperatorKind.OP_POSTINC, new OPINFO(TokenKind.PlusPlus , PredefinedName.PN_COUNT , ExpressionKind.Add , 1)},
+{OperatorKind.OP_POSTDEC, new OPINFO(TokenKind.MinusMinus , PredefinedName.PN_COUNT , ExpressionKind.Subtract , 1)},
+{OperatorKind.OP_DOT, new OPINFO(TokenKind.Dot , PredefinedName.PN_COUNT , ExpressionKind.ExpressionKindCount , 2)},
+{OperatorKind.OP_IMPLICIT, new OPINFO(TokenKind.Implicit , PredefinedName.PN_OPIMPLICITMN , ExpressionKind.ExpressionKindCount , 1)},
+{OperatorKind.OP_EXPLICIT, new OPINFO(TokenKind.Explicit , PredefinedName.PN_OPEXPLICITMN , ExpressionKind.ExpressionKindCount , 1)},
+{OperatorKind.OP_EQUALS, new OPINFO(TokenKind.Unknown , PredefinedName.PN_OPEQUALS , ExpressionKind.ExpressionKindCount , 2)},
+{OperatorKind.OP_COMPARE, new OPINFO(TokenKind.Unknown , PredefinedName.PN_OPCOMPARE , ExpressionKind.ExpressionKindCount , 2)},
+{OperatorKind.OP_DEFAULT, new OPINFO(TokenKind.Unknown , PredefinedName.PN_COUNT , ExpressionKind.ExpressionKindCount , 0)}
};
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Conversion.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Conversion.cs
index a7974dbbc1..aa38eff857 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Conversion.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Conversion.cs
@@ -44,7 +44,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
private delegate bool ConversionFunc(
Expr pSourceExpr,
CType pSourceType,
- ExprTypeOrNamespace pDestinationTypeExpr,
+ ExprClass pDestinationTypeExpr,
CType pDestinationTypeForLambdaErrorReporting,
bool needsExprDest,
out Expr ppDestinationExpr,
@@ -364,15 +364,15 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
// performs an implicit conversion if it's possible. otherwise displays an error. flags is an optional parameter.
- private Expr mustConvertCore(Expr expr, ExprTypeOrNamespace destExpr)
+ private Expr mustConvertCore(Expr expr, ExprClass destExpr)
{
return mustConvertCore(expr, destExpr, 0);
}
- private Expr mustConvertCore(Expr expr, ExprTypeOrNamespace destExpr, CONVERTTYPE flags)
+ private Expr mustConvertCore(Expr expr, ExprClass destExpr, CONVERTTYPE flags)
{
Expr exprResult;
- CType dest = destExpr.TypeOrNamespace as CType;
+ CType dest = destExpr.Type;
if (BindImplicitConversion(expr, expr.Type, destExpr, dest, out exprResult, flags))
{
@@ -475,7 +475,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
ExprClass exprClass = ExprFactory.MakeClass(dest);
return mustConvert(expr, exprClass, flags);
}
- private Expr mustConvert(Expr expr, ExprTypeOrNamespace dest, CONVERTTYPE flags)
+ private Expr mustConvert(Expr expr, ExprClass dest, CONVERTTYPE flags)
{
return mustConvertCore(expr, dest, flags);
}
@@ -487,11 +487,11 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
// }
// performs an explicit conversion if its possible. otherwise displays an error.
- private Expr mustCastCore(Expr expr, ExprTypeOrNamespace destExpr, CONVERTTYPE flags)
+ private Expr mustCastCore(Expr expr, ExprClass destExpr, CONVERTTYPE flags)
{
Expr exprResult;
- CType dest = destExpr.TypeOrNamespace as CType;
+ CType dest = destExpr.Type;
SemanticChecker.CheckForStaticClass(null, dest, ErrorCode.ERR_ConvertToStaticClass);
if (expr.IsOK)
@@ -839,12 +839,12 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
CConversions.FBoxingConv(GetSymbolLoader(), typeSrc, typeDest);
}
- private bool BindImplicitConversion(Expr pSourceExpr, CType pSourceType, ExprTypeOrNamespace pDestinationTypeExpr, CType pDestinationTypeForLambdaErrorReporting, CONVERTTYPE flags)
+ private bool BindImplicitConversion(Expr pSourceExpr, CType pSourceType, ExprClass pDestinationTypeExpr, CType pDestinationTypeForLambdaErrorReporting, CONVERTTYPE flags)
{
ImplicitConversion binder = new ImplicitConversion(this, pSourceExpr, pSourceType, pDestinationTypeExpr, false, flags);
return binder.Bind();
}
- private bool BindImplicitConversion(Expr pSourceExpr, CType pSourceType, ExprTypeOrNamespace pDestinationTypeExpr, CType pDestinationTypeForLambdaErrorReporting, out Expr ppDestinationExpr, CONVERTTYPE flags)
+ private bool BindImplicitConversion(Expr pSourceExpr, CType pSourceType, ExprClass pDestinationTypeExpr, CType pDestinationTypeForLambdaErrorReporting, out Expr ppDestinationExpr, CONVERTTYPE flags)
{
ImplicitConversion binder = new ImplicitConversion(this, pSourceExpr, pSourceType, pDestinationTypeExpr, true, flags);
bool result = binder.Bind();
@@ -852,7 +852,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
return result;
}
- private bool BindImplicitConversion(Expr pSourceExpr, CType pSourceType, ExprTypeOrNamespace pDestinationTypeExpr, CType pDestinationTypeForLambdaErrorReporting, bool needsExprDest, out Expr ppDestinationExpr, CONVERTTYPE flags)
+ private bool BindImplicitConversion(Expr pSourceExpr, CType pSourceType, ExprClass pDestinationTypeExpr, CType pDestinationTypeForLambdaErrorReporting, bool needsExprDest, out Expr ppDestinationExpr, CONVERTTYPE flags)
{
ImplicitConversion binder = new ImplicitConversion(this, pSourceExpr, pSourceType, pDestinationTypeExpr, needsExprDest, flags);
bool result = binder.Bind();
@@ -860,7 +860,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
return result;
}
- private bool BindExplicitConversion(Expr pSourceExpr, CType pSourceType, ExprTypeOrNamespace pDestinationTypeExpr, CType pDestinationTypeForLambdaErrorReporting, bool needsExprDest, out Expr ppDestinationExpr, CONVERTTYPE flags)
+ private bool BindExplicitConversion(Expr pSourceExpr, CType pSourceType, ExprClass pDestinationTypeExpr, CType pDestinationTypeForLambdaErrorReporting, bool needsExprDest, out Expr ppDestinationExpr, CONVERTTYPE flags)
{
ExplicitConversion binder = new ExplicitConversion(this, pSourceExpr, pSourceType, pDestinationTypeExpr, pDestinationTypeForLambdaErrorReporting, needsExprDest, flags);
bool result = binder.Bind();
@@ -868,7 +868,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
return result;
}
- private bool BindExplicitConversion(Expr pSourceExpr, CType pSourceType, ExprTypeOrNamespace pDestinationTypeExpr, CType pDestinationTypeForLambdaErrorReporting, out Expr ppDestinationExpr, CONVERTTYPE flags)
+ private bool BindExplicitConversion(Expr pSourceExpr, CType pSourceType, ExprClass pDestinationTypeExpr, CType pDestinationTypeForLambdaErrorReporting, out Expr ppDestinationExpr, CONVERTTYPE flags)
{
ExplicitConversion binder = new ExplicitConversion(this, pSourceExpr, pSourceType, pDestinationTypeExpr, pDestinationTypeForLambdaErrorReporting, true, flags);
bool result = binder.Bind();
@@ -876,7 +876,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
return result;
}
- private bool BindExplicitConversion(Expr pSourceExpr, CType pSourceType, ExprTypeOrNamespace pDestinationTypeExpr, CType pDestinationTypeForLambdaErrorReporting, CONVERTTYPE flags)
+ private bool BindExplicitConversion(Expr pSourceExpr, CType pSourceType, ExprClass pDestinationTypeExpr, CType pDestinationTypeForLambdaErrorReporting, CONVERTTYPE flags)
{
ExplicitConversion binder = new ExplicitConversion(this, pSourceExpr, pSourceType, pDestinationTypeExpr, pDestinationTypeForLambdaErrorReporting, false, flags);
return binder.Bind();
@@ -1444,12 +1444,12 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
/*
* Fold a constant cast. Returns true if the constant could be folded.
*/
- private ConstCastResult bindConstantCast(Expr exprSrc, ExprTypeOrNamespace exprTypeDest, bool needExprDest, out Expr pexprDest, bool explicitConversion)
+ private ConstCastResult bindConstantCast(Expr exprSrc, ExprClass exprTypeDest, bool needExprDest, out Expr pexprDest, bool explicitConversion)
{
pexprDest = null;
long valueInt = 0;
double valueFlt = 0;
- CType typeDest = exprTypeDest.TypeOrNamespace.AsType();
+ CType typeDest = exprTypeDest.Type;
FUNDTYPE ftSrc = exprSrc.Type.fundType();
FUNDTYPE ftDest = typeDest.fundType();
bool srcIntegral = (ftSrc <= FUNDTYPE.FT_LASTINTEGRAL);
@@ -1702,9 +1702,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
/*
* Bind a constant cast to or from decimal. Return null if cast can't be done.
*/
- private Expr bindDecimalConstCast(ExprTypeOrNamespace exprDestType, CType srcType, ExprConstant src)
+ private Expr bindDecimalConstCast(ExprClass exprDestType, CType srcType, ExprConstant src)
{
- CType destType = exprDestType.TypeOrNamespace.AsType();
+ CType destType = exprDestType.Type;
CType typeDecimal = SymbolLoader.GetOptPredefType(PredefinedType.PT_DECIMAL);
ConstVal cv;
@@ -1811,12 +1811,12 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
return null;
}
- private bool canExplicitConversionBeBoundInUncheckedContext(Expr exprSrc, CType typeSrc, ExprTypeOrNamespace typeDest, CONVERTTYPE flags)
+ private bool canExplicitConversionBeBoundInUncheckedContext(Expr exprSrc, CType typeSrc, ExprClass typeDest, CONVERTTYPE flags)
{
CheckedContext ctx = CheckedContext.CreateInstance(Context, false /*checkedNormal*/, false /*checkedConstant*/);
Debug.Assert(typeDest != null);
- Debug.Assert(typeDest.TypeOrNamespace != null);
- return (new ExpressionBinder(ctx)).BindExplicitConversion(exprSrc, typeSrc, typeDest, typeDest.TypeOrNamespace.AsType(), flags);
+ Debug.Assert(typeDest.Type != null);
+ return (new ExpressionBinder(ctx)).BindExplicitConversion(exprSrc, typeSrc, typeDest, typeDest.Type, flags);
}
}
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Conversions.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Conversions.cs
index 5ffdf2ecd2..dfa5710c82 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Conversions.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Conversions.cs
@@ -120,14 +120,16 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
// o An explicit reference conversion exists from SE to TE.
if (typeSrc.IsArrayType() && typeDst.IsArrayType())
{
- return typeSrc.AsArrayType().rank == typeDst.AsArrayType().rank && FExpRefConv(loader, typeSrc.AsArrayType().GetElementType(), typeDst.AsArrayType().GetElementType());
+ return typeSrc.AsArrayType().rank == typeDst.AsArrayType().rank
+ && typeSrc.AsArrayType().IsSZArray == typeDst.AsArrayType().IsSZArray
+ && FExpRefConv(loader, typeSrc.AsArrayType().GetElementType(), typeDst.AsArrayType().GetElementType());
}
// * From a one-dimensional array-type S[] to System.Collections.Generic.IList<T>, System.Collections.Generic.IReadOnlyList<T>
// and their base interfaces, provided there is an explicit reference conversion from S to T.
if (typeSrc.IsArrayType())
{
- if (typeSrc.AsArrayType().rank != 1 ||
+ if (!typeSrc.AsArrayType().IsSZArray ||
!typeDst.isInterfaceType() || typeDst.AsAggregateType().GetTypeArgsAll().Count != 1)
{
return false;
@@ -161,7 +163,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
// are the same type or there is an implicit or explicit reference conversion from S to T.
ArrayType arrayDest = typeDst.AsArrayType();
AggregateType aggtypeSrc = typeSrc.AsAggregateType();
- if (arrayDest.rank != 1 || !typeSrc.isInterfaceType() ||
+ if (!arrayDest.IsSZArray || !typeSrc.isInterfaceType() ||
aggtypeSrc.GetTypeArgsAll().Count != 1)
{
return false;
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/EXPRExtensions.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/EXPRExtensions.cs
index 09dee4bd66..075ed23a11 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/EXPRExtensions.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/EXPRExtensions.cs
@@ -49,7 +49,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
[Conditional("DEBUG")]
public static void AssertIsBin(this Expr expr)
{
- Debug.Assert(expr?.Kind >= ExpressionKind.EK_TypeLim && 0 != (expr.Flags & EXPRFLAG.EXF_BINOP));
+ Debug.Assert(expr?.Kind >= ExpressionKind.TypeLimit && 0 != (expr.Flags & EXPRFLAG.EXF_BINOP));
}
public static bool isLvalue(this Expr expr)
{
@@ -82,10 +82,10 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
default:
return exprVal;
- case ExpressionKind.EK_SEQUENCE:
+ case ExpressionKind.Sequence:
exprVal = ((ExprBinOp)exprVal).OptionalRightChild;
break;
- case ExpressionKind.EK_SEQREV:
+ case ExpressionKind.SequenceReverse:
exprVal = ((ExprBinOp)exprVal).OptionalLeftChild;
break;
}
@@ -100,11 +100,11 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
public static Expr GetConst(this Expr expr)
{
Expr exprVal = expr.GetSeqVal();
- if (null == exprVal || !exprVal.isCONSTANT_OK() && exprVal.Kind != ExpressionKind.EK_ZEROINIT)
+ if (null == exprVal || !exprVal.isCONSTANT_OK() && exprVal.Kind != ExpressionKind.ZeroInit)
return null;
return exprVal;
}
- public static bool isCONSTANT_OK(this Expr expr) { return (expr == null) ? false : (expr.Kind == ExpressionKind.EK_CONSTANT && expr.IsOK); }
+ public static bool isCONSTANT_OK(this Expr expr) { return (expr == null) ? false : (expr.Kind == ExpressionKind.Constant && expr.IsOK); }
}
}
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/EXPRFLAG.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/EXPRFLAG.cs
index 8043f76af4..53a37af841 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/EXPRFLAG.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/EXPRFLAG.cs
@@ -26,10 +26,6 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
EXF_MEMBERSET = 0x2, // Only on EXPRFIELD, indicates that the reference is for set purposes
EXF_OPENTYPE = 0x2, // Only on EXPRTYPEOF. Indicates that the type is an open type.
EXF_LABELREFERENCED = 0x2, // Only on EXPRLABEL. Indicates the label was targeted by a goto.
-#if CSEE
- EXF_CLASSASSTATICSCHILD = 0x2, // Only on EXPRCLASS, indicates a synthesized child which is parent of statics
- EXF_DECLASSG = 0x2, // Only on EK_ASSG
-#endif
EXF_GENERATEDQMARK = 0x2, // only on EK_QMARK
// 0x4
@@ -47,9 +43,6 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
EXF_FINALLYBLOCKED = 0x8, // Only on EXPRTRY, EXPRGOTO, EXPRRETURN, means that FINALLY block end is unreachable
EXF_REFCHECK = 0x8, // Only on EXPRCAST, indicates an reference checked cast is required
EXF_WRAPASTEMP = 0x8, // Only on EXPRWRAP, indicates that this wrap represents an actual local
-#if CSEE
- EXF_ADDROFREF = 0x8, // Only on EXPRBINOP, with kind == EK_ADDR, indicates*f where f is of a class type
-#endif
// 0x10
EXF_LITERALCONST = 0x10, // Only on EXPRCONSTANT, means this was not a folded constant
@@ -59,18 +52,12 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
EXF_NEWOBJCALL = 0x10, // Only on EXPRCALL and EXPRMEMGRP, to indicate new <...>(...)
EXF_INDEXEXPR = 0x10, // Only on EXPRCAST, indicates a special cast for array indexing
EXF_REPLACEWRAP = 0x10, // Only on EXPRWRAP, it means the wrap should be replaced with its expr (during rewriting)
-#if CSEE
- EXF_ADDROFREFLOC = 0x10, // Only on EXPRBINOP, with kind == EK_ADDR, indicates &f where f is of a class type
-#endif
// 0x20
EXF_UNREALIZEDGOTO = 0x20, // Only on EXPRGOTO, means target unknown
EXF_CONSTRAINED = 0x20, // Only on EXPRCALL, EXPRPROP, indicates a call through a method or prop on a type variable or value type
EXF_FORCE_BOX = 0x20, // Only on EXPRCAST, GENERICS: indicates a "forcing" boxing operation (if type parameter boxed then nop, i.e. object -> object, else value type -> object)
EXF_SIMPLENAME = 0x20, // Only on EXPRMEMGRP, We're binding a dynamic simple name.
-#if CSEE
- EXF_BUCKETSINDEX = 0x20, // Only on EXPRBINOP, with kind == EK_INDEX, indicates Everett view of hashtable bucket
-#endif
// 0x40
EXF_ASFINALLYLEAVE = 0x40, // Only on EXPRGOTO, EXPRRETURN, means leave through a finally, ASLEAVE must also be set
@@ -89,17 +76,11 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
// 0x200
EXF_NEWSTRUCTASSG = 0x200, // Only on EXPRCALL, indicates that this is a constructor call which assigns to object
-#if CSEE
- EXF_OBJDECL = 0x200, // Only on EXPRCAST, indicates a cast of object or itf declared var to actual type
-#endif
EXF_GENERATEDSTMT = 0x200, // Only on statement exprs. Indicates that the statement is compiler generated
// so we shouldn't report things like "unreachable code" on it.
// 0x400
EXF_IMPLICITSTRUCTASSG = 0x400, // Only on EXPRCALL, indicates that this an implicit struct assg call
-#if CSEE
- EXF_BASECAST = 0x400, // Only on EXPRCAST, indicates a cast from declared type to its base type
-#endif
EXF_MARKING = 0x400, // Only on statement exprs. Indicates that we're currently marking
// its children for reachability (it's up the stack).
@@ -114,9 +95,6 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
EXF_IMPLICITTHIS = 0x010000, // indicates a compiler provided this pointer (in the EE, when doing autoexp, this can be anything)
EXF_CANTBENULL = 0x020000, // indicate this expression can't ever be null (e.g., "this").
EXF_CHECKOVERFLOW = 0x040000, // indicates that operation should be checked for overflow
-#if CSEE
- EXF_THREWEXCEPTION = 0x080000, // indicates the expr originally threw an exception
-#endif
EXF_PUSH_OP_FIRST = 0x100000, // On any expr, indicates that the first operand must be placed on the stack before
// anything else - this is needed for multi-ops involving string concat.
EXF_ASSGOP = 0x200000, // On any non stmt exprs, indicates assignment node...
@@ -132,15 +110,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
EXF_USEORIGDEBUGINFO | EXF_LASTBRACEDEBUGINFO | EXF_NODEBUGINFO |
EXF_IMPLICITTHIS | EXF_CANTBENULL | EXF_CHECKOVERFLOW |
EXF_PUSH_OP_FIRST | EXF_ASSGOP | EXF_LVALUE | EXF_SAMENAMETYPE
-#if CSEE
- | EXF_THREWEXCEPTION
-#endif
,
// Used to mask the cast flags off an EXPRCAST.
EXF_CAST_ALL = EXF_BOX | EXF_UNBOX | EXF_REFCHECK | EXF_INDEXEXPR | EXF_FORCE_BOX | EXF_FORCE_UNBOX | EXF_STATIC_CAST
-#if CSEE
- | EXF_MAYBE_BOX | EXF_OBJDECL | EXF_BASECAST
-#endif
}
}
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExplicitConversion.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExplicitConversion.cs
index 489449734d..6ea8879c40 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExplicitConversion.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExplicitConversion.cs
@@ -19,7 +19,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
private Expr _exprSrc;
private readonly CType _typeSrc;
private readonly CType _typeDest;
- private readonly ExprTypeOrNamespace _exprTypeDest;
+ private readonly ExprClass _exprTypeDest;
// This is for lambda error reporting. The reason we have this is because we
// store errors for lambda conversions, and then we don't bind the conversion
@@ -45,12 +45,12 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
// BindExplicitConversion
// ----------------------------------------------------------------------------
- public ExplicitConversion(ExpressionBinder binder, Expr exprSrc, CType typeSrc, ExprTypeOrNamespace typeDest, CType pDestinationTypeForLambdaErrorReporting, bool needsExprDest, CONVERTTYPE flags)
+ public ExplicitConversion(ExpressionBinder binder, Expr exprSrc, CType typeSrc, ExprClass typeDest, CType pDestinationTypeForLambdaErrorReporting, bool needsExprDest, CONVERTTYPE flags)
{
_binder = binder;
_exprSrc = exprSrc;
_typeSrc = typeSrc;
- _typeDest = typeDest.TypeOrNamespace.AsType();
+ _typeDest = typeDest.Type;
_pDestinationTypeForLambdaErrorReporting = pDestinationTypeForLambdaErrorReporting;
_exprTypeDest = typeDest;
_needsExprDest = needsExprDest;
@@ -234,7 +234,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
Debug.Assert(_typeSrc != null);
Debug.Assert(_typeDest != null);
- if (!_typeSrc.IsArrayType() || _typeSrc.AsArrayType().rank != 1 ||
+ if (!_typeSrc.IsArrayType() || !_typeSrc.AsArrayType().IsSZArray ||
!_typeDest.isInterfaceType() || _typeDest.AsAggregateType().GetTypeArgsAll().Count != 1)
{
return false;
@@ -319,7 +319,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
// S[] to System.Collections.Generic.IList<T> or System.Collections.Generic.IReadOnlyList<T>. This is precisely when either S and T
// are the same type or there is an implicit or explicit reference conversion from S to T.
- if (arrayDest.rank != 1 || !_typeSrc.isInterfaceType() ||
+ if (!arrayDest.IsSZArray || !_typeSrc.isInterfaceType() ||
_typeSrc.AsAggregateType().GetTypeArgsAll().Count != 1)
{
return false;
@@ -363,7 +363,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
//
// * An explicit reference conversion exists from SE to TE.
- if (arraySrc.rank != arrayDest.rank)
+ if (arraySrc.rank != arrayDest.rank || arraySrc.IsSZArray != arrayDest.IsSZArray)
{
return false; // Ranks do not match.
}
@@ -775,11 +775,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
return AggCastResult.Failure;
}
-#if ! CSEE
if (aggTypeDest.getAggregate().IsInterface())
-#else
- if ((exprSrc != null && !exprSrc.eeValue.substType.IsNullableType()) || aggTypeDest.getAggregate().IsInterface())
-#endif
{
// Explicit conversion of type variables to interfaces.
if (_needsExprDest)
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExprFactory.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExprFactory.cs
index f4afb77e3d..9163674990 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExprFactory.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExprFactory.cs
@@ -36,62 +36,46 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
)
));
- ExprCall rval = new ExprCall();
- rval.Kind = ExpressionKind.EK_CALL;
- rval.Type = pType;
+ ExprCall rval = new ExprCall(pType);
rval.Flags = nFlags;
rval.OptionalArguments = pOptionalArguments;
rval.MemberGroup = pMemberGroup;
rval.NullableCallLiftKind = NullableCallLiftKind.NotLifted;
- rval.CastOfNonLiftedResultToLiftedType = null;
rval.MethWithInst = MWI;
- Debug.Assert(rval != null);
- return (rval);
+ return rval;
}
- public ExprField CreateField(EXPRFLAG nFlags, CType pType, Expr pOptionalObject, uint nOffset, FieldWithType FWT, Expr pOptionalLHS)
+ public ExprField CreateField(EXPRFLAG nFlags, CType pType, Expr pOptionalObject, FieldWithType FWT)
{
Debug.Assert(0 == (nFlags & ~(EXPRFLAG.EXF_MEMBERSET | EXPRFLAG.EXF_MASK_ANY)));
- ExprField rval = new ExprField();
- rval.Kind = ExpressionKind.EK_FIELD;
- rval.Type = pType;
+ ExprField rval = new ExprField(pType);
rval.Flags = nFlags;
rval.OptionalObject = pOptionalObject;
- if (FWT != null)
- {
- rval.FieldWithType = FWT;
- }
- Debug.Assert(rval != null);
- return (rval);
+ rval.FieldWithType = FWT;
+ return rval;
}
public ExprFuncPtr CreateFunctionPointer(EXPRFLAG nFlags, CType pType, Expr pObject, MethWithInst MWI)
{
Debug.Assert(0 == (nFlags & ~(EXPRFLAG.EXF_BASECALL)));
- ExprFuncPtr rval = new ExprFuncPtr();
- rval.Kind = ExpressionKind.EK_FUNCPTR;
- rval.Type = pType;
+ ExprFuncPtr rval = new ExprFuncPtr(pType);
rval.Flags = nFlags;
rval.OptionalObject = pObject;
rval.MethWithInst = new MethWithInst(MWI);
- Debug.Assert(rval != null);
- return (rval);
+ return rval;
}
public ExprArrayInit CreateArrayInit(EXPRFLAG nFlags, CType pType, Expr pOptionalArguments, Expr pOptionalArgumentDimensions, int[] pDimSizes)
{
Debug.Assert(0 == (nFlags &
~(EXPRFLAG.EXF_MASK_ANY | EXPRFLAG.EXF_ARRAYCONST | EXPRFLAG.EXF_ARRAYALLCONST)));
- ExprArrayInit rval = new ExprArrayInit();
- rval.Kind = ExpressionKind.EK_ARRINIT;
- rval.Type = pType;
+ ExprArrayInit rval = new ExprArrayInit(pType);
rval.OptionalArguments = pOptionalArguments;
rval.OptionalArgumentDimensions = pOptionalArgumentDimensions;
rval.DimensionSizes = pDimSizes;
rval.DimensionSize = pDimSizes?.Length ?? 0;
- Debug.Assert(rval != null);
- return (rval);
+ return rval;
}
public ExprProperty CreateProperty(CType pType, Expr pOptionalObject)
@@ -103,10 +87,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
public ExprProperty CreateProperty(CType pType, Expr pOptionalObjectThrough, Expr pOptionalArguments, ExprMemberGroup pMemberGroup, PropWithType pwtSlot, MethWithType mwtGet, MethWithType mwtSet)
{
- ExprProperty rval = new ExprProperty();
- rval.Kind = ExpressionKind.EK_PROP;
- rval.Type = pType;
- rval.Flags = 0;
+ ExprProperty rval = new ExprProperty(pType);
rval.OptionalObjectThrough = pOptionalObjectThrough;
rval.OptionalArguments = pOptionalArguments;
rval.MemberGroup = pMemberGroup;
@@ -119,23 +100,15 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
rval.MethWithTypeSet = mwtSet;
}
- Debug.Assert(rval != null);
- return (rval);
+ return rval;
}
public ExprEvent CreateEvent(CType pType, Expr pOptionalObject, EventWithType EWT)
{
- ExprEvent rval = new ExprEvent();
- rval.Kind = ExpressionKind.EK_EVENT;
- rval.Type = pType;
- rval.Flags = 0;
+ ExprEvent rval = new ExprEvent(pType);
rval.OptionalObject = pOptionalObject;
- if (EWT != null)
- {
- rval.EventWithType = EWT;
- }
- Debug.Assert(rval != null);
- return (rval);
+ rval.EventWithType = EWT;
+ return rval;
}
public ExprMemberGroup CreateMemGroup(EXPRFLAG nFlags, Name pName, TypeArray pTypeArgs, SYMKIND symKind, CType pTypePar, MethodOrPropertySymbol pMPS, Expr pObject, CMemberLookupResults memberLookupResults)
@@ -145,23 +118,15 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
EXPRFLAG.EXF_BASECALL | EXPRFLAG.EXF_DELEGATE | EXPRFLAG.EXF_USERCALLABLE | EXPRFLAG.EXF_MASK_ANY
)
));
- ExprMemberGroup rval = new ExprMemberGroup();
- rval.Kind = ExpressionKind.EK_MEMGRP;
- rval.Type = GetTypes().GetMethGrpType();
+ ExprMemberGroup rval = new ExprMemberGroup(GetTypes().GetMethGrpType());
rval.Flags = nFlags;
rval.Name = pName;
- rval.TypeArgs = pTypeArgs;
+ rval.TypeArgs = pTypeArgs ?? BSYMMGR.EmptyTypeArray();
rval.SymKind = symKind;
rval.ParentType = pTypePar;
rval.OptionalObject = pObject;
rval.MemberLookupResults = memberLookupResults;
- rval.OptionalLHS = null;
- if (rval.TypeArgs == null)
- {
- rval.TypeArgs = BSYMMGR.EmptyTypeArray();
- }
- Debug.Assert(rval != null);
- return (rval);
+ return rval;
}
public ExprMemberGroup CreateMemGroup(
@@ -171,11 +136,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
Name pName = mwi.Sym?.name;
MethodOrPropertySymbol methProp = mwi.MethProp();
- CType pType = mwi.GetType();
- if (pType == null)
- {
- pType = GetTypes().GetErrorSym();
- }
+ CType pType = mwi.GetType() ?? (CType)GetTypes().GetErrorSym();
return CreateMemGroup(0, pName, mwi.TypeArgs, methProp?.getKind() ?? SYMKIND.SK_MethodSymbol, mwi.GetType(), methProp, pObject, new CMemberLookupResults(GetGlobalSymbols().AllocParams(1, new CType[] { pType }), pName));
}
@@ -185,9 +146,6 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
Debug.Assert(arg != null);
Debug.Assert(call != null);
ExprUserDefinedConversion rval = new ExprUserDefinedConversion();
- rval.Kind = ExpressionKind.EK_USERDEFINEDCONVERSION;
- rval.Type = call.Type;
- rval.Flags = 0;
rval.Argument = arg;
rval.UserDefinedCall = call;
rval.UserDefinedCallMethod = mwi;
@@ -195,37 +153,28 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
rval.SetError();
}
- Debug.Assert(rval != null);
return rval;
}
public ExprCast CreateCast(EXPRFLAG nFlags, CType pType, Expr pArg)
{
- return CreateCast(nFlags, CreateClass(pType, null, null), pArg);
+ return CreateCast(nFlags, CreateClass(pType, null), pArg);
}
- public ExprCast CreateCast(EXPRFLAG nFlags, ExprTypeOrNamespace pType, Expr pArg)
+ public ExprCast CreateCast(EXPRFLAG nFlags, ExprClass pType, Expr pArg)
{
Debug.Assert(pArg != null);
Debug.Assert(pType != null);
Debug.Assert(0 == (nFlags & ~(EXPRFLAG.EXF_CAST_ALL | EXPRFLAG.EXF_MASK_ANY)));
ExprCast rval = new ExprCast();
- rval.Type = pType.TypeOrNamespace as CType;
- rval.Kind = ExpressionKind.EK_CAST;
rval.Argument = pArg;
rval.Flags = nFlags;
rval.DestinationType = pType;
- Debug.Assert(rval != null);
- return (rval);
+ return rval;
}
public ExprReturn CreateReturn(EXPRFLAG nFlags, Scope pCurrentScope, Expr pOptionalObject)
{
- return CreateReturn(nFlags, pCurrentScope, pOptionalObject, pOptionalObject);
- }
-
- private ExprReturn CreateReturn(EXPRFLAG nFlags, Scope pCurrentScope, Expr pOptionalObject, Expr pOptionalOriginalObject)
- {
Debug.Assert(0 == (nFlags &
~(EXPRFLAG.EXF_ASLEAVE | EXPRFLAG.EXF_FINALLYBLOCKED | EXPRFLAG.EXF_RETURNISYIELD |
EXPRFLAG.EXF_ASFINALLYLEAVE | EXPRFLAG.EXF_GENERATEDSTMT | EXPRFLAG.EXF_MARKING |
@@ -233,94 +182,57 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
)
));
ExprReturn rval = new ExprReturn();
- rval.Kind = ExpressionKind.EK_RETURN;
- rval.Type = null;
rval.Flags = nFlags;
rval.OptionalObject = pOptionalObject;
- Debug.Assert(rval != null);
- return (rval);
+ return rval;
}
public ExprLocal CreateLocal(EXPRFLAG nFlags, LocalVariableSymbol pLocal)
{
Debug.Assert(0 == (nFlags & ~(EXPRFLAG.EXF_MASK_ANY)));
-
- CType type = null;
- if (pLocal != null)
- {
- type = pLocal.GetType();
- }
-
ExprLocal rval = new ExprLocal();
- rval.Kind = ExpressionKind.EK_LOCAL;
- rval.Type = type;
rval.Flags = nFlags;
rval.Local = pLocal;
- Debug.Assert(rval != null);
- return (rval);
+ return rval;
}
public ExprThisPointer CreateThis(LocalVariableSymbol pLocal, bool fImplicit)
{
Debug.Assert(pLocal == null || pLocal.isThis);
- CType type = null;
- if (pLocal != null)
- {
- type = pLocal.GetType();
- }
-
EXPRFLAG flags = EXPRFLAG.EXF_CANTBENULL;
if (fImplicit)
{
flags |= EXPRFLAG.EXF_IMPLICITTHIS;
}
- if (type != null && type.isStructType())
+ if (pLocal != null && pLocal.GetType().isStructType())
{
flags |= EXPRFLAG.EXF_LVALUE;
}
ExprThisPointer rval = new ExprThisPointer();
- rval.Kind = ExpressionKind.EK_THISPOINTER;
- rval.Type = type;
rval.Flags = flags;
rval.Local = pLocal;
- Debug.Assert(rval != null);
return (rval);
}
public ExprBoundLambda CreateAnonymousMethod(AggregateType delegateType)
{
Debug.Assert(delegateType == null || delegateType.isDelegateType());
- ExprBoundLambda rval = new ExprBoundLambda();
- rval.Kind = ExpressionKind.EK_BOUNDLAMBDA;
- rval.Type = delegateType;
- rval.Flags = 0;
- Debug.Assert(rval != null);
- return (rval);
+ ExprBoundLambda rval = new ExprBoundLambda(delegateType);
+ return rval;
}
public ExprUnboundLambda CreateLambda()
{
- CType type = GetTypes().GetAnonMethType();
-
-
- ExprUnboundLambda rval = new ExprUnboundLambda();
- rval.Kind = ExpressionKind.EK_UNBOUNDLAMBDA;
- rval.Type = type;
- rval.Flags = 0;
- Debug.Assert(rval != null);
- return (rval);
+ ExprUnboundLambda rval = new ExprUnboundLambda(GetTypes().GetAnonMethType());
+ return rval;
}
public ExprHoistedLocalExpr CreateHoistedLocalInExpression(ExprLocal localToHoist)
{
Debug.Assert(localToHoist != null);
- ExprHoistedLocalExpr rval = new ExprHoistedLocalExpr();
- rval.Kind = ExpressionKind.EK_HOISTEDLOCALEXPR;
- rval.Type = GetTypes().GetOptPredefAgg(PredefinedType.PT_EXPRESSION).getThisType();
- rval.Flags = 0;
- return rval;
+ return new ExprHoistedLocalExpr(GetTypes().GetOptPredefAgg(PredefinedType.PT_EXPRESSION).getThisType());
}
public ExprMethodInfo CreateMethodInfo(MethPropWithInst mwi)
@@ -332,20 +244,8 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
Debug.Assert(method != null);
Debug.Assert(methodType != null);
- ExprMethodInfo methodInfo = new ExprMethodInfo();
- CType type;
- if (method.IsConstructor())
- {
- type = GetTypes().GetOptPredefAgg(PredefinedType.PT_CONSTRUCTORINFO).getThisType();
- }
- else
- {
- type = GetTypes().GetOptPredefAgg(PredefinedType.PT_METHODINFO).getThisType();
- }
-
- methodInfo.Kind = ExpressionKind.EK_METHODINFO;
- methodInfo.Type = type;
- methodInfo.Flags = 0;
+ ExprMethodInfo methodInfo = new ExprMethodInfo(
+ GetTypes().GetOptPredefAgg(method.IsConstructor() ? PredefinedType.PT_CONSTRUCTORINFO : PredefinedType.PT_METHODINFO).getThisType());
methodInfo.Method = new MethWithInst(method, methodType, methodParameters);
return methodInfo;
}
@@ -354,13 +254,8 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
Debug.Assert(prop != null);
Debug.Assert(propertyType != null);
- ExprPropertyInfo propInfo = new ExprPropertyInfo();
-
- propInfo.Kind = ExpressionKind.EK_PROPERTYINFO;
- propInfo.Type = GetTypes().GetOptPredefAgg(PredefinedType.PT_PROPERTYINFO).getThisType();
- propInfo.Flags = 0;
+ ExprPropertyInfo propInfo = new ExprPropertyInfo(GetTypes().GetOptPredefAgg(PredefinedType.PT_PROPERTYINFO).getThisType());
propInfo.Property = new PropWithType(prop, propertyType);
-
return propInfo;
}
@@ -368,22 +263,15 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
Debug.Assert(field != null);
Debug.Assert(fieldType != null);
- ExprFieldInfo rval = new ExprFieldInfo(field, fieldType);
- rval.Kind = ExpressionKind.EK_FIELDINFO;
- rval.Type = GetTypes().GetOptPredefAgg(PredefinedType.PT_FIELDINFO).getThisType();
- rval.Flags = 0;
- return rval;
+ return new ExprFieldInfo(field, fieldType, GetTypes().GetOptPredefAgg(PredefinedType.PT_FIELDINFO).getThisType());
}
- private ExprTypeOf CreateTypeOf(ExprTypeOrNamespace pSourceType)
+ private ExprTypeOf CreateTypeOf(ExprClass pSourceType)
{
- ExprTypeOf rval = new ExprTypeOf();
- rval.Kind = ExpressionKind.EK_TYPEOF;
- rval.Type = GetTypes().GetReqPredefAgg(PredefinedType.PT_TYPE).getThisType();
+ ExprTypeOf rval = new ExprTypeOf(GetTypes().GetReqPredefAgg(PredefinedType.PT_TYPE).getThisType());
rval.Flags = EXPRFLAG.EXF_CANTBENULL;
rval.SourceType = pSourceType;
- Debug.Assert(rval != null);
- return (rval);
+ return rval;
}
public ExprTypeOf CreateTypeOf(CType pSourceType)
{
@@ -394,7 +282,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
Debug.Assert(pCallTF != null);
Debug.Assert((pCallOp?.OptionalArguments as ExprList)?.OptionalElement != null);
- ExprUserLogicalOp rval = new ExprUserLogicalOp();
+ ExprUserLogicalOp rval = new ExprUserLogicalOp(pType);
Expr leftChild = ((ExprList)pCallOp.OptionalArguments).OptionalElement;
Debug.Assert(leftChild != null);
if (leftChild is ExprWrap wrap)
@@ -403,8 +291,6 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
leftChild = wrap.OptionalExpression;
Debug.Assert(leftChild != null);
}
- rval.Kind = ExpressionKind.EK_USERLOGOP;
- rval.Type = pType;
rval.Flags = EXPRFLAG.EXF_ASSGOP;
rval.TrueFalseCall = pCallTF;
rval.OperatorCall = pCallOp;
@@ -433,14 +319,10 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
Debug.Assert(type.isPredefType(PredefinedType.PT_STRING));
- ExprConcat rval = new ExprConcat();
- rval.Kind = ExpressionKind.EK_CONCAT;
- rval.Type = type;
- rval.Flags = 0;
+ ExprConcat rval = new ExprConcat(type);
rval.FirstArgument = op1;
rval.SecondArgument = op2;
- Debug.Assert(rval != null);
- return (rval);
+ return rval;
}
public ExprConstant CreateStringConstant(string str)
@@ -451,29 +333,21 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
public ExprMultiGet CreateMultiGet(EXPRFLAG nFlags, CType pType, ExprMulti pOptionalMulti)
{
Debug.Assert(0 == (nFlags & ~(EXPRFLAG.EXF_MASK_ANY)));
- ExprMultiGet rval = new ExprMultiGet();
-
- rval.Kind = ExpressionKind.EK_MULTIGET;
- rval.Type = pType;
+ ExprMultiGet rval = new ExprMultiGet(pType);
rval.Flags = nFlags;
rval.OptionalMulti = pOptionalMulti;
- Debug.Assert(rval != null);
- return (rval);
+ return rval;
}
public ExprMulti CreateMulti(EXPRFLAG nFlags, CType pType, Expr pLeft, Expr pOp)
{
Debug.Assert(pLeft != null);
Debug.Assert(pOp != null);
- ExprMulti rval = new ExprMulti();
-
- rval.Kind = ExpressionKind.EK_MULTI;
- rval.Type = pType;
+ ExprMulti rval = new ExprMulti(pType);
rval.Flags = nFlags;
rval.Left = pLeft;
rval.Operator = pOp;
- Debug.Assert(rval != null);
- return (rval);
+ return rval;
}
////////////////////////////////////////////////////////////////////////////////
@@ -490,15 +364,15 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
return CreateZeroInit(exprClass);
}
- private Expr CreateZeroInit(ExprTypeOrNamespace pTypeExpr)
+ private Expr CreateZeroInit(ExprClass pTypeExpr)
{
return CreateZeroInit(pTypeExpr, null, false);
}
- private Expr CreateZeroInit(ExprTypeOrNamespace pTypeExpr, Expr pOptionalOriginalConstructorCall, bool isConstructor)
+ private Expr CreateZeroInit(ExprClass pTypeExpr, Expr pOptionalOriginalConstructorCall, bool isConstructor)
{
Debug.Assert(pTypeExpr != null);
- CType pType = pTypeExpr.TypeOrNamespace.AsType();
+ CType pType = pTypeExpr.Type;
bool bIsError = false;
if (pType.isEnumType())
@@ -565,10 +439,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
break;
}
- ExprZeroInit rval = new ExprZeroInit();
- rval.Kind = ExpressionKind.EK_ZEROINIT;
- rval.Type = pType;
- rval.Flags = 0;
+ ExprZeroInit rval = new ExprZeroInit(pType);
rval.OptionalConstructorCall = pOptionalOriginalConstructorCall;
rval.IsConstructor = isConstructor;
@@ -577,30 +448,19 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
rval.SetError();
}
- Debug.Assert(rval != null);
- return (rval);
+ return rval;
}
public ExprConstant CreateConstant(CType pType, ConstVal constVal)
{
- return CreateConstant(pType, constVal, null);
- }
-
- private ExprConstant CreateConstant(CType pType, ConstVal constVal, Expr pOriginal)
- {
ExprConstant rval = CreateConstant(pType);
rval.Val = constVal;
- Debug.Assert(rval != null);
- return (rval);
+ return rval;
}
private ExprConstant CreateConstant(CType pType)
{
- ExprConstant rval = new ExprConstant();
- rval.Kind = ExpressionKind.EK_CONSTANT;
- rval.Type = pType;
- rval.Flags = 0;
- return rval;
+ return new ExprConstant(pType);
}
public ExprConstant CreateIntegerConstant(int x)
@@ -611,16 +471,13 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
return CreateConstant(GetTypes().GetReqPredefAgg(PredefinedType.PT_BOOL).getThisType(), ConstVal.Get(b));
}
- public ExprBlock CreateBlock(ExprBlock pOptionalCurrentBlock, ExprStatement pOptionalStatements, Scope pOptionalScope)
+
+ public ExprBlock CreateBlock(ExprStatement pOptionalStatements, Scope pOptionalScope)
{
ExprBlock rval = new ExprBlock();
- rval.Kind = ExpressionKind.EK_BLOCK;
- rval.Type = null;
- rval.Flags = 0;
rval.OptionalStatements = pOptionalStatements;
rval.OptionalScopeSymbol = pOptionalScope;
- Debug.Assert(rval != null);
- return (rval);
+ return rval;
}
public ExprQuestionMark CreateQuestionMark(Expr pTestExpression, ExprBinOp pConsequence)
@@ -628,20 +485,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
Debug.Assert(pTestExpression != null);
Debug.Assert(pConsequence != null);
- CType pType = pConsequence.Type;
- if (pType == null)
- {
- Debug.Assert(pConsequence.OptionalLeftChild != null);
- pType = pConsequence.OptionalLeftChild.Type;
- Debug.Assert(pType != null);
- }
ExprQuestionMark pResult = new ExprQuestionMark();
- pResult.Kind = ExpressionKind.EK_QUESTIONMARK;
- pResult.Type = pType;
- pResult.Flags = 0;
pResult.TestExpression = pTestExpression;
pResult.Consequence = pConsequence;
- Debug.Assert(pResult != null);
return pResult;
}
@@ -657,10 +503,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
pType = GetTypes().GetReqPredefAgg(PredefinedType.PT_INT).getThisType();
}
- ExprArrayIndex pResult = new ExprArrayIndex();
- pResult.Kind = ExpressionKind.EK_ARRAYINDEX;
- pResult.Type = pType;
- pResult.Flags = 0;
+ ExprArrayIndex pResult = new ExprArrayIndex(pType);
pResult.Array = pArray;
pResult.Index = pIndex;
return pResult;
@@ -668,10 +511,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
public ExprArrayLength CreateArrayLength(Expr pArray)
{
- ExprArrayLength pResult = new ExprArrayLength();
- pResult.Kind = ExpressionKind.EK_ARRAYLENGTH;
- pResult.Type = GetTypes().GetReqPredefAgg(PredefinedType.PT_INT).getThisType();
- pResult.Flags = 0;
+ ExprArrayLength pResult = new ExprArrayLength(GetTypes().GetReqPredefAgg(PredefinedType.PT_INT).getThisType());
pResult.Array = pArray;
return pResult;
}
@@ -679,47 +519,29 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
public ExprBinOp CreateBinop(ExpressionKind exprKind, CType pType, Expr p1, Expr p2)
{
//Debug.Assert(exprKind.isBinaryOperator());
- ExprBinOp rval = new ExprBinOp();
- rval.Kind = exprKind;
- rval.Type = pType;
+ ExprBinOp rval = new ExprBinOp(exprKind, pType);
rval.Flags = EXPRFLAG.EXF_BINOP;
rval.OptionalLeftChild = p1;
rval.OptionalRightChild = p2;
- rval.IsLifted = false;
- rval.OptionalUserDefinedCall = null;
- rval.UserDefinedCallMethod = null;
- Debug.Assert(rval != null);
- return (rval);
+ return rval;
}
public ExprUnaryOp CreateUnaryOp(ExpressionKind exprKind, CType pType, Expr pOperand)
{
- Debug.Assert(exprKind.isUnaryOperator());
+ Debug.Assert(exprKind.IsUnaryOperator());
Debug.Assert(pOperand != null);
- ExprUnaryOp rval = new ExprUnaryOp();
- rval.Kind = exprKind;
- rval.Type = pType;
- rval.Flags = 0;
+ ExprUnaryOp rval = new ExprUnaryOp(exprKind, pType);
rval.Child = pOperand;
- rval.OptionalUserDefinedCall = null;
- rval.UserDefinedCallMethod = null;
- Debug.Assert(rval != null);
- return (rval);
+ return rval;
}
- public Expr CreateOperator(ExpressionKind exprKind, CType pType, Expr pArg1, Expr pOptionalArg2)
+ public ExprOperator CreateOperator(ExpressionKind exprKind, CType pType, Expr pArg1, Expr pOptionalArg2)
{
Debug.Assert(pArg1 != null);
- Expr rval = null;
- if (exprKind.isUnaryOperator())
- {
- Debug.Assert(pOptionalArg2 == null);
- rval = CreateUnaryOp(exprKind, pType, pArg1);
- }
- else
- rval = CreateBinop(exprKind, pType, pArg1, pOptionalArg2);
- Debug.Assert(rval != null);
- return rval;
+ Debug.Assert(exprKind.IsUnaryOperator() ? pOptionalArg2 == null : pOptionalArg2 != null);
+ return exprKind.IsUnaryOperator()
+ ? (ExprOperator)CreateUnaryOp(exprKind, pType, pArg1)
+ : CreateBinop(exprKind, pType, pArg1, pOptionalArg2);
}
@@ -728,22 +550,17 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
Debug.Assert(p1 != null);
Debug.Assert(p2 != null);
Debug.Assert(call != null);
- ExprBinOp rval = new ExprBinOp();
- rval.Kind = exprKind;
- rval.Type = pType;
+ ExprBinOp rval = new ExprBinOp(exprKind, pType);
rval.Flags = EXPRFLAG.EXF_BINOP;
rval.OptionalLeftChild = p1;
rval.OptionalRightChild = p2;
- // The call may be lifted, but we do not mark the outer binop as lifted.
- rval.IsLifted = false;
rval.OptionalUserDefinedCall = call;
rval.UserDefinedCallMethod = pmpwi;
if (call.HasError)
{
rval.SetError();
}
- Debug.Assert(rval != null);
- return (rval);
+ return rval;
}
public ExprUnaryOp CreateUserDefinedUnaryOperator(ExpressionKind exprKind, CType pType, Expr pOperand, ExprCall call, MethPropWithInst pmpwi)
@@ -752,10 +569,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
Debug.Assert(pOperand != null);
Debug.Assert(call != null);
Debug.Assert(pmpwi != null);
- ExprUnaryOp rval = new ExprUnaryOp();
- rval.Kind = exprKind;
- rval.Type = pType;
- rval.Flags = 0;
+ ExprUnaryOp rval = new ExprUnaryOp(exprKind, pType);
rval.Child = pOperand;
// The call may be lifted, but we do not mark the outer binop as lifted.
rval.OptionalUserDefinedCall = call;
@@ -764,14 +578,13 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
rval.SetError();
}
- Debug.Assert(rval != null);
- return (rval);
+ return rval;
}
public ExprUnaryOp CreateNeg(EXPRFLAG nFlags, Expr pOperand)
{
Debug.Assert(pOperand != null);
- ExprUnaryOp pUnaryOp = CreateUnaryOp(ExpressionKind.EK_NEG, pOperand.Type, pOperand);
+ ExprUnaryOp pUnaryOp = CreateUnaryOp(ExpressionKind.Negate, pOperand.Type, pOperand);
pUnaryOp.Flags |= nFlags;
return pUnaryOp;
}
@@ -783,7 +596,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
Debug.Assert(p1 != null);
Debug.Assert(p2 != null);
- return CreateBinop(ExpressionKind.EK_SEQUENCE, p2.Type, p1, p2);
+ return CreateBinop(ExpressionKind.Sequence, p2.Type, p1, p2);
}
////////////////////////////////////////////////////////////////////////////////
@@ -793,14 +606,12 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
Debug.Assert(p1 != null);
Debug.Assert(p2 != null);
- return CreateBinop(ExpressionKind.EK_SEQREV, p1.Type, p1, p2);
+ return CreateBinop(ExpressionKind.SequenceReverse, p1.Type, p1, p2);
}
public ExprAssignment CreateAssignment(Expr pLHS, Expr pRHS)
{
ExprAssignment pAssignment = new ExprAssignment();
- pAssignment.Kind = ExpressionKind.EK_ASSIGNMENT;
- pAssignment.Type = pLHS.Type;
pAssignment.Flags = EXPRFLAG.EXF_ASSGOP;
pAssignment.LHS = pLHS;
pAssignment.RHS = pRHS;
@@ -812,10 +623,6 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
public ExprNamedArgumentSpecification CreateNamedArgumentSpecification(Name pName, Expr pValue)
{
ExprNamedArgumentSpecification pResult = new ExprNamedArgumentSpecification();
-
- pResult.Kind = ExpressionKind.EK_NamedArgumentSpecification;
- pResult.Type = pValue.Type;
- pResult.Flags = 0;
pResult.Value = pValue;
pResult.Name = pName;
@@ -829,18 +636,10 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
)
{
ExprWrap rval = new ExprWrap();
- rval.Kind = ExpressionKind.EK_WRAP;
- rval.Type = null;
- rval.Flags = 0;
rval.OptionalExpression = pOptionalExpression;
- if (pOptionalExpression != null)
- {
- rval.Type = pOptionalExpression.Type;
- }
- rval.Flags |= EXPRFLAG.EXF_LVALUE;
+ rval.Flags = EXPRFLAG.EXF_LVALUE;
- Debug.Assert(rval != null);
- return (rval);
+ return rval;
}
public ExprWrap CreateWrapNoAutoFree(Scope pCurrentScope, Expr pOptionalWrap)
{
@@ -850,12 +649,12 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
public ExprBinOp CreateSave(ExprWrap wrap)
{
Debug.Assert(wrap != null);
- ExprBinOp expr = CreateBinop(ExpressionKind.EK_SAVE, wrap.Type, wrap.OptionalExpression, wrap);
+ ExprBinOp expr = CreateBinop(ExpressionKind.Save, wrap.Type, wrap.OptionalExpression, wrap);
expr.SetAssignment();
return expr;
}
- public Expr CreateNull()
+ public ExprConstant CreateNull()
{
return CreateConstant(GetTypes().GetNullType(), default(ConstVal));
}
@@ -878,7 +677,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
last = newItem;
return;
}
- if (first.Kind != ExpressionKind.EK_LIST)
+ if (first.Kind != ExpressionKind.List)
{
Debug.Assert(last == first);
first = CreateList(first, newItem);
@@ -886,7 +685,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
return;
}
Debug.Assert((last as ExprList)?.OptionalNextListNode != null);
- Debug.Assert((last as ExprList).OptionalNextListNode.Kind != ExpressionKind.EK_LIST);
+ Debug.Assert((last as ExprList).OptionalNextListNode.Kind != ExpressionKind.List);
ExprList list = (ExprList)last;
list.OptionalNextListNode = CreateList(list.OptionalNextListNode, newItem);
last = list.OptionalNextListNode;
@@ -895,13 +694,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
public ExprList CreateList(Expr op1, Expr op2)
{
ExprList rval = new ExprList();
- rval.Kind = ExpressionKind.EK_LIST;
- rval.Type = null;
- rval.Flags = 0;
rval.OptionalElement = op1;
rval.OptionalNextListNode = op2;
- Debug.Assert(rval != null);
- return (rval);
+ return rval;
}
public ExprList CreateList(Expr op1, Expr op2, Expr op3)
{
@@ -915,28 +710,21 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
Debug.Assert(pTypeArray != null);
ExprTypeArguments rval = new ExprTypeArguments();
- rval.Kind = ExpressionKind.EK_TYPEARGUMENTS;
- rval.Type = null;
- rval.Flags = 0;
rval.OptionalElements = pOptionalElements;
return rval;
}
- public ExprClass CreateClass(CType pType, Expr pOptionalLHS, ExprTypeArguments pOptionalTypeArguments)
+ public ExprClass CreateClass(CType pType, ExprTypeArguments pOptionalTypeArguments)
{
Debug.Assert(pType != null);
- ExprClass rval = new ExprClass();
- rval.Kind = ExpressionKind.EK_CLASS;
- rval.Type = pType;
- rval.TypeOrNamespace = pType;
- Debug.Assert(rval != null);
- return (rval);
+ ExprClass rval = new ExprClass(pType);
+ return rval;
}
public ExprClass MakeClass(CType pType)
{
Debug.Assert(pType != null);
- return CreateClass(pType, null/* LHS */, null/* type arguments */);
+ return CreateClass(pType, null/* type arguments */);
}
}
}
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExpressionBinder.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExpressionBinder.cs
index 540da1c269..3f49bd4b39 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExpressionBinder.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExpressionBinder.cs
@@ -430,7 +430,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
op2 = bindPtrToString(op2);
}
- else if (op2.Kind == ExpressionKind.EK_ADDR)
+ else if (op2.Kind == ExpressionKind.Addr)
{
op2.Flags |= EXPRFLAG.EXF_ADDRNOCONV;
}
@@ -502,13 +502,8 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
Expr pTemp = mustConvert(x, pDestType);
if (pDestType == pIntType)
return pTemp;
-#if CSEE
- EXPRFLAG flag = 0;
-#else
- EXPRFLAG flag = EXPRFLAG.EXF_INDEXEXPR;
-#endif
ExprClass exprType = GetExprFactory().MakeClass(pDestType);
- return GetExprFactory().CreateCast(flag, exprType, pTemp);
+ return GetExprFactory().CreateCast(EXPRFLAG.EXF_INDEXEXPR, exprType, pTemp);
});
if (cIndices != rank)
@@ -536,7 +531,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
CType typeRet = GetTypes().GetPointer(GetReqPDT(PredefinedType.PT_CHAR));
- return GetExprFactory().CreateUnaryOp(ExpressionKind.EK_ADDR, typeRet, @string);
+ return GetExprFactory().CreateUnaryOp(ExpressionKind.Addr, typeRet, @string);
}
private ExprQuestionMark BindPtrToArray(ExprLocal exprLoc, Expr array)
@@ -562,21 +557,21 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
// the time of the cast and the assignment to the local, we're toast.
ExprWrap wrapArray = WrapShortLivedExpression(array);
Expr save = GetExprFactory().CreateSave(wrapArray);
- Expr nullTest = GetExprFactory().CreateBinop(ExpressionKind.EK_NE, GetReqPDT(PredefinedType.PT_BOOL), save, GetExprFactory().CreateConstant(wrapArray.Type, ConstVal.Get(0)));
+ Expr nullTest = GetExprFactory().CreateBinop(ExpressionKind.NotEq, GetReqPDT(PredefinedType.PT_BOOL), save, GetExprFactory().CreateConstant(wrapArray.Type, ConstVal.Get(0)));
Expr lenTest;
- if (array.Type.AsArrayType().rank == 1)
+ if (array.Type.AsArrayType().IsSZArray)
{
Expr len = GetExprFactory().CreateArrayLength(wrapArray);
- lenTest = GetExprFactory().CreateBinop(ExpressionKind.EK_NE, GetReqPDT(PredefinedType.PT_BOOL), len, GetExprFactory().CreateConstant(GetReqPDT(PredefinedType.PT_INT), ConstVal.Get(0)));
+ lenTest = GetExprFactory().CreateBinop(ExpressionKind.NotEq, GetReqPDT(PredefinedType.PT_BOOL), len, GetExprFactory().CreateConstant(GetReqPDT(PredefinedType.PT_INT), ConstVal.Get(0)));
}
else
{
ExprCall call = BindPredefMethToArgs(PREDEFMETH.PM_ARRAY_GETLENGTH, wrapArray, null, null, null);
- lenTest = GetExprFactory().CreateBinop(ExpressionKind.EK_NE, GetReqPDT(PredefinedType.PT_BOOL), call, GetExprFactory().CreateConstant(GetReqPDT(PredefinedType.PT_INT), ConstVal.Get(0)));
+ lenTest = GetExprFactory().CreateBinop(ExpressionKind.NotEq, GetReqPDT(PredefinedType.PT_BOOL), call, GetExprFactory().CreateConstant(GetReqPDT(PredefinedType.PT_INT), ConstVal.Get(0)));
}
- test = GetExprFactory().CreateBinop(ExpressionKind.EK_LOGAND, GetReqPDT(PredefinedType.PT_BOOL), nullTest, lenTest);
+ test = GetExprFactory().CreateBinop(ExpressionKind.LogicalAnd, GetReqPDT(PredefinedType.PT_BOOL), nullTest, lenTest);
Expr list = null;
Expr pList = list;
@@ -587,18 +582,18 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
}
Debug.Assert(list != null);
- Expr exprAddr = GetExprFactory().CreateUnaryOp(ExpressionKind.EK_ADDR, typePtrElem, GetExprFactory().CreateArrayIndex(wrapArray, list));
+ Expr exprAddr = GetExprFactory().CreateUnaryOp(ExpressionKind.Addr, typePtrElem, GetExprFactory().CreateArrayIndex(wrapArray, list));
exprAddr.Flags |= EXPRFLAG.EXF_ADDRNOCONV;
exprAddr = mustConvert(exprAddr, exprLoc.Type, CONVERTTYPE.NOUDC);
exprAddr = GetExprFactory().CreateAssignment(exprLoc, exprAddr);
exprAddr.Flags |= EXPRFLAG.EXF_ASSGOP;
- exprAddr = GetExprFactory().CreateBinop(ExpressionKind.EK_SEQREV, exprLoc.Type, exprAddr, WrapShortLivedExpression(wrapArray)); // free the temp
+ exprAddr = GetExprFactory().CreateBinop(ExpressionKind.SequenceReverse, exprLoc.Type, exprAddr, WrapShortLivedExpression(wrapArray)); // free the temp
Expr exprnull = GetExprFactory().CreateZeroInit(exprLoc.Type);
exprnull = GetExprFactory().CreateAssignment(exprLoc, exprnull);
exprnull.Flags |= EXPRFLAG.EXF_ASSGOP;
- ExprBinOp exprRes = GetExprFactory().CreateBinop(ExpressionKind.EK_BINOP, exprAddr.Type, exprAddr, exprnull);
+ ExprBinOp exprRes = GetExprFactory().CreateBinop(ExpressionKind.BinaryOp, exprAddr.Type, exprAddr, exprnull);
return GetExprFactory().CreateQuestionMark(test, exprRes);
}
@@ -679,17 +674,16 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
////////////////////////////////////////////////////////////////////////////////
// Create a cast node with the given expression flags.
- private void bindSimpleCast(Expr exprSrc, ExprTypeOrNamespace typeDest, out Expr pexprDest)
+ private void bindSimpleCast(Expr exprSrc, ExprClass typeDest, out Expr pexprDest)
{
bindSimpleCast(exprSrc, typeDest, out pexprDest, 0);
}
- private void bindSimpleCast(Expr exprSrc, ExprTypeOrNamespace exprTypeDest, out Expr pexprDest, EXPRFLAG exprFlags)
+ private void bindSimpleCast(Expr exprSrc, ExprClass exprTypeDest, out Expr pexprDest, EXPRFLAG exprFlags)
{
Debug.Assert(exprTypeDest != null);
- Debug.Assert(exprTypeDest.TypeOrNamespace != null);
- Debug.Assert(exprTypeDest.TypeOrNamespace.IsType);
- CType typeDest = exprTypeDest.TypeOrNamespace.AsType();
+ Debug.Assert(exprTypeDest.Type != null);
+ CType typeDest = exprTypeDest.Type;
pexprDest = null;
// If the source is a constant, and cast is really simple (no change in fundamental
// type, no flags), then create a new constant node with the new type instead of
@@ -797,111 +791,109 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
// Construct the Expr node which corresponds to a field expression
// for a given field and pObject pointer.
- internal Expr BindToField(Expr pObject, FieldWithType fwt, BindingFlag bindFlags)
- {
- return BindToField(pObject, fwt, bindFlags, null/*OptionalLHS*/);
- }
-
- ////////////////////////////////////////////////////////////////////////////////
-
- private Expr BindToField(Expr pOptionalObject, FieldWithType fwt, BindingFlag bindFlags, Expr pOptionalLHS)
+ internal Expr BindToField(Expr pOptionalObject, FieldWithType fwt, BindingFlag bindFlags)
{
Debug.Assert(fwt.GetType() != null && fwt.Field().getClass() == fwt.GetType().getAggregate());
CType pFieldType = GetTypes().SubstType(fwt.Field().GetType(), fwt.GetType());
if (pOptionalObject != null && !pOptionalObject.IsOK)
{
- ExprField pField = GetExprFactory().CreateField(0, pFieldType, pOptionalObject, 0, fwt, pOptionalLHS);
+ ExprField pField = GetExprFactory().CreateField(0, pFieldType, pOptionalObject, fwt);
pField.SetError();
return pField;
}
- Expr pOriginalObject = pOptionalObject;
bool bIsMatchingStatic;
bool pfConstrained;
pOptionalObject = AdjustMemberObject(fwt, pOptionalObject, out pfConstrained, out bIsMatchingStatic);
checkUnsafe(pFieldType); // added to the binder so we don't bind to pointer ops
- ExprField pResult;
- {
- bool isLValue = false;
- if ((pOptionalObject != null && pOptionalObject.Type.IsPointerType()) || objectIsLvalue(pOptionalObject))
- {
- isLValue = true;
- }
- // Exception: a readonly field is not an lvalue unless we're in the constructor/static constructor appropriate
- // for the field.
- if (RespectReadonly() && fwt.Field().isReadOnly)
- {
- if (ContainingAgg() == null ||
- !InMethod() || !InConstructor() ||
- fwt.Field().getClass() != ContainingAgg() ||
- InStaticMethod() != fwt.Field().isStatic ||
- (pOptionalObject != null && !isThisPointer(pOptionalObject)) ||
- InAnonymousMethod())
- {
- isLValue = false;
- }
- }
+ bool isLValue = (pOptionalObject != null && pOptionalObject.Type.IsPointerType()) || objectIsLvalue(pOptionalObject);
- pResult = GetExprFactory().CreateField(isLValue ? EXPRFLAG.EXF_LVALUE : 0, pFieldType, pOptionalObject, 0, fwt, pOptionalLHS);
- if (!bIsMatchingStatic)
- {
- pResult.SetMismatchedStaticBit();
- }
-
- if (pFieldType.IsErrorType())
+ // Exception: a readonly field is not an lvalue unless we're in the constructor/static constructor appropriate
+ // for the field.
+ if (RespectReadonly() && fwt.Field().isReadOnly)
+ {
+ if (ContainingAgg() == null || !InMethod() || !InConstructor()
+ || fwt.Field().getClass() != ContainingAgg() || InStaticMethod() != fwt.Field().isStatic
+ || (pOptionalObject != null && !isThisPointer(pOptionalObject)) || InAnonymousMethod())
{
- pResult.SetError();
+ isLValue = false;
}
- Debug.Assert(BindingFlag.BIND_MEMBERSET == (BindingFlag)EXPRFLAG.EXF_MEMBERSET);
- pResult.Flags |= (EXPRFLAG)(bindFlags & BindingFlag.BIND_MEMBERSET);
}
+ CType fieldType = null;
// If this field is the backing field of a WindowsRuntime event then we need to bind to its
// invocationlist property which is a delegate containing all the handlers.
- if (fwt.Field().isEvent &&
- fwt.Field().getEvent(GetSymbolLoader()) != null &&
- fwt.Field().getEvent(GetSymbolLoader()).IsWindowsRuntimeEvent)
+ if (fwt.Field().isEvent && fwt.Field().getEvent(GetSymbolLoader()) != null
+ && fwt.Field().getEvent(GetSymbolLoader()).IsWindowsRuntimeEvent)
{
- CType fieldType = fwt.Field().GetType();
+ fieldType = fwt.Field().GetType();
if (fieldType.IsAggregateType())
{
// Access event backing field (EventRegistrationTokenTable<T>) using
// EventRegistrationTokenTable<T>.GetOrCreateEventRegistrationTokenTable()
// to ensure non-null
- pResult.Type = GetTypes().GetParameterModifier(pResult.Type, false);
+ pFieldType = GetTypes().GetParameterModifier(pFieldType, false);
+ }
+ else
+ {
+ fieldType = null;
+ }
+ }
+
+ ExprField pResult = GetExprFactory()
+ .CreateField(isLValue ? EXPRFLAG.EXF_LVALUE : 0, pFieldType, pOptionalObject, fwt);
+ if (!bIsMatchingStatic)
+ {
+ pResult.SetMismatchedStaticBit();
+ }
- Name getOrCreateMethodName = NameManager.GetPredefinedName(PredefinedName.PN_GETORCREATEEVENTREGISTRATIONTOKENTABLE);
- GetSymbolLoader().RuntimeBinderSymbolTable.PopulateSymbolTableWithName(getOrCreateMethodName.Text, null, fieldType.AssociatedSystemType);
- MethodSymbol getOrCreateMethod = GetSymbolLoader().LookupAggMember(getOrCreateMethodName, fieldType.getAggregate(), symbmask_t.MASK_MethodSymbol).AsMethodSymbol();
+ if (pFieldType.IsErrorType())
+ {
+ pResult.SetError();
+ }
- MethPropWithInst getOrCreatempwi = new MethPropWithInst(getOrCreateMethod, fieldType.AsAggregateType());
- ExprMemberGroup getOrCreateGrp = GetExprFactory().CreateMemGroup(null, getOrCreatempwi);
+ Debug.Assert(BindingFlag.BIND_MEMBERSET == (BindingFlag)EXPRFLAG.EXF_MEMBERSET);
+ pResult.Flags |= (EXPRFLAG)(bindFlags & BindingFlag.BIND_MEMBERSET);
- Expr getOrCreateCall = BindToMethod(new MethWithInst(getOrCreatempwi),
- pResult,
- getOrCreateGrp,
- (MemLookFlags)MemLookFlags.None);
+ if (fieldType != null)
+ {
+ Name getOrCreateMethodName =
+ NameManager.GetPredefinedName(PredefinedName.PN_GETORCREATEEVENTREGISTRATIONTOKENTABLE);
+ GetSymbolLoader()
+ .RuntimeBinderSymbolTable.PopulateSymbolTableWithName(
+ getOrCreateMethodName.Text, null, fieldType.AssociatedSystemType);
+ MethodSymbol getOrCreateMethod =
+ GetSymbolLoader()
+ .LookupAggMember(getOrCreateMethodName, fieldType.getAggregate(), symbmask_t.MASK_MethodSymbol)
+ .AsMethodSymbol();
- AggregateSymbol fieldTypeSymbol = fieldType.AsAggregateType().GetOwningAggregate();
- Name invocationListName = NameManager.GetPredefinedName(PredefinedName.PN_INVOCATIONLIST);
+ MethPropWithInst getOrCreatempwi = new MethPropWithInst(getOrCreateMethod, fieldType.AsAggregateType());
+ ExprMemberGroup getOrCreateGrp = GetExprFactory().CreateMemGroup(null, getOrCreatempwi);
- // InvocationList might not be populated in the symbol table as no one would have called it.
- GetSymbolLoader().RuntimeBinderSymbolTable.PopulateSymbolTableWithName(invocationListName.Text, null, fieldType.AssociatedSystemType);
- PropertySymbol invocationList = GetSymbolLoader().LookupAggMember(
- invocationListName,
- fieldTypeSymbol,
- symbmask_t.MASK_PropertySymbol).AsPropertySymbol();
+ Expr getOrCreateCall = BindToMethod(
+ new MethWithInst(getOrCreatempwi), pResult, getOrCreateGrp, (MemLookFlags)MemLookFlags.None);
- MethPropWithInst mpwi = new MethPropWithInst(invocationList, fieldType.AsAggregateType());
- ExprMemberGroup memGroup = GetExprFactory().CreateMemGroup(getOrCreateCall, mpwi);
+ AggregateSymbol fieldTypeSymbol = fieldType.AsAggregateType().GetOwningAggregate();
+ Name invocationListName = NameManager.GetPredefinedName(PredefinedName.PN_INVOCATIONLIST);
- PropWithType pwt = new PropWithType(invocationList, fieldType.AsAggregateType());
- Expr propertyExpr = BindToProperty(getOrCreateCall, pwt, bindFlags, null, null, memGroup);
- return propertyExpr;
- }
+ // InvocationList might not be populated in the symbol table as no one would have called it.
+ GetSymbolLoader()
+ .RuntimeBinderSymbolTable.PopulateSymbolTableWithName(
+ invocationListName.Text, null, fieldType.AssociatedSystemType);
+ PropertySymbol invocationList =
+ GetSymbolLoader()
+ .LookupAggMember(invocationListName, fieldTypeSymbol, symbmask_t.MASK_PropertySymbol)
+ .AsPropertySymbol();
+
+ MethPropWithInst mpwi = new MethPropWithInst(invocationList, fieldType.AsAggregateType());
+ ExprMemberGroup memGroup = GetExprFactory().CreateMemGroup(getOrCreateCall, mpwi);
+
+ PropWithType pwt = new PropWithType(invocationList, fieldType.AsAggregateType());
+ Expr propertyExpr = BindToProperty(getOrCreateCall, pwt, bindFlags, null, null, memGroup);
+ return propertyExpr;
}
return pResult;
@@ -1364,12 +1356,12 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
}
////////////////////////////////////////////////////////////////////////////////
// Report a bad operator types error to the user.
- private Expr BadOperatorTypesError(ExpressionKind ek, Expr pOperand1, Expr pOperand2)
+ private ExprOperator BadOperatorTypesError(ExpressionKind ek, Expr pOperand1, Expr pOperand2)
{
return BadOperatorTypesError(ek, pOperand1, pOperand2, null);
}
- private Expr BadOperatorTypesError(ExpressionKind ek, Expr pOperand1, Expr pOperand2, CType pTypeErr)
+ private ExprOperator BadOperatorTypesError(ExpressionKind ek, Expr pOperand1, Expr pOperand2, CType pTypeErr)
{
// This is a hack, but we need to store the operation somewhere... the first argument's as
// good a place as any.
@@ -1401,7 +1393,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
pTypeErr = GetReqPDT(PredefinedType.PT_OBJECT);
}
- Expr rval = GetExprFactory().CreateOperator(ek, pTypeErr, pOperand1, pOperand2);
+ ExprOperator rval = GetExprFactory().CreateOperator(ek, pTypeErr, pOperand1, pOperand2);
rval.SetError();
return rval;
}
@@ -1497,7 +1489,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
switch (expr.Kind)
{
- case ExpressionKind.EK_PROP:
+ case ExpressionKind.Property:
if (kind == CheckLvalueKind.OutParameter)
{
// passing a property as ref or out
@@ -1536,7 +1528,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
}
break;
- case ExpressionKind.EK_ARRAYLENGTH:
+ case ExpressionKind.ArrayLength:
if (kind == CheckLvalueKind.OutParameter)
{
// passing a property as ref or out
@@ -1549,12 +1541,12 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
}
return true;
- case ExpressionKind.EK_BOUNDLAMBDA:
- case ExpressionKind.EK_UNBOUNDLAMBDA:
- case ExpressionKind.EK_CONSTANT:
+ case ExpressionKind.BoundLambda:
+ case ExpressionKind.UnboundLambda:
+ case ExpressionKind.Constant:
ErrorContext.Error(GetStandardLvalueError(kind));
return false;
- case ExpressionKind.EK_MEMGRP:
+ case ExpressionKind.MemberGroup:
{
ErrorCode err = (kind == CheckLvalueKind.OutParameter) ? ErrorCode.ERR_RefReadonlyLocalCause : ErrorCode.ERR_AssgReadonlyLocalCause;
ErrorContext.Error(err, ((ExprMemberGroup)expr).Name, new ErrArgIds(MessageID.MethodGroup));
@@ -1725,10 +1717,6 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
ExprThisPointer thisExpr = GetExprFactory().CreateThis(Context.GetThisPointer(), true);
thisExpr.SetMismatchedStaticBit();
- if (thisExpr.Type == null)
- {
- thisExpr.Type = GetTypes().GetErrorSym();
- }
return thisExpr;
}
@@ -1844,7 +1832,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
isThisPointer(pObject) || // the this pointer's fields or props are lvalues
- (((pObject.Flags & EXPRFLAG.EXF_LVALUE) != 0) && (pObject.Kind != ExpressionKind.EK_PROP)) ||
+ (((pObject.Flags & EXPRFLAG.EXF_LVALUE) != 0) && (pObject.Kind != ExpressionKind.Property)) ||
// things marked as lvalues have props/fields which are lvalues, with one exception: props of structs
// do not have fields/structs as lvalues
@@ -2069,7 +2057,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
// we need to create an array and put it as the last arg...
CType substitutedArrayType = GetTypes().SubstType(mp.Params[mp.Params.Count - 1], type, pTypeArgs);
- if (!substitutedArrayType.IsArrayType() || substitutedArrayType.AsArrayType().rank != 1)
+ if (!substitutedArrayType.IsArrayType() || !substitutedArrayType.AsArrayType().IsSZArray)
{
// Invalid type for params array parameter. Happens in LAF scenarios, e.g.
//
@@ -2495,8 +2483,8 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
private Name ekName(ExpressionKind ek)
{
- Debug.Assert(ek >= ExpressionKind.EK_FIRSTOP && (ek - ExpressionKind.EK_FIRSTOP) < (int)s_EK2NAME.Length);
- return NameManager.GetPredefinedName(s_EK2NAME[ek - ExpressionKind.EK_FIRSTOP]);
+ Debug.Assert(ek >= ExpressionKind.FirstOp && (ek - ExpressionKind.FirstOp) < (int)s_EK2NAME.Length);
+ return NameManager.GetPredefinedName(s_EK2NAME[ek - ExpressionKind.FirstOp]);
}
private void checkUnsafe(CType type)
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExpressionKind.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExpressionKind.cs
index 8fd82f431d..af2f06c42a 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExpressionKind.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExpressionKind.cs
@@ -6,9 +6,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
internal enum ExpressionKind
{
- EK_BLOCK,
+ Block,
//EK_STMTAS,
- EK_RETURN,
+ Return,
//EK_DECL,
//EK_LABEL,
//EK_PLACEHOLDERLABEL,
@@ -20,7 +20,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
//EK_TRY,
//EK_HANDLER,
//EK_THROW,
- EK_NOOP,
+ NoOp,
//EK_DEBUGNOOP,
//EK_For,
@@ -33,65 +33,65 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
//EK_Attribute,
// Now expressions. Keep BINOP first!
- EK_BINOP,
- EK_UNARYOP,
- EK_ASSIGNMENT,
- EK_LIST,
- EK_QUESTIONMARK,
+ BinaryOp,
+ UnaryOp,
+ Assignment,
+ List,
+ QuestionMark,
//EK_MAKEREFANY,
//EK_TYPEREFANY,
- EK_ARRAYINDEX,
- EK_ARRAYLENGTH,
- EK_ARGUMENTHANDLE,
- EK_CALL,
- EK_EVENT,
- EK_FIELD,
- EK_LOCAL,
+ ArrayIndex,
+ ArrayLength,
+ //EK_ARGUMENTHANDLE,
+ Call,
+ Event,
+ Field,
+ Local,
//EK_BASE,
- EK_THISPOINTER,
- EK_CONSTANT,
+ ThisPointer,
+ Constant,
//EK_TYPEORSIMPLENAME,
// The following exprs are used to represent the results of typebinding.
// Look in exprnodes.h for a more detailed description.
- EK_TYPEARGUMENTS,
- EK_TYPEORNAMESPACE,
+ TypeArguments,
+ //EK_TYPEORNAMESPACE,
//EK_TYPEORNAMESPACEERROR,
//EK_ARRAYTYPE,
//EK_POINTERTYPE,
//EK_NULLABLETYPE,
- EK_CLASS,
+ Class,
//EK_NSPACE,
- EK_ALIAS,
+ //EK_ALIAS,
// End type exprs.
//EK_ERROR,
- EK_FUNCPTR,
- EK_PROP,
- EK_MULTI,
- EK_MULTIGET,
+ FunctionPointer,
+ Property,
+ Multi,
+ MultiGet,
//EK_STTMP,
//EK_LDTMP,
//EK_FREETMP,
- EK_WRAP,
- EK_CONCAT,
- EK_ARRINIT,
+ Wrap,
+ Concat,
+ ArrayInit,
//EK_ARRAYCREATION,
- EK_CAST,
+ Cast,
//EK_EXPLICITCAST,
- EK_USERDEFINEDCONVERSION,
+ UserDefinedConversion,
//EK_ARGLIST,
//EK_NEWTYVAR,
- EK_TYPEOF,
+ TypeOf,
//EK_SIZEOF,
- EK_ZEROINIT,
- EK_USERLOGOP,
- EK_MEMGRP,
- EK_BOUNDLAMBDA,
- EK_UNBOUNDLAMBDA,
+ ZeroInit,
+ UserLogicalOp,
+ MemberGroup,
+ BoundLambda,
+ UnboundLambda,
//EK_LAMBDAPARAMETER,
- EK_HOISTEDLOCALEXPR,
- EK_FIELDINFO,
- EK_METHODINFO,
- EK_PROPERTYINFO,
+ HoistedLocalExpression,
+ FieldInfo,
+ MethodInfo,
+ PropertyInfo,
//EK_DBLQMARK,
//EK_VALUERA,
//EK_INITIALIZER,
@@ -102,103 +102,99 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
//EK_DELEGATECREATION,
//EK_COLLECTIONELEMENT,
//EK_METHODBODY,
- EK_NamedArgumentSpecification,
+ NamedArgumentSpecification,
/***************************************************************************************************
Ones below here are not used to create actual expr types, only EK_ values.
***************************************************************************************************/
- EK_COUNT,
- EK_EQUALS, // this is only used as a parameter, no actual exprs are constructed with it
- EK_FIRSTOP = EK_EQUALS,
- EK_COMPARE, // this is only used as a parameter, no actual exprs are constructed with it
- EK_TRUE,
- EK_FALSE,
- EK_INC,
- EK_DEC,
- EK_LOGNOT,
- // keep EK_EQ to EK_GE in the same sequence (ILGENREC::genCondBranch)
- EK_EQ,
- EK_RELATIONAL_MIN = EK_EQ,
- EK_NE,
- EK_LT,
- EK_LE,
- EK_GT,
- EK_GE,
- EK_RELATIONAL_MAX = EK_GE,
- // keep EK_ADD to EK_RSHIFT in the same sequence (ILGENREC::genBinopExpr)
- EK_ADD,
- EK_ARITH_MIN = EK_ADD,
- EK_SUB,
- EK_MUL,
- EK_DIV,
- EK_MOD,
- EK_NEG,
- EK_UPLUS,
- EK_ARITH_MAX = EK_UPLUS,
- EK_BITAND,
- EK_BIT_MIN = EK_BITAND,
- EK_BITOR,
- EK_BITXOR,
- EK_BITNOT,
- EK_BIT_MAX = EK_BITNOT,
- EK_LSHIFT,
- EK_RSHIFT,
- // keep EK_ADD to EK_RSHIFT in the same sequence (ILGENREC::genBinopExpr)
- EK_LOGAND,
- EK_LOGOR,
- EK_SEQUENCE, // p1 is side effects, p2 is values
- EK_SEQREV, // p1 is values, p2 is side effects
- EK_SAVE, // p1 is expr, p2 is wrap to be saved into...
- EK_SWAP,
- EK_INDIR,
- EK_ADDR,
+ ExpressionKindCount,
+ EqualsParam, // this is only used as a parameter, no actual exprs are constructed with it
+ FirstOp = EqualsParam,
+ Compare, // this is only used as a parameter, no actual exprs are constructed with it
+ True,
+ False,
+ Inc,
+ Dec,
+ LogicalNot,
+ // keep Eq to GreaterThanOrEqual in the same sequence (ILGENREC::genCondBranch)
+ Eq,
+ RelationalMin = Eq,
+ NotEq,
+ LessThan,
+ LessThanOrEqual,
+ GreaterThan,
+ GreaterThanOrEqual,
+ RelationalMax = GreaterThanOrEqual,
+ // keep Add to RightShift in the same sequence (ILGENREC::genBinopExpr)
+ Add,
+ Subtract,
+ Multiply,
+ Divide,
+ Modulo,
+ Negate,
+ UnaryPlus,
+ BitwiseAnd,
+ BitwiseOr,
+ BitwiseExclusiveOr,
+ BitwiseNot,
+ LeftShirt,
+ RightShift,
+ // keep Add to RightShift in the same sequence (ILGENREC::genBinopExpr)
+ LogicalAnd,
+ LogicalOr,
+ Sequence, // p1 is side effects, p2 is values
+ SequenceReverse, // p1 is values, p2 is side effects
+ Save, // p1 is expr, p2 is wrap to be saved into...
+ Swap,
+ Indir,
+ Addr,
// Next we have the predefined operator kinds. We have one EXPRKINDDEF for each of these.
// So for example, we will have an EK_STRINGCOMPARISON, and an EK_DELEGATEADDITION etc.
- EK_STRINGEQ,
- EK_STRINGNE,
- EK_DELEGATEEQ,
- EK_DELEGATENE,
- EK_DELEGATEADD,
- EK_DELEGATESUB,
- EK_DECIMALNEG,
- EK_DECIMALINC,
- EK_DECIMALDEC,
+ StringEq,
+ StringNotEq,
+ DelegateEq,
+ DelegateNotEq,
+ DelegateAdd,
+ DelegateSubtract,
+ DecimalNegate,
+ DecimalInc,
+ DecimalDec,
#if EERANGE
EK_RANGE,
#endif
- EK_MULTIOFFSET, // This has to be last!!! To deal /w multiops we add this to the op to obtain the ek in the op table
+ MultiOffset, // This has to be last!!! To deal /w multiops we add this to the op to obtain the ek in the op table
// Statements are all before expressions and the first expression is EK_BINOP
- EK_ExprMin = EK_BINOP,
- EK_StmtLim = EK_ExprMin,
// EK types starting with EK_COUNT do not have associated EXPR structures,
// and are all binary operators.
- EK_TypeLim = EK_COUNT,
+ TypeLimit = ExpressionKindCount,
}
internal static class ExpressionKindExtensions
{
- public static bool isRelational(this ExpressionKind kind)
+ public static bool IsRelational(this ExpressionKind kind)
{
- return ExpressionKind.EK_RELATIONAL_MIN <= kind && kind <= ExpressionKind.EK_RELATIONAL_MAX;
+ return ExpressionKind.RelationalMin <= kind && kind <= ExpressionKind.RelationalMax;
}
- public static bool isUnaryOperator(this ExpressionKind kind)
+
+ public static bool IsUnaryOperator(this ExpressionKind kind)
{
switch (kind)
{
- case ExpressionKind.EK_TRUE:
- case ExpressionKind.EK_FALSE:
- case ExpressionKind.EK_INC:
- case ExpressionKind.EK_DEC:
- case ExpressionKind.EK_LOGNOT:
- case ExpressionKind.EK_NEG:
- case ExpressionKind.EK_UPLUS:
- case ExpressionKind.EK_BITNOT:
- case ExpressionKind.EK_ADDR:
- case ExpressionKind.EK_DECIMALNEG:
- case ExpressionKind.EK_DECIMALINC:
- case ExpressionKind.EK_DECIMALDEC:
+ case ExpressionKind.True:
+ case ExpressionKind.False:
+ case ExpressionKind.Inc:
+ case ExpressionKind.Dec:
+ case ExpressionKind.LogicalNot:
+ case ExpressionKind.Negate:
+ case ExpressionKind.UnaryPlus:
+ case ExpressionKind.BitwiseNot:
+ case ExpressionKind.Addr:
+ case ExpressionKind.DecimalNegate:
+ case ExpressionKind.DecimalInc:
+ case ExpressionKind.DecimalDec:
return true;
}
+
return false;
}
}
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/GroupToArgsBinder.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/GroupToArgsBinder.cs
index 218df76bd1..7708f197ae 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/GroupToArgsBinder.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/GroupToArgsBinder.cs
@@ -647,7 +647,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
Name name = NameManager.GetPredefinedName(PredefinedName.PN_CAP_VALUE);
FieldSymbol field = symbolLoader.LookupAggMember(name, agg, symbmask_t.MASK_FieldSymbol).AsFieldSymbol();
FieldWithType fwt = new FieldWithType(field, agg.getThisType());
- ExprField exprField = exprFactory.CreateField(0, agg.getThisType(), null, 0, fwt, null);
+ ExprField exprField = exprFactory.CreateField(0, agg.getThisType(), null, fwt);
if (agg.getThisType() != type)
{
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ITypeOrNamespace.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ITypeOrNamespace.cs
deleted file mode 100644
index 883dddb6cd..0000000000
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ITypeOrNamespace.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace Microsoft.CSharp.RuntimeBinder.Semantics
-{
- /////////////////////////////////////////////////////////////////////////////////
- // This is the base interface that Type and Namespace symbol inherit.
-
- internal interface ITypeOrNamespace
- {
- bool IsType { get; }
-
- bool IsNamespace { get; }
-
- AssemblyQualifiedNamespaceSymbol AsNamespace();
- CType AsType();
- }
-}
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ImplicitConversion.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ImplicitConversion.cs
index 775d10e528..4b76901b89 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ImplicitConversion.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ImplicitConversion.cs
@@ -16,12 +16,12 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
private sealed class ImplicitConversion
{
- public ImplicitConversion(ExpressionBinder binder, Expr exprSrc, CType typeSrc, ExprTypeOrNamespace typeDest, bool needsExprDest, CONVERTTYPE flags)
+ public ImplicitConversion(ExpressionBinder binder, Expr exprSrc, CType typeSrc, ExprClass typeDest, bool needsExprDest, CONVERTTYPE flags)
{
_binder = binder;
_exprSrc = exprSrc;
_typeSrc = typeSrc;
- _typeDest = typeDest.TypeOrNamespace.AsType();
+ _typeDest = typeDest.Type;
_exprTypeDest = typeDest;
_needsExprDest = needsExprDest;
_flags = flags;
@@ -33,7 +33,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
private readonly Expr _exprSrc;
private readonly CType _typeSrc;
private readonly CType _typeDest;
- private readonly ExprTypeOrNamespace _exprTypeDest;
+ private readonly ExprClass _exprTypeDest;
private readonly bool _needsExprDest;
private CONVERTTYPE _flags;
@@ -395,7 +395,6 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
if (exprUDC != null)
{
exprUDC.UserDefinedCall = exprTmp;
- exprUDC.Type = (CType)exprTmp.Type;
exprTmp = exprUDC;
}
Debug.Assert(exprTmp.Type == nubDst);
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/MemberLookup.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/MemberLookup.cs
index 330ee3f19a..86b51f256c 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/MemberLookup.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/MemberLookup.cs
@@ -287,13 +287,12 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
if (!_fMulti)
{
if (_swtFirst.Sym.IsFieldSymbol() && symCur.IsEventSymbol()
-#if !CSEE // The isEvent bit is only set on symbols which come from source...
+ // The isEvent bit is only set on symbols which come from source...
// This is not a problem for the compiler because the field is only
// accessible in the scope in which it is declared,
// but in the EE we ignore accessibility...
&& _swtFirst.Field().isEvent
-#endif
-)
+ )
{
// m_swtFirst is just the field behind the event symCur so ignore symCur.
continue;
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/MethodTypeInferrer.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/MethodTypeInferrer.cs
index 3a64bbcbb9..589b9c96d0 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/MethodTypeInferrer.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/MethodTypeInferrer.cs
@@ -672,8 +672,8 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
switch (pSource.Kind)
{
- case ExpressionKind.EK_MEMGRP:
- case ExpressionKind.EK_BOUNDLAMBDA:
+ case ExpressionKind.MemberGroup:
+ case ExpressionKind.BoundLambda:
TypeArray pDelegateParameters = pDest.AsAggregateType().GetDelegateParameters(GetSymbolLoader());
if (pDelegateParameters != null)
{
@@ -720,8 +720,8 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
switch (pSource.Kind)
{
- case ExpressionKind.EK_MEMGRP:
- case ExpressionKind.EK_BOUNDLAMBDA:
+ case ExpressionKind.MemberGroup:
+ case ExpressionKind.BoundLambda:
CType pDelegateReturn = pDest.AsAggregateType().GetDelegateReturnType(GetSymbolLoader());
if (pDelegateReturn != null)
{
@@ -1185,7 +1185,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
}
ArrayType pArraySource = pSource.AsArrayType();
ArrayType pArrayDest = pDest.AsArrayType();
- if (pArraySource.rank != pArrayDest.rank)
+ if (pArraySource.rank != pArrayDest.rank || pArraySource.IsSZArray != pArrayDest.IsSZArray)
{
return false;
}
@@ -1379,7 +1379,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
if (pDest.IsArrayType())
{
ArrayType pArrayDest = pDest.AsArrayType();
- if (pArrayDest.rank != pArraySource.rank)
+ if (pArrayDest.rank != pArraySource.rank || pArrayDest.IsSZArray != pArraySource.IsSZArray)
{
return false;
}
@@ -1391,7 +1391,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
pDest.isPredefType(PredefinedType.PT_G_IREADONLYCOLLECTION) ||
pDest.isPredefType(PredefinedType.PT_G_IREADONLYLIST))
{
- if (pArraySource.rank != 1)
+ if (!pArraySource.IsSZArray)
{
return false;
}
@@ -1727,7 +1727,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
if (pSource.IsArrayType())
{
ArrayType pArraySource = pSource.AsArrayType();
- if (pArrayDest.rank != pArraySource.rank)
+ if (pArrayDest.rank != pArraySource.rank || pArrayDest.IsSZArray != pArraySource.IsSZArray)
{
return false;
}
@@ -1739,7 +1739,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
pSource.isPredefType(PredefinedType.PT_G_IREADONLYLIST) ||
pSource.isPredefType(PredefinedType.PT_G_IREADONLYCOLLECTION))
{
- if (pArrayDest.rank != 1)
+ if (!pArrayDest.IsSZArray)
{
return false;
}
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Operators.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Operators.cs
index 5b8fda8917..f779d5c72e 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Operators.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Operators.cs
@@ -90,7 +90,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
private readonly UnaOpSig[] g_rguos;
- private Expr bindUserDefinedBinOp(ExpressionKind ek, BinOpArgInfo info)
+ private ExprBinOp BindUserDefinedBinOp(ExpressionKind ek, BinOpArgInfo info)
{
MethPropWithInst pmpwi = null;
if (info.pt1 <= PredefinedType.PT_ULONG && info.pt2 <= PredefinedType.PT_ULONG)
@@ -105,7 +105,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
case BinOpKind.Logical:
{
// Logical operators cannot be overloaded, but use the bitwise overloads.
- ExprCall call = BindUDBinop((ExpressionKind)(ek - ExpressionKind.EK_LOGAND + ExpressionKind.EK_BITAND), info.arg1, info.arg2, true, out pmpwi);
+ ExprCall call = BindUDBinop((ExpressionKind)(ek - ExpressionKind.LogicalAnd + ExpressionKind.BitwiseAnd), info.arg1, info.arg2, true, out pmpwi);
if (call != null)
{
if (call.IsOK)
@@ -460,7 +460,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
int bestBinopSignature = -1;
// First check if this is a user defined binop. If it is, return it.
- Expr exprUD = bindUserDefinedBinOp(ek, info);
+ ExprBinOp exprUD = BindUserDefinedBinOp(ek, info);
if (exprUD != null)
{
return exprUD;
@@ -552,9 +552,11 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
return BindLiftedEnumArithmeticBinOp(ek, flags, expr1, expr2);
}
+
return BindLiftedStandardBinOp(info, bofs, ek, flags);
}
- private Expr BindLiftedStandardBinOp(BinOpArgInfo info, BinOpFullSig bofs, ExpressionKind ek, EXPRFLAG flags)
+
+ private ExprBinOp BindLiftedStandardBinOp(BinOpArgInfo info, BinOpFullSig bofs, ExpressionKind ek, EXPRFLAG flags)
{
Debug.Assert(bofs.Type1().IsNullableType() || bofs.Type2().IsNullableType());
@@ -865,9 +867,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
switch (ek)
{
- case ExpressionKind.EK_ADD:
+ case ExpressionKind.Add:
return info.typeRaw1.isEnumType() ^ info.typeRaw2.isEnumType();
- case ExpressionKind.EK_SUB:
+ case ExpressionKind.Subtract:
return info.typeRaw1.isEnumType() | info.typeRaw2.isEnumType();
}
@@ -1172,7 +1174,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
case OperatorKind.OP_UPLUS:
uok = UnaOpKind.Plus;
- ek = ExpressionKind.EK_UPLUS;
+ ek = ExpressionKind.UnaryPlus;
break;
case OperatorKind.OP_NEG:
@@ -1181,17 +1183,17 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
flags |= EXPRFLAG.EXF_CHECKOVERFLOW;
}
uok = UnaOpKind.Minus;
- ek = ExpressionKind.EK_NEG;
+ ek = ExpressionKind.Negate;
break;
case OperatorKind.OP_BITNOT:
uok = UnaOpKind.Tilde;
- ek = ExpressionKind.EK_BITNOT;
+ ek = ExpressionKind.BitwiseNot;
break;
case OperatorKind.OP_LOGNOT:
uok = UnaOpKind.Bang;
- ek = ExpressionKind.EK_LOGNOT;
+ ek = ExpressionKind.LogicalNot;
break;
case OperatorKind.OP_POSTINC:
@@ -1201,7 +1203,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
flags |= EXPRFLAG.EXF_CHECKOVERFLOW;
}
uok = UnaOpKind.IncDec;
- ek = ExpressionKind.EK_ADD;
+ ek = ExpressionKind.Add;
break;
case OperatorKind.OP_PREINC:
@@ -1210,7 +1212,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
flags |= EXPRFLAG.EXF_CHECKOVERFLOW;
}
uok = UnaOpKind.IncDec;
- ek = ExpressionKind.EK_ADD;
+ ek = ExpressionKind.Add;
break;
case OperatorKind.OP_POSTDEC:
@@ -1220,7 +1222,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
flags |= EXPRFLAG.EXF_CHECKOVERFLOW;
}
uok = UnaOpKind.IncDec;
- ek = ExpressionKind.EK_SUB;
+ ek = ExpressionKind.Subtract;
break;
case OperatorKind.OP_PREDEC:
@@ -1229,7 +1231,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
flags |= EXPRFLAG.EXF_CHECKOVERFLOW;
}
uok = UnaOpKind.IncDec;
- ek = ExpressionKind.EK_SUB;
+ ek = ExpressionKind.Subtract;
break;
default:
@@ -1255,7 +1257,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
out unaryOpKind/*out*/,
out flags/*out*/))
{
- return BadOperatorTypesError(ExpressionKind.EK_UNARYOP, pArgument, null);
+ return BadOperatorTypesError(ExpressionKind.UnaryOp, pArgument, null);
}
UnaOpMask unaryOpMask = (UnaOpMask)(1 << (int)unaryOpKind);
@@ -1435,14 +1437,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
}
// Check for user defined inc/dec
-#if !CSEE
ExprMultiGet exprGet = GetExprFactory().CreateMultiGet(0, pArgumentType, null);
-#else // CSEE
- Expr exprGet = pArgument;
-#endif // CSEE
-
- Expr exprVal = bindUDUnop((ExpressionKind)(exprKind - ExpressionKind.EK_ADD + ExpressionKind.EK_INC), exprGet);
+ Expr exprVal = bindUDUnop((ExpressionKind)(exprKind - ExpressionKind.Add + ExpressionKind.Inc), exprGet);
if (exprVal != null)
{
if (exprVal.Type != null && !exprVal.Type.IsErrorType() && exprVal.Type != pArgumentType)
@@ -1452,9 +1449,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
Debug.Assert(pArgument != null);
ExprMulti exprMulti = GetExprFactory().CreateMulti(EXPRFLAG.EXF_ASSGOP | flags, pArgumentType, pArgument, exprVal);
-#if ! CSEE
exprGet.OptionalMulti = exprMulti;
-#endif // !CSEE
// Check whether Lvalue can be assigned. checkLvalue may return true
// despite reporting an error.
@@ -1612,7 +1607,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
return false;
}
- private Expr BindLiftedStandardUnop(ExpressionKind ek, EXPRFLAG flags, Expr arg, UnaOpFullSig uofs)
+ private ExprOperator BindLiftedStandardUnop(ExpressionKind ek, EXPRFLAG flags, Expr arg, UnaOpFullSig uofs)
{
NullableType type = uofs.GetType().AsNullableType();
Debug.Assert(arg?.Type != null);
@@ -1672,7 +1667,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
/*
Handles standard binary integer based operators.
*/
- private Expr BindIntBinOp(ExpressionKind ek, EXPRFLAG flags, Expr arg1, Expr arg2)
+ private ExprOperator BindIntBinOp(ExpressionKind ek, EXPRFLAG flags, Expr arg1, Expr arg2)
{
Debug.Assert(arg1.Type.isPredefined() && arg2.Type.isPredefined() && arg1.Type.getPredefType() == arg2.Type.getPredefType());
return BindIntOp(ek, flags, arg1, arg2, arg1.Type.getPredefType());
@@ -1682,7 +1677,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
/*
Handles standard unary integer based operators.
*/
- private Expr BindIntUnaOp(ExpressionKind ek, EXPRFLAG flags, Expr arg)
+ private ExprOperator BindIntUnaOp(ExpressionKind ek, EXPRFLAG flags, Expr arg)
{
Debug.Assert(arg.Type.isPredefined());
return BindIntOp(ek, flags, arg, null, arg.Type.getPredefType());
@@ -1692,7 +1687,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
/*
Handles standard binary floating point (float, double) based operators.
*/
- private Expr BindRealBinOp(ExpressionKind ek, EXPRFLAG flags, Expr arg1, Expr arg2)
+ private ExprOperator BindRealBinOp(ExpressionKind ek, EXPRFLAG flags, Expr arg1, Expr arg2)
{
Debug.Assert(arg1.Type.isPredefined() && arg2.Type.isPredefined() && arg1.Type.getPredefType() == arg2.Type.getPredefType());
return bindFloatOp(ek, flags, arg1, arg2);
@@ -1702,7 +1697,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
/*
Handles standard unary floating point (float, double) based operators.
*/
- private Expr BindRealUnaOp(ExpressionKind ek, EXPRFLAG flags, Expr arg)
+ private ExprOperator BindRealUnaOp(ExpressionKind ek, EXPRFLAG flags, Expr arg)
{
Debug.Assert(arg.Type.isPredefined());
return bindFloatOp(ek, flags, arg, null);
@@ -1714,7 +1709,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
*/
private Expr BindIncOp(ExpressionKind ek, EXPRFLAG flags, Expr arg, UnaOpFullSig uofs)
{
- Debug.Assert(ek == ExpressionKind.EK_ADD || ek == ExpressionKind.EK_SUB);
+ Debug.Assert(ek == ExpressionKind.Add || ek == ExpressionKind.Subtract);
if (!checkLvalue(arg, CheckLvalueKind.Increment))
{
Expr rval = GetExprFactory().CreateBinop(ek, arg.Type, arg, null);
@@ -1742,7 +1737,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
private Expr BindIncOpCore(ExpressionKind ek, EXPRFLAG flags, Expr exprVal, CType type)
{
- Debug.Assert(ek == ExpressionKind.EK_ADD || ek == ExpressionKind.EK_SUB);
+ Debug.Assert(ek == ExpressionKind.Add || ek == ExpressionKind.Subtract);
ConstVal cv;
Expr pExprResult = null;
@@ -1760,8 +1755,8 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
default:
{
Debug.Assert(type.isPredefType(PredefinedType.PT_DECIMAL));
- ek = ek == ExpressionKind.EK_ADD ? ExpressionKind.EK_DECIMALINC : ExpressionKind.EK_DECIMALDEC;
- PREDEFMETH predefMeth = ek == ExpressionKind.EK_DECIMALINC ? PREDEFMETH.PM_DECIMAL_OPINCREMENT : PREDEFMETH.PM_DECIMAL_OPDECREMENT;
+ ek = ek == ExpressionKind.Add ? ExpressionKind.DecimalInc : ExpressionKind.DecimalDec;
+ PREDEFMETH predefMeth = ek == ExpressionKind.DecimalInc ? PREDEFMETH.PM_DECIMAL_OPINCREMENT : PREDEFMETH.PM_DECIMAL_OPDECREMENT;
pExprResult = CreateUnaryOpForPredefMethodCall(ek, predefMeth, type, exprVal);
}
break;
@@ -1816,17 +1811,12 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
private ExprMulti BindNonliftedIncOp(ExpressionKind ek, EXPRFLAG flags, Expr arg, UnaOpFullSig uofs)
{
- Debug.Assert(ek == ExpressionKind.EK_ADD || ek == ExpressionKind.EK_SUB);
+ Debug.Assert(ek == ExpressionKind.Add || ek == ExpressionKind.Subtract);
Debug.Assert(!uofs.isLifted());
Debug.Assert(arg != null);
-#if ! CSEE
ExprMultiGet exprGet = GetExprFactory().CreateMultiGet(EXPRFLAG.EXF_ASSGOP, arg.Type, null);
Expr exprVal = exprGet;
-#else
- Expr exprVal = arg;
-#endif
-
CType type = uofs.GetType();
Debug.Assert(!type.IsNullableType());
@@ -1841,46 +1831,34 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
Expr op = mustCast(exprVal, arg.Type, CONVERTTYPE.NOUDC);
ExprMulti exprMulti = GetExprFactory().CreateMulti(EXPRFLAG.EXF_ASSGOP | flags, arg.Type, arg, op);
-
-#if ! CSEE
exprGet.OptionalMulti = exprMulti;
-#endif
return exprMulti;
}
private ExprMulti BindLiftedIncOp(ExpressionKind ek, EXPRFLAG flags, Expr arg, UnaOpFullSig uofs)
{
- Debug.Assert(ek == ExpressionKind.EK_ADD || ek == ExpressionKind.EK_SUB);
+ Debug.Assert(ek == ExpressionKind.Add || ek == ExpressionKind.Subtract);
Debug.Assert(uofs.isLifted());
NullableType type = uofs.GetType().AsNullableType();
Debug.Assert(arg != null);
-#if ! CSEE
ExprMultiGet exprGet = GetExprFactory().CreateMultiGet(EXPRFLAG.EXF_ASSGOP, arg.Type, null);
Expr exprVal = exprGet;
-#else
- Expr exprVal = arg;
-#endif
-
- Expr nonLiftedResult = null;
Expr nonLiftedArg = exprVal;
// We want to give the lifted argument as the binop, but use the non-lifted argument as the
// argument of the call.
//Debug.Assert(uofs.LiftArg() || type.IsValType());
nonLiftedArg = mustCast(nonLiftedArg, type.GetUnderlyingType());
- nonLiftedResult = BindIncOpCore(ek, flags, nonLiftedArg, type.GetUnderlyingType());
+ Expr nonLiftedResult = BindIncOpCore(ek, flags, nonLiftedArg, type.GetUnderlyingType());
exprVal = mustCast(exprVal, type);
- ExprUnaryOp exprRes = GetExprFactory().CreateUnaryOp((ek == ExpressionKind.EK_ADD) ? ExpressionKind.EK_INC : ExpressionKind.EK_DEC, arg.Type/* type */, exprVal);
+ ExprUnaryOp exprRes = GetExprFactory().CreateUnaryOp((ek == ExpressionKind.Add) ? ExpressionKind.Inc : ExpressionKind.Dec, arg.Type/* type */, exprVal);
mustCast(mustCast(nonLiftedResult, type), arg.Type);
exprRes.Flags |= flags;
ExprMulti exprMulti = GetExprFactory().CreateMulti(EXPRFLAG.EXF_ASSGOP | flags, arg.Type, arg, exprRes);
-
-#if ! CSEE
exprGet.OptionalMulti = exprMulti;
-#endif
return exprMulti;
}
@@ -1889,7 +1867,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
This function is called twice by the EE for every binary operator it evaluates
Here is how it works.
*/
- private Expr BindDecBinOp(ExpressionKind ek, EXPRFLAG flags, Expr arg1, Expr arg2)
+ private ExprBinOp BindDecBinOp(ExpressionKind ek, EXPRFLAG flags, Expr arg1, Expr arg2)
{
Debug.Assert(arg1.Type.isPredefType(PredefinedType.PT_DECIMAL) && arg2.Type.isPredefType(PredefinedType.PT_DECIMAL));
@@ -1904,32 +1882,23 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
VSFAIL("Bad kind");
typeRet = null;
break;
- case ExpressionKind.EK_ADD:
- case ExpressionKind.EK_SUB:
- case ExpressionKind.EK_MUL:
- case ExpressionKind.EK_DIV:
- case ExpressionKind.EK_MOD:
+ case ExpressionKind.Add:
+ case ExpressionKind.Subtract:
+ case ExpressionKind.Multiply:
+ case ExpressionKind.Divide:
+ case ExpressionKind.Modulo:
typeRet = typeDec;
break;
- case ExpressionKind.EK_LT:
- case ExpressionKind.EK_LE:
- case ExpressionKind.EK_GT:
- case ExpressionKind.EK_GE:
- case ExpressionKind.EK_EQ:
- case ExpressionKind.EK_NE:
+ case ExpressionKind.LessThan:
+ case ExpressionKind.LessThanOrEqual:
+ case ExpressionKind.GreaterThan:
+ case ExpressionKind.GreaterThanOrEqual:
+ case ExpressionKind.Eq:
+ case ExpressionKind.NotEq:
typeRet = GetReqPDT(PredefinedType.PT_BOOL);
break;
}
-#if CSEE
- // In the EE, we want to emit an EXPRBINOP with the
- // right EK so that when we evalsync we can just do the work ourselves instead of
- // delegating to method calls.
-
- return GetExprFactory().CreateBinop(tree, ek, typeRet, arg1, arg2);
-
-#endif // CSEE
-
return GetExprFactory().CreateBinop(ek, typeRet, arg1, arg2);
}
@@ -1937,20 +1906,20 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
/*
Handles standard unary decimal based operators.
*/
- private Expr BindDecUnaOp(ExpressionKind ek, EXPRFLAG flags, Expr arg)
+ private ExprUnaryOp BindDecUnaOp(ExpressionKind ek, EXPRFLAG flags, Expr arg)
{
Debug.Assert(arg.Type.isPredefType(PredefinedType.PT_DECIMAL));
- Debug.Assert(ek == ExpressionKind.EK_NEG || ek == ExpressionKind.EK_UPLUS);
+ Debug.Assert(ek == ExpressionKind.Negate || ek == ExpressionKind.UnaryPlus);
CType typeDec = GetOptPDT(PredefinedType.PT_DECIMAL);
Debug.Assert(typeDec != null);
- if (ek == ExpressionKind.EK_NEG)
+ if (ek == ExpressionKind.Negate)
{
PREDEFMETH predefMeth = PREDEFMETH.PM_DECIMAL_OPUNARYMINUS;
- return CreateUnaryOpForPredefMethodCall(ExpressionKind.EK_DECIMALNEG, predefMeth, typeDec, arg);
+ return CreateUnaryOpForPredefMethodCall(ExpressionKind.DecimalNegate, predefMeth, typeDec, arg);
}
- return GetExprFactory().CreateUnaryOp(ExpressionKind.EK_UPLUS, typeDec, arg);
+ return GetExprFactory().CreateUnaryOp(ExpressionKind.UnaryPlus, typeDec, arg);
}
@@ -1959,7 +1928,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
*/
private Expr BindStrBinOp(ExpressionKind ek, EXPRFLAG flags, Expr arg1, Expr arg2)
{
- Debug.Assert(ek == ExpressionKind.EK_ADD);
+ Debug.Assert(ek == ExpressionKind.Add);
Debug.Assert(arg1.Type.isPredefType(PredefinedType.PT_STRING) || arg2.Type.isPredefType(PredefinedType.PT_STRING));
return bindStringConcat(arg1, arg2);
}
@@ -1969,9 +1938,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
Bind a shift operator: <<, >>. These can have integer or long first operands,
and second operand must be int.
*/
- private Expr BindShiftOp(ExpressionKind ek, EXPRFLAG flags, Expr arg1, Expr arg2)
+ private ExprBinOp BindShiftOp(ExpressionKind ek, EXPRFLAG flags, Expr arg1, Expr arg2)
{
- Debug.Assert(ek == ExpressionKind.EK_LSHIFT || ek == ExpressionKind.EK_RSHIFT);
+ Debug.Assert(ek == ExpressionKind.LeftShirt || ek == ExpressionKind.RightShift);
Debug.Assert(arg1.Type.isPredefined());
Debug.Assert(arg2.Type.isPredefType(PredefinedType.PT_INT));
@@ -1985,21 +1954,19 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
Bind a bool binary operator: ==, !=, &&, ||, , |, ^. If both operands are constant, the
result will be a constant also.
*/
- private Expr BindBoolBinOp(ExpressionKind ek, EXPRFLAG flags, Expr arg1, Expr arg2)
+ private ExprBinOp BindBoolBinOp(ExpressionKind ek, EXPRFLAG flags, Expr arg1, Expr arg2)
{
Debug.Assert(arg1 != null);
Debug.Assert(arg2 != null);
Debug.Assert(arg1.Type.isPredefType(PredefinedType.PT_BOOL) || (arg1.Type.IsNullableType() && arg2.Type.AsNullableType().GetUnderlyingType().isPredefType(PredefinedType.PT_BOOL)));
Debug.Assert(arg2.Type.isPredefType(PredefinedType.PT_BOOL) || (arg2.Type.IsNullableType() && arg2.Type.AsNullableType().GetUnderlyingType().isPredefType(PredefinedType.PT_BOOL)));
- Expr exprRes = GetExprFactory().CreateBinop(ek, GetReqPDT(PredefinedType.PT_BOOL), arg1, arg2);
-
- return exprRes;
+ return GetExprFactory().CreateBinop(ek, GetReqPDT(PredefinedType.PT_BOOL), arg1, arg2);
}
- private Expr BindBoolBitwiseOp(ExpressionKind ek, EXPRFLAG flags, Expr expr1, Expr expr2, BinOpFullSig bofs)
+ private ExprOperator BindBoolBitwiseOp(ExpressionKind ek, EXPRFLAG flags, Expr expr1, Expr expr2, BinOpFullSig bofs)
{
- Debug.Assert(ek == ExpressionKind.EK_BITAND || ek == ExpressionKind.EK_BITOR);
+ Debug.Assert(ek == ExpressionKind.BitwiseAnd || ek == ExpressionKind.BitwiseOr);
Debug.Assert(expr1.Type.isPredefType(PredefinedType.PT_BOOL) || expr1.Type.IsNullableType() && expr1.Type.AsNullableType().GetUnderlyingType().isPredefType(PredefinedType.PT_BOOL));
Debug.Assert(expr2.Type.isPredefType(PredefinedType.PT_BOOL) || expr2.Type.IsNullableType() && expr2.Type.AsNullableType().GetUnderlyingType().isPredefType(PredefinedType.PT_BOOL));
@@ -2045,7 +2012,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
private Expr BindBoolUnaOp(ExpressionKind ek, EXPRFLAG flags, Expr arg)
{
Debug.Assert(arg.Type.isPredefType(PredefinedType.PT_BOOL));
- Debug.Assert(ek == ExpressionKind.EK_LOGNOT);
+ Debug.Assert(ek == ExpressionKind.LogicalNot);
// Get the result type and operand type.
CType typeBool = GetReqPDT(PredefinedType.PT_BOOL);
@@ -2056,7 +2023,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
Expr argConst = arg.GetConst();
if (argConst == null)
- return GetExprFactory().CreateUnaryOp(ExpressionKind.EK_LOGNOT, typeBool, arg);
+ return GetExprFactory().CreateUnaryOp(ExpressionKind.LogicalNot, typeBool, arg);
return GetExprFactory().CreateConstant(typeBool, ConstVal.Get(((ExprConstant)argConst).Val.Int32Val == 0));
}
@@ -2065,16 +2032,16 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
/*
Handles string equality.
*/
- private Expr BindStrCmpOp(ExpressionKind ek, EXPRFLAG flags, Expr arg1, Expr arg2)
+ private ExprBinOp BindStrCmpOp(ExpressionKind ek, EXPRFLAG flags, Expr arg1, Expr arg2)
{
- Debug.Assert(ek == ExpressionKind.EK_EQ || ek == ExpressionKind.EK_NE);
+ Debug.Assert(ek == ExpressionKind.Eq || ek == ExpressionKind.NotEq);
Debug.Assert(arg1.Type.isPredefType(PredefinedType.PT_STRING) && arg2.Type.isPredefType(PredefinedType.PT_STRING));
// Get the predefined method for string comparison, and then stash it in the Expr so we can
// transform it later.
- PREDEFMETH predefMeth = ek == ExpressionKind.EK_EQ ? PREDEFMETH.PM_STRING_OPEQUALITY : PREDEFMETH.PM_STRING_OPINEQUALITY;
- ek = ek == ExpressionKind.EK_EQ ? ExpressionKind.EK_STRINGEQ : ExpressionKind.EK_STRINGNE;
+ PREDEFMETH predefMeth = ek == ExpressionKind.Eq ? PREDEFMETH.PM_STRING_OPEQUALITY : PREDEFMETH.PM_STRING_OPINEQUALITY;
+ ek = ek == ExpressionKind.Eq ? ExpressionKind.StringEq : ExpressionKind.StringNotEq;
return CreateBinopForPredefMethodCall(ek, predefMeth, GetReqPDT(PredefinedType.PT_BOOL), arg1, arg2);
}
@@ -2082,9 +2049,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
/*
Handles reference equality operators. Type variables come through here.
*/
- private Expr BindRefCmpOp(ExpressionKind ek, EXPRFLAG flags, Expr arg1, Expr arg2)
+ private ExprBinOp BindRefCmpOp(ExpressionKind ek, EXPRFLAG flags, Expr arg1, Expr arg2)
{
- Debug.Assert(ek == ExpressionKind.EK_EQ || ek == ExpressionKind.EK_NE);
+ Debug.Assert(ek == ExpressionKind.Eq || ek == ExpressionKind.NotEq);
// Must box type variables for the verifier.
arg1 = mustConvert(arg1, GetReqPDT(PredefinedType.PT_OBJECT), CONVERTTYPE.NOUDC);
@@ -2099,35 +2066,35 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
*/
private Expr BindDelBinOp(ExpressionKind ek, EXPRFLAG flags, Expr arg1, Expr arg2)
{
- Debug.Assert(ek == ExpressionKind.EK_ADD || ek == ExpressionKind.EK_SUB || ek == ExpressionKind.EK_EQ || ek == ExpressionKind.EK_NE);
+ Debug.Assert(ek == ExpressionKind.Add || ek == ExpressionKind.Subtract || ek == ExpressionKind.Eq || ek == ExpressionKind.NotEq);
Debug.Assert(arg1.Type == arg2.Type && (arg1.Type.isDelegateType() || arg1.Type.isPredefType(PredefinedType.PT_DELEGATE)));
PREDEFMETH predefMeth = (PREDEFMETH)0;
CType RetType = null;
switch (ek)
{
- case ExpressionKind.EK_ADD:
+ case ExpressionKind.Add:
predefMeth = PREDEFMETH.PM_DELEGATE_COMBINE;
RetType = arg1.Type;
- ek = ExpressionKind.EK_DELEGATEADD;
+ ek = ExpressionKind.DelegateAdd;
break;
- case ExpressionKind.EK_SUB:
+ case ExpressionKind.Subtract:
predefMeth = PREDEFMETH.PM_DELEGATE_REMOVE;
RetType = arg1.Type;
- ek = ExpressionKind.EK_DELEGATESUB;
+ ek = ExpressionKind.DelegateSubtract;
break;
- case ExpressionKind.EK_EQ:
+ case ExpressionKind.Eq:
predefMeth = PREDEFMETH.PM_DELEGATE_OPEQUALITY;
RetType = GetReqPDT(PredefinedType.PT_BOOL);
- ek = ExpressionKind.EK_DELEGATEEQ;
+ ek = ExpressionKind.DelegateEq;
break;
- case ExpressionKind.EK_NE:
+ case ExpressionKind.NotEq:
predefMeth = PREDEFMETH.PM_DELEGATE_OPINEQUALITY;
RetType = GetReqPDT(PredefinedType.PT_BOOL);
- ek = ExpressionKind.EK_DELEGATENE;
+ ek = ExpressionKind.DelegateNotEq;
break;
}
return CreateBinopForPredefMethodCall(ek, predefMeth, RetType, arg1, arg2);
@@ -2184,7 +2151,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
private Expr BindLiftedEnumArithmeticBinOp(ExpressionKind ek, EXPRFLAG flags, Expr arg1, Expr arg2)
{
- Debug.Assert(ek == ExpressionKind.EK_ADD || ek == ExpressionKind.EK_SUB);
+ Debug.Assert(ek == ExpressionKind.Add || ek == ExpressionKind.Subtract);
CType nonNullableType1 = arg1.Type.IsNullableType() ? arg1.Type.AsNullableType().UnderlyingType : arg1.Type;
CType nonNullableType2 = arg2.Type.IsNullableType() ? arg2.Type.AsNullableType().UnderlyingType : arg2.Type;
if (nonNullableType1.IsNullType())
@@ -2246,7 +2213,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
*/
private Expr BindEnumUnaOp(ExpressionKind ek, EXPRFLAG flags, Expr arg)
{
- Debug.Assert(ek == ExpressionKind.EK_BITNOT);
+ Debug.Assert(ek == ExpressionKind.BitwiseNot);
Debug.Assert((ExprCast)arg != null);
Debug.Assert(((ExprCast)arg).Argument.Type.isEnumType());
@@ -2310,22 +2277,22 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
flags = 0;
switch (ek)
{
- case ExpressionKind.EK_ADD:
+ case ExpressionKind.Add:
if (Context.CheckedNormal)
{
flags |= EXPRFLAG.EXF_CHECKOVERFLOW;
}
pBinopKind = BinOpKind.Add;
break;
- case ExpressionKind.EK_SUB:
+ case ExpressionKind.Subtract:
if (Context.CheckedNormal)
{
flags |= EXPRFLAG.EXF_CHECKOVERFLOW;
}
pBinopKind = BinOpKind.Sub;
break;
- case ExpressionKind.EK_DIV:
- case ExpressionKind.EK_MOD:
+ case ExpressionKind.Divide:
+ case ExpressionKind.Modulo:
// EXPRKIND.EK_DIV and EXPRKIND.EK_MOD need to be treated special for hasSideEffects,
// hence the EXPRFLAG.EXF_ASSGOP. Yes, this is a hack.
flags |= EXPRFLAG.EXF_ASSGOP;
@@ -2335,36 +2302,36 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
}
pBinopKind = BinOpKind.Mul;
break;
- case ExpressionKind.EK_MUL:
+ case ExpressionKind.Multiply:
if (Context.CheckedNormal)
{
flags |= EXPRFLAG.EXF_CHECKOVERFLOW;
}
pBinopKind = BinOpKind.Mul;
break;
- case ExpressionKind.EK_BITAND:
- case ExpressionKind.EK_BITOR:
+ case ExpressionKind.BitwiseAnd:
+ case ExpressionKind.BitwiseOr:
pBinopKind = BinOpKind.Bitwise;
break;
- case ExpressionKind.EK_BITXOR:
+ case ExpressionKind.BitwiseExclusiveOr:
pBinopKind = BinOpKind.BitXor;
break;
- case ExpressionKind.EK_LSHIFT:
- case ExpressionKind.EK_RSHIFT:
+ case ExpressionKind.LeftShirt:
+ case ExpressionKind.RightShift:
pBinopKind = BinOpKind.Shift;
break;
- case ExpressionKind.EK_LOGOR:
- case ExpressionKind.EK_LOGAND:
+ case ExpressionKind.LogicalOr:
+ case ExpressionKind.LogicalAnd:
pBinopKind = BinOpKind.Logical;
break;
- case ExpressionKind.EK_LT:
- case ExpressionKind.EK_LE:
- case ExpressionKind.EK_GT:
- case ExpressionKind.EK_GE:
+ case ExpressionKind.LessThan:
+ case ExpressionKind.LessThanOrEqual:
+ case ExpressionKind.GreaterThan:
+ case ExpressionKind.GreaterThanOrEqual:
pBinopKind = BinOpKind.Compare;
break;
- case ExpressionKind.EK_EQ:
- case ExpressionKind.EK_NE:
+ case ExpressionKind.Eq:
+ case ExpressionKind.NotEq:
pBinopKind = BinOpKind.Equal;
break;
default:
@@ -2379,7 +2346,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
Convert an expression involving I4, U4, I8 or U8 operands. The operands are
assumed to be already converted to the correct types.
*/
- private Expr BindIntOp(ExpressionKind kind, EXPRFLAG flags, Expr op1, Expr op2, PredefinedType ptOp)
+ private ExprOperator BindIntOp(ExpressionKind kind, EXPRFLAG flags, Expr op1, Expr op2, PredefinedType ptOp)
{
//Debug.Assert(kind.isRelational() || kind.isArithmetic() || kind.isBitwise());
Debug.Assert(ptOp == PredefinedType.PT_INT || ptOp == PredefinedType.PT_UINT || ptOp == PredefinedType.PT_LONG || ptOp == PredefinedType.PT_ULONG);
@@ -2387,22 +2354,22 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
Debug.Assert(typeOp != null);
Debug.Assert(op1 != null && op1.Type == typeOp);
Debug.Assert(op2 == null || op2.Type == typeOp);
- Debug.Assert((op2 == null) == (kind == ExpressionKind.EK_NEG || kind == ExpressionKind.EK_UPLUS || kind == ExpressionKind.EK_BITNOT));
+ Debug.Assert((op2 == null) == (kind == ExpressionKind.Negate || kind == ExpressionKind.UnaryPlus || kind == ExpressionKind.BitwiseNot));
- if (kind == ExpressionKind.EK_NEG)
+ if (kind == ExpressionKind.Negate)
{
return BindIntegerNeg(flags, op1, ptOp);
}
- CType typeDest = kind.isRelational() ? GetReqPDT(PredefinedType.PT_BOOL) : typeOp;
+ CType typeDest = kind.IsRelational() ? GetReqPDT(PredefinedType.PT_BOOL) : typeOp;
- Expr exprRes = GetExprFactory().CreateOperator(kind, typeDest, op1, op2);
+ ExprOperator exprRes = GetExprFactory().CreateOperator(kind, typeDest, op1, op2);
exprRes.Flags |= flags;
Debug.Assert((exprRes.Flags & EXPRFLAG.EXF_LVALUE) == 0);
return exprRes;
}
- private Expr BindIntegerNeg(EXPRFLAG flags, Expr op, PredefinedType ptOp)
+ private ExprOperator BindIntegerNeg(EXPRFLAG flags, Expr op, PredefinedType ptOp)
{
// 14.6.2 Unary minus operator
// For an operation of the form -x, unary operator overload resolution (14.2.3) is applied to select
@@ -2441,7 +2408,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
if (ptOp == PredefinedType.PT_ULONG)
{
- return BadOperatorTypesError(ExpressionKind.EK_NEG, op, null);
+ return BadOperatorTypesError(ExpressionKind.Negate, op, null);
}
if (ptOp == PredefinedType.PT_UINT && op.Type.fundType() == FUNDTYPE.FT_U4)
@@ -2450,7 +2417,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
op = mustConvertCore(op, exprObj, CONVERTTYPE.NOUDC);
}
- Expr exprRes = GetExprFactory().CreateNeg(flags, op);
+ ExprOperator exprRes = GetExprFactory().CreateNeg(flags, op);
Debug.Assert(0 == (exprRes.Flags & EXPRFLAG.EXF_LVALUE));
return exprRes;
}
@@ -2460,23 +2427,23 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
will be a constant also. op2 can be null for a unary operator. The operands are assumed
to be already converted to the correct type.
*/
- private Expr bindFloatOp(ExpressionKind kind, EXPRFLAG flags, Expr op1, Expr op2)
+ private ExprOperator bindFloatOp(ExpressionKind kind, EXPRFLAG flags, Expr op1, Expr op2)
{
//Debug.Assert(kind.isRelational() || kind.isArithmetic());
Debug.Assert(op2 == null || op1.Type == op2.Type);
Debug.Assert(op1.Type.isPredefType(PredefinedType.PT_FLOAT) || op1.Type.isPredefType(PredefinedType.PT_DOUBLE));
// Allocate the result expression.
- CType typeDest = kind.isRelational() ? GetReqPDT(PredefinedType.PT_BOOL) : op1.Type;
+ CType typeDest = kind.IsRelational() ? GetReqPDT(PredefinedType.PT_BOOL) : op1.Type;
- Expr exprRes = GetExprFactory().CreateOperator(kind, typeDest, op1, op2);
+ ExprOperator exprRes = GetExprFactory().CreateOperator(kind, typeDest, op1, op2);
flags = ~EXPRFLAG.EXF_CHECKOVERFLOW;
exprRes.Flags |= flags;
return exprRes;
}
- private Expr bindStringConcat(Expr op1, Expr op2)
+ private ExprConcat bindStringConcat(Expr op1, Expr op2)
{
// If the concatenation consists solely of two constants then we must
// realize the concatenation into a single constant node at this time.
@@ -2502,7 +2469,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
/*
Report an ambiguous operator types error.
*/
- private Expr ambiguousOperatorError(ExpressionKind ek, Expr op1, Expr op2)
+ private ExprOperator ambiguousOperatorError(ExpressionKind ek, Expr op1, Expr op2)
{
RETAILVERIFY(op1 != null);
@@ -2520,7 +2487,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
GetErrorContext().Error(ErrorCode.ERR_AmbigUnaryOp, strOp, op1.Type);
}
- Expr rval = GetExprFactory().CreateOperator(ek, null, op1, op2);
+ ExprOperator rval = GetExprFactory().CreateOperator(ek, null, op1, op2);
rval.SetError();
return rval;
}
@@ -2530,7 +2497,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
RETAILVERIFY(pCall != null);
RETAILVERIFY(pCall.MethWithInst.Meth() != null);
RETAILVERIFY(pCall.OptionalArguments != null);
- Debug.Assert(kind == ExpressionKind.EK_LOGAND || kind == ExpressionKind.EK_LOGOR);
+ Debug.Assert(kind == ExpressionKind.LogicalAnd || kind == ExpressionKind.LogicalOr);
CType typeRet = pCall.Type;
@@ -2557,8 +2524,8 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
SymbolLoader.RuntimeBinderSymbolTable.PopulateSymbolTableWithName(SpecialNames.CLR_True, null, pExprWrap.Type.AssociatedSystemType);
SymbolLoader.RuntimeBinderSymbolTable.PopulateSymbolTableWithName(SpecialNames.CLR_False, null, pExprWrap.Type.AssociatedSystemType);
- Expr pCallT = bindUDUnop(ExpressionKind.EK_TRUE, pExprWrap);
- Expr pCallF = bindUDUnop(ExpressionKind.EK_FALSE, pExprWrap);
+ Expr pCallT = bindUDUnop(ExpressionKind.True, pExprWrap);
+ Expr pCallF = bindUDUnop(ExpressionKind.False, pExprWrap);
if (pCallT == null || pCallF == null)
{
@@ -2575,7 +2542,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
}
pCallT = mustConvert(pCallT, GetReqPDT(PredefinedType.PT_BOOL));
pCallF = mustConvert(pCallF, GetReqPDT(PredefinedType.PT_BOOL));
- return GetExprFactory().CreateUserLogOp(typeRet, kind == ExpressionKind.EK_LOGAND ? pCallF : pCallT, pCall);
+ return GetExprFactory().CreateUserLogOp(typeRet, kind == ExpressionKind.LogicalAnd ? pCallF : pCallT, pCall);
}
private AggregateType GetUserDefinedBinopArgumentType(CType type)
@@ -2641,8 +2608,8 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
}
switch (ek)
{
- case ExpressionKind.EK_EQ:
- case ExpressionKind.EK_NE:
+ case ExpressionKind.Eq:
+ case ExpressionKind.NotEq:
if (!typeRet.isPredefType(PredefinedType.PT_BOOL))
{
return false;
@@ -2652,10 +2619,10 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
return false;
}
return true;
- case ExpressionKind.EK_GT:
- case ExpressionKind.EK_GE:
- case ExpressionKind.EK_LT:
- case ExpressionKind.EK_LE:
+ case ExpressionKind.GreaterThan:
+ case ExpressionKind.GreaterThanOrEqual:
+ case ExpressionKind.LessThan:
+ case ExpressionKind.LessThanOrEqual:
if (!typeRet.isPredefType(PredefinedType.PT_BOOL))
{
return false;
@@ -2867,17 +2834,17 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
default:
typeRet = GetTypes().GetNullable(typeRetRaw);
break;
- case ExpressionKind.EK_EQ:
- case ExpressionKind.EK_NE:
+ case ExpressionKind.Eq:
+ case ExpressionKind.NotEq:
Debug.Assert(paramsRaw[0] == paramsRaw[1]);
Debug.Assert(typeRetRaw.isPredefType(PredefinedType.PT_BOOL));
// These ones don't lift the return type. Instead, if either side is null, the result is false.
typeRet = typeRetRaw;
break;
- case ExpressionKind.EK_GT:
- case ExpressionKind.EK_GE:
- case ExpressionKind.EK_LT:
- case ExpressionKind.EK_LE:
+ case ExpressionKind.GreaterThan:
+ case ExpressionKind.GreaterThanOrEqual:
+ case ExpressionKind.LessThan:
+ case ExpressionKind.LessThanOrEqual:
Debug.Assert(typeRetRaw.isPredefType(PredefinedType.PT_BOOL));
// These ones don't lift the return type. Instead, if either side is null, the result is false.
typeRet = typeRetRaw;
@@ -2886,7 +2853,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
// Now get the result for the pre-lifted call.
- Debug.Assert(!(ek == ExpressionKind.EK_EQ || ek == ExpressionKind.EK_NE) || nonLiftedArg1.Type == nonLiftedArg2.Type);
+ Debug.Assert(!(ek == ExpressionKind.Eq || ek == ExpressionKind.NotEq) || nonLiftedArg1.Type == nonLiftedArg2.Type);
ExprCall nonLiftedResult = BindUDBinopCall(nonLiftedArg1, nonLiftedArg2, paramsRaw, typeRetRaw, mpwi);
@@ -2897,11 +2864,11 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
switch (ek)
{
- case ExpressionKind.EK_EQ:
+ case ExpressionKind.Eq:
call.NullableCallLiftKind = NullableCallLiftKind.EqualityOperator;
break;
- case ExpressionKind.EK_NE:
+ case ExpressionKind.NotEq:
call.NullableCallLiftKind = NullableCallLiftKind.InequalityOperator;
break;
@@ -2930,23 +2897,23 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
switch (ek)
{
- case ExpressionKind.EK_BITAND:
- case ExpressionKind.EK_BITOR:
- case ExpressionKind.EK_BITXOR:
+ case ExpressionKind.BitwiseAnd:
+ case ExpressionKind.BitwiseOr:
+ case ExpressionKind.BitwiseExclusiveOr:
Debug.Assert(type1 == type2);
break;
- case ExpressionKind.EK_ADD:
+ case ExpressionKind.Add:
Debug.Assert(type1 != type2);
break;
- case ExpressionKind.EK_SUB:
+ case ExpressionKind.Subtract:
if (type1 == type2)
typeDst = typeEnum.underlyingEnumType();
break;
default:
- Debug.Assert(ek.isRelational());
+ Debug.Assert(ek.IsRelational());
typeDst = GetReqPDT(PredefinedType.PT_BOOL);
break;
}
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/PredefinedMembers.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/PredefinedMembers.cs
index 8e103b8ca3..8a1441914b 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/PredefinedMembers.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/PredefinedMembers.cs
@@ -444,7 +444,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
return null;
}
- return GetTypeManager().GetArray(elementType, 1);
+ return GetTypeManager().GetArray(elementType, 1, true);
}
case MethodSignatureEnum.SIG_METH_TYVAR:
{
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/AssemblyQualifiedNamespaceSymbol.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/AssemblyQualifiedNamespaceSymbol.cs
index 947f844d86..0f8c3e4d54 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/AssemblyQualifiedNamespaceSymbol.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/AssemblyQualifiedNamespaceSymbol.cs
@@ -12,26 +12,8 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
// The name is a form of the aid.
// ----------------------------------------------------------------------------
- internal sealed class AssemblyQualifiedNamespaceSymbol : ParentSymbol, ITypeOrNamespace
+ internal sealed class AssemblyQualifiedNamespaceSymbol : ParentSymbol
{
- // ----------------------------------------------------------------------------
- // AssemblyQualifiedNamespaceSymbol
- // ----------------------------------------------------------------------------
-
- public bool IsType => false;
-
- public bool IsNamespace => true;
-
- public AssemblyQualifiedNamespaceSymbol AsNamespace()
- {
- return this;
- }
-
- public CType AsType()
- {
- return null;
- }
-
public NamespaceSymbol GetNS()
{
return parent.AsNamespaceSymbol();
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/Symbol.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/Symbol.cs
index 3438899b5d..ea52b038c9 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/Symbol.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/Symbol.cs
@@ -18,7 +18,6 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
kaidNil = -1,
kaidGlobal = 0,
- kaidErrorAssem, // NOTE: !CSEE only
kaidThisAssembly,
kaidUnresolved,
kaidStartAssigning,
@@ -395,7 +394,6 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
case SYMKIND.SK_AggregateSymbol:
{
-#if !CSEE
AggregateSymbol AggregateSymbol = this.AsAggregateSymbol();
if (!AggregateSymbol.IsSource())
return AggregateSymbol.DeclOnly().getInputFile();
@@ -404,7 +402,6 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
// files, getInputFile isn't a reasonable operation.
Debug.Assert(false);
return null;
-#endif
}
/*
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/SymbolLoader.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/SymbolLoader.cs
index df2a4c9ae9..6c3c7d6fbe 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/SymbolLoader.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Symbols/SymbolLoader.cs
@@ -276,7 +276,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
// * S and T differ only in element type. In other words, S and T have the same number of dimensions.
// * Both SE and TE are reference types.
// * An implicit reference conversion exists from SE to TE.
- return (pSource.rank == pDest.rank) &&
+ return (pSource.rank == pDest.rank) && pSource.IsSZArray == pDest.IsSZArray &&
HasImplicitReferenceConversion(pSource.GetElementType(), pDest.GetElementType());
}
@@ -301,7 +301,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
Debug.Assert(pSource != null);
Debug.Assert(pDest != null);
- if (pSource.rank != 1)
+ if (!pSource.IsSZArray)
{
return false;
}
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ArrayIndex.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ArrayIndex.cs
index fb5df2b9d9..8db2d0d667 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ArrayIndex.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ArrayIndex.cs
@@ -4,8 +4,13 @@
namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
- internal sealed class ExprArrayIndex : Expr
+ internal sealed class ExprArrayIndex : ExprWithType
{
+ public ExprArrayIndex(CType type)
+ : base(ExpressionKind.ArrayIndex, type)
+ {
+ }
+
public Expr Array { get; set; }
public Expr Index { get; set; }
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ArrayInitialization.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ArrayInitialization.cs
index fa32908b73..c059c57f5e 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ArrayInitialization.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ArrayInitialization.cs
@@ -4,8 +4,13 @@
namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
- internal sealed class ExprArrayInit : Expr
+ internal sealed class ExprArrayInit : ExprWithType
{
+ public ExprArrayInit(CType type)
+ : base(ExpressionKind.ArrayInit, type)
+ {
+ }
+
public Expr OptionalArguments { get; set; }
public Expr OptionalArgumentDimensions { get; set; }
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ArrayLength.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ArrayLength.cs
index 76f5ac1b46..3014a02fb3 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ArrayLength.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ArrayLength.cs
@@ -4,8 +4,13 @@
namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
- internal sealed class ExprArrayLength : Expr
+ internal sealed class ExprArrayLength : ExprWithType
{
+ public ExprArrayLength(CType type)
+ : base(ExpressionKind.ArrayLength, type)
+ {
+ }
+
public Expr Array { get; set; }
}
}
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Assignment.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Assignment.cs
index fa983d9e0f..6337aaaf19 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Assignment.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Assignment.cs
@@ -6,8 +6,15 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
internal sealed class ExprAssignment : Expr
{
+ public ExprAssignment()
+ : base(ExpressionKind.Assignment)
+ {
+ }
+
public Expr LHS { get; set; }
public Expr RHS { get; set; }
+
+ public override CType Type => LHS.Type;
}
}
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/BinaryOperator.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/BinaryOperator.cs
index c8a8743a78..0f67f9b54f 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/BinaryOperator.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/BinaryOperator.cs
@@ -2,22 +2,24 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
+using System.Diagnostics;
+
namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
- internal sealed class ExprBinOp : Expr
+ internal sealed class ExprBinOp : ExprOperator
{
+ public ExprBinOp(ExpressionKind kind, CType type)
+ : base(kind, type)
+ {
+ Debug.Assert(kind > ExpressionKind.TypeLimit);
+ }
+
public Expr OptionalLeftChild { get; set; }
public Expr OptionalRightChild { get; set; }
- public Expr OptionalUserDefinedCall { get; set; }
-
- public MethWithInst PredefinedMethodToCall { get; set; }
-
public bool IsLifted { get; set; }
- public MethPropWithInst UserDefinedCallMethod { get; set; }
-
public void SetAssignment()
{
Flags |= EXPRFLAG.EXF_ASSGOP;
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Block.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Block.cs
index d75122133a..e365765a8c 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Block.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Block.cs
@@ -6,6 +6,11 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
internal sealed class ExprBlock : ExprStatement
{
+ public ExprBlock()
+ : base(ExpressionKind.Block)
+ {
+ }
+
public ExprStatement OptionalStatements { get; set; }
public Scope OptionalScopeSymbol { get; set; }
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/BoundAnonymousFunction.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/BoundAnonymousFunction.cs
index 7f009b74f1..2f12c3362e 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/BoundAnonymousFunction.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/BoundAnonymousFunction.cs
@@ -6,10 +6,16 @@ using System.Diagnostics;
namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
- internal sealed class ExprBoundLambda : Expr
+ internal sealed class ExprBoundLambda : ExprWithType
{
private Scope _argumentScope;
+ public ExprBoundLambda(CType type)
+ : base(ExpressionKind.BoundLambda, type)
+ {
+ Debug.Assert(type == null || type.isDelegateType());
+ }
+
public ExprBlock OptionalBody { get; set; }
public AggregateType DelegateType => Type as AggregateType;
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Call.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Call.cs
index 4a2f14ef66..e8cba5393c 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Call.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Call.cs
@@ -4,8 +4,13 @@
namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
- internal sealed class ExprCall : Expr, IExprWithArgs
+ internal sealed class ExprCall : ExprWithType, IExprWithArgs
{
+ public ExprCall(CType type)
+ : base(ExpressionKind.Call, type)
+ {
+ }
+
public Expr OptionalArguments { get; set; }
public ExprMemberGroup MemberGroup { get; set; }
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Cast.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Cast.cs
index 4e826e2a76..26f5793cd7 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Cast.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Cast.cs
@@ -6,9 +6,16 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
internal sealed class ExprCast : Expr
{
+ public ExprCast()
+ : base(ExpressionKind.Cast)
+ {
+ }
+
public Expr Argument { get; set; }
- public ExprTypeOrNamespace DestinationType { get; set; }
+ public ExprClass DestinationType { get; set; }
+
+ public override CType Type => DestinationType.Type;
public bool IsBoxingCast => (Flags & (EXPRFLAG.EXF_BOX | EXPRFLAG.EXF_FORCE_BOX)) != 0;
}
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Class.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Class.cs
index df43ecba77..bd4dfbe463 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Class.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Class.cs
@@ -4,7 +4,11 @@
namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
- internal sealed class ExprClass : ExprTypeOrNamespace
+ internal sealed class ExprClass : ExprWithType
{
+ public ExprClass(CType type)
+ : base(ExpressionKind.Class, type)
+ {
+ }
}
}
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/CompoundOperator.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/CompoundOperator.cs
index 74afe7c2ce..6139ce67ee 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/CompoundOperator.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/CompoundOperator.cs
@@ -4,13 +4,23 @@
namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
- internal sealed class ExprMultiGet : Expr
+ internal sealed class ExprMultiGet : ExprWithType
{
+ public ExprMultiGet(CType type)
+ : base(ExpressionKind.MultiGet, type)
+ {
+ }
+
public ExprMulti OptionalMulti { get; set; }
}
- internal sealed class ExprMulti : Expr
+ internal sealed class ExprMulti : ExprWithType
{
+ public ExprMulti(CType type)
+ : base(ExpressionKind.Multi, type)
+ {
+ }
+
public Expr Left { get; set; }
public Expr Operator { get; set; }
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Concatenate.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Concatenate.cs
index 19ea51aea3..d7c6c47561 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Concatenate.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Concatenate.cs
@@ -4,8 +4,13 @@
namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
- internal sealed class ExprConcat : Expr
+ internal sealed class ExprConcat : ExprWithType
{
+ public ExprConcat(CType type)
+ : base(ExpressionKind.Concat ,type)
+ {
+ }
+
public Expr FirstArgument { get; set; }
public Expr SecondArgument { get; set; }
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ConditionalOperator.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ConditionalOperator.cs
index 8e3aa26c1d..e8d2e62380 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ConditionalOperator.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ConditionalOperator.cs
@@ -6,8 +6,15 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
internal sealed class ExprQuestionMark : Expr
{
+ public ExprQuestionMark()
+ : base(ExpressionKind.QuestionMark)
+ {
+ }
+
public Expr TestExpression { get; set; }
public ExprBinOp Consequence { get; set; }
+
+ public override CType Type => Consequence.Type ?? Consequence.OptionalLeftChild.Type;
}
}
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Constant.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Constant.cs
index e5bb51479f..bb8a77cfd8 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Constant.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Constant.cs
@@ -6,8 +6,13 @@ using System.Diagnostics;
namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
- internal sealed class ExprConstant : Expr
+ internal sealed class ExprConstant : ExprWithType
{
+ public ExprConstant(CType type)
+ : base(ExpressionKind.Constant, type)
+ {
+ }
+
public Expr OptionalConstructorCall { get; set; }
public bool IsZero => Val.IsZero(Type.constValKind());
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/EXPR.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/EXPR.cs
index 1e81bed08e..04e233b4eb 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/EXPR.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/EXPR.cs
@@ -6,11 +6,16 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
internal abstract class Expr
{
+ protected Expr(ExpressionKind kind)
+ {
+ Kind = kind;
+ }
+
internal object RuntimeObject { get; set; }
internal CType RuntimeObjectActualType { get; set; }
- public ExpressionKind Kind { get; set; }
+ public ExpressionKind Kind { get; }
public EXPRFLAG Flags { get; set; }
@@ -23,7 +28,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
public string ErrorString { get; set; }
- public CType Type { get; set; }
+ public virtual CType Type => null;
public bool IsOK => !HasError;
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Event.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Event.cs
index 37ea6b7060..fcaef69fe3 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Event.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Event.cs
@@ -4,8 +4,13 @@
namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
- internal sealed class ExprEvent : Expr, IExprWithObject
+ internal sealed class ExprEvent : ExprWithType, IExprWithObject
{
+ public ExprEvent(CType type)
+ : base(ExpressionKind.Event, type)
+ {
+ }
+
public Expr OptionalObject { get; set; }
public EventWithType EventWithType { get; set; }
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ExprOperator.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ExprOperator.cs
new file mode 100644
index 0000000000..81ea8e9aef
--- /dev/null
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ExprOperator.cs
@@ -0,0 +1,23 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Diagnostics;
+
+namespace Microsoft.CSharp.RuntimeBinder.Semantics
+{
+ internal abstract class ExprOperator : ExprWithType
+ {
+ protected ExprOperator(ExpressionKind kind, CType type)
+ : base(kind, type)
+ {
+ Debug.Assert(kind.IsUnaryOperator() || kind > ExpressionKind.TypeLimit);
+ }
+
+ public Expr OptionalUserDefinedCall { get; set; }
+
+ public MethWithInst PredefinedMethodToCall { get; set; }
+
+ public MethPropWithInst UserDefinedCallMethod { get; set; }
+ }
+} \ No newline at end of file
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ExprWithType.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ExprWithType.cs
new file mode 100644
index 0000000000..554386c724
--- /dev/null
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ExprWithType.cs
@@ -0,0 +1,17 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+namespace Microsoft.CSharp.RuntimeBinder.Semantics
+{
+ internal abstract class ExprWithType : Expr
+ {
+ protected ExprWithType(ExpressionKind kind, CType type)
+ : base(kind)
+ {
+ Type = type;
+ }
+
+ public override CType Type { get; }
+ }
+} \ No newline at end of file
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Field.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Field.cs
index e7a3534341..6f26f2f9d1 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Field.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Field.cs
@@ -4,8 +4,13 @@
namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
- internal sealed class ExprField : Expr, IExprWithObject
+ internal sealed class ExprField : ExprWithType, IExprWithObject
{
+ public ExprField(CType type)
+ : base(ExpressionKind.Field, type)
+ {
+ }
+
public Expr OptionalObject { get; set; }
public FieldWithType FieldWithType { get; set; }
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/FieldInfo.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/FieldInfo.cs
index 1e5f5c6284..bc155b8992 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/FieldInfo.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/FieldInfo.cs
@@ -4,9 +4,10 @@
namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
- internal sealed class ExprFieldInfo : Expr
+ internal sealed class ExprFieldInfo : ExprWithType
{
- public ExprFieldInfo(FieldSymbol f, AggregateType ft)
+ public ExprFieldInfo(FieldSymbol f, AggregateType ft, CType type)
+ : base(ExpressionKind.FieldInfo, type)
{
Field = f;
FieldType = ft;
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/HoistedLocal.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/HoistedLocal.cs
index e8556f379b..d74b8b3f92 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/HoistedLocal.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/HoistedLocal.cs
@@ -4,7 +4,11 @@
namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
- internal sealed class ExprHoistedLocalExpr : Expr
+ internal sealed class ExprHoistedLocalExpr : ExprWithType
{
+ public ExprHoistedLocalExpr(CType type)
+ : base(ExpressionKind.HoistedLocalExpression, type)
+ {
+ }
}
}
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/List.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/List.cs
index 507fc56ab6..6d0c01d496 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/List.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/List.cs
@@ -6,6 +6,11 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
internal sealed class ExprList : Expr
{
+ public ExprList()
+ : base(ExpressionKind.List)
+ {
+ }
+
public Expr OptionalElement { get; set; }
public Expr OptionalNextListNode { get; set; }
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/LocalVariable.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/LocalVariable.cs
index ed0bf1f4b8..64b65d8d60 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/LocalVariable.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/LocalVariable.cs
@@ -2,10 +2,25 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
+using System.Diagnostics;
+
namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
internal class ExprLocal : Expr
{
+ public ExprLocal()
+ : base(ExpressionKind.Local)
+ {
+ }
+
+ protected ExprLocal(ExpressionKind kind)
+ : base(kind)
+ {
+ Debug.Assert(kind == ExpressionKind.ThisPointer);
+ }
+
public LocalVariableSymbol Local { get; set; }
+
+ public override CType Type => Local?.GetType();
}
}
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/MemberGroup.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/MemberGroup.cs
index f1fb9f2d05..eb5683f264 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/MemberGroup.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/MemberGroup.cs
@@ -6,8 +6,13 @@ using Microsoft.CSharp.RuntimeBinder.Syntax;
namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
- internal sealed class ExprMemberGroup : Expr, IExprWithObject
+ internal sealed class ExprMemberGroup : ExprWithType, IExprWithObject
{
+ public ExprMemberGroup(CType type)
+ : base(ExpressionKind.MemberGroup, type)
+ {
+ }
+
public Name Name { get; set; }
public TypeArray TypeArgs { get; set; }
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/MethodInfo.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/MethodInfo.cs
index 97e628b668..87c4f0e703 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/MethodInfo.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/MethodInfo.cs
@@ -4,8 +4,13 @@
namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
- internal sealed class ExprMethodInfo : Expr
+ internal sealed class ExprMethodInfo : ExprWithType
{
- public MethWithInst Method;
+ public ExprMethodInfo(CType type)
+ : base(ExpressionKind.MethodInfo, type)
+ {
+ }
+
+ public MethWithInst Method { get; set; }
}
}
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/MethodReference.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/MethodReference.cs
index 2591d52c72..809aab8525 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/MethodReference.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/MethodReference.cs
@@ -4,8 +4,13 @@
namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
- internal sealed class ExprFuncPtr : Expr, IExprWithObject
+ internal sealed class ExprFuncPtr : ExprWithType, IExprWithObject
{
+ public ExprFuncPtr(CType type)
+ : base(ExpressionKind.FunctionPointer, type)
+ {
+ }
+
public MethWithInst MethWithInst { get; set; }
public Expr OptionalObject { get; set; }
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/NamedArgumentSpecification.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/NamedArgumentSpecification.cs
index 84f699b339..72a381fbe8 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/NamedArgumentSpecification.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/NamedArgumentSpecification.cs
@@ -8,8 +8,15 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
internal sealed class ExprNamedArgumentSpecification : Expr
{
+ public ExprNamedArgumentSpecification()
+ : base(ExpressionKind.NamedArgumentSpecification)
+ {
+ }
+
public Name Name { get; set; }
public Expr Value { get; set; }
+
+ public override CType Type => Value.Type;
}
}
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Property.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Property.cs
index 13ef87c251..d68f4da578 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Property.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Property.cs
@@ -4,7 +4,7 @@
namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
- internal sealed class ExprProperty : Expr, IExprWithArgs
+ internal sealed class ExprProperty : ExprWithType, IExprWithArgs
{
// If we have this.prop = 123, but the implementation of the property is in the
// base class, then the object is of the base class type. Note that to get
@@ -14,6 +14,11 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
// of the type we are actually calling through. (We need to know the
// "through" type to ensure that protected semantics are correctly enforced.)
+ public ExprProperty(CType type)
+ : base(ExpressionKind.Property, type)
+ {
+ }
+
public Expr OptionalArguments { get; set; }
public ExprMemberGroup MemberGroup { get; set; }
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/PropertyInfo.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/PropertyInfo.cs
index f7fddd3ac1..c0bf56cec4 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/PropertyInfo.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/PropertyInfo.cs
@@ -4,8 +4,13 @@
namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
- internal sealed class ExprPropertyInfo : Expr
+ internal sealed class ExprPropertyInfo : ExprWithType
{
+ public ExprPropertyInfo(CType type)
+ : base(ExpressionKind.PropertyInfo, type)
+ {
+ }
+
public PropWithType Property { get; set; }
}
}
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Return.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Return.cs
index 064c2c416b..3fbcf25bb2 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Return.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Return.cs
@@ -6,6 +6,11 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
internal sealed class ExprReturn : ExprStatement, IExprWithObject
{
+ public ExprReturn()
+ : base(ExpressionKind.Return)
+ {
+ }
+
// Return object is optional because of void returns.
public Expr OptionalObject { get; set; }
}
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Statement.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Statement.cs
index 2ea0893d5b..c007a01641 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Statement.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Statement.cs
@@ -6,6 +6,11 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
internal abstract class ExprStatement : Expr
{
+ public ExprStatement(ExpressionKind kind)
+ : base(kind)
+ {
+ }
+
public ExprStatement OptionalNextStatement { get; set; }
}
}
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Temporary.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Temporary.cs
index a285a82455..b6f411810e 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Temporary.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Temporary.cs
@@ -6,6 +6,12 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
internal sealed class ExprWrap : Expr
{
+ public ExprWrap()
+ : base(ExpressionKind.Wrap)
+ {
+ }
public Expr OptionalExpression { get; set; }
+
+ public override CType Type => OptionalExpression?.Type;
}
}
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/This.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/This.cs
index 12d97c3e1d..8718c3da76 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/This.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/This.cs
@@ -6,5 +6,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
internal sealed class ExprThisPointer : ExprLocal
{
+ public ExprThisPointer()
+ : base(ExpressionKind.ThisPointer)
+ {
+ }
}
}
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/TypeArguments.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/TypeArguments.cs
index f582a693b7..617aa2e798 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/TypeArguments.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/TypeArguments.cs
@@ -12,5 +12,10 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
internal sealed class ExprTypeArguments : Expr
{
public Expr OptionalElements { get; set; }
+
+ public ExprTypeArguments()
+ : base(ExpressionKind.TypeArguments)
+ {
+ }
}
}
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/TypeOf.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/TypeOf.cs
index 6f9c8bf309..c6a4f5172b 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/TypeOf.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/TypeOf.cs
@@ -4,8 +4,13 @@
namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
- internal sealed class ExprTypeOf : Expr
+ internal sealed class ExprTypeOf : ExprWithType
{
- public ExprTypeOrNamespace SourceType { get; set; }
+ public ExprTypeOf(CType type)
+ : base(ExpressionKind.TypeOf, type)
+ {
+ }
+
+ public ExprClass SourceType { get; set; }
}
}
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/TypeOrNamespace.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/TypeOrNamespace.cs
deleted file mode 100644
index 4de57332ff..0000000000
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/TypeOrNamespace.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace Microsoft.CSharp.RuntimeBinder.Semantics
-{
- /*************************************************************************************************
- This is the base class for this set of Exprs. When binding a type, the result
- must be a type or a namespace. This Expr encapsulates that fact. The lhs member is the Expr
- tree that was bound to resolve the type or namespace.
- *************************************************************************************************/
- internal abstract class ExprTypeOrNamespace : Expr
- {
- public ITypeOrNamespace TypeOrNamespace;
- }
-}
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/UnaryOperator.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/UnaryOperator.cs
index 52648af259..45d955f9fa 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/UnaryOperator.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/UnaryOperator.cs
@@ -2,16 +2,18 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
+using System.Diagnostics;
+
namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
- internal sealed class ExprUnaryOp : Expr
+ internal sealed class ExprUnaryOp : ExprOperator
{
- public Expr Child { get; set; }
-
- public ExprCall OptionalUserDefinedCall { get; set; }
+ public ExprUnaryOp(ExpressionKind kind, CType type)
+ : base(kind, type)
+ {
+ Debug.Assert(kind.IsUnaryOperator());
+ }
- public MethWithInst PredefinedMethodToCall { get; set; }
-
- public MethPropWithInst UserDefinedCallMethod { get; set; }
+ public Expr Child { get; set; }
}
}
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/UnboundAnonymousFunction.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/UnboundAnonymousFunction.cs
index b68b36aa1f..5011b6aec2 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/UnboundAnonymousFunction.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/UnboundAnonymousFunction.cs
@@ -4,7 +4,11 @@
namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
- internal sealed class ExprUnboundLambda : Expr
+ internal sealed class ExprUnboundLambda : ExprWithType
{
+ public ExprUnboundLambda(CType type)
+ : base(ExpressionKind.UnboundLambda, type)
+ {
+ }
}
}
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/UserDefinedConversion.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/UserDefinedConversion.cs
index 948a1abc95..0e8a81a855 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/UserDefinedConversion.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/UserDefinedConversion.cs
@@ -6,10 +6,17 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
internal sealed class ExprUserDefinedConversion : Expr
{
+ public ExprUserDefinedConversion()
+ : base(ExpressionKind.UserDefinedConversion)
+ {
+
+ }
public Expr Argument { get; set; }
public Expr UserDefinedCall { get; set; }
+ public override CType Type => UserDefinedCall.Type;
+
public MethWithInst UserDefinedCallMethod { get; set; }
}
}
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/UserDefinedLogicalOperator.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/UserDefinedLogicalOperator.cs
index 16a0fe6bc5..546ef85c52 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/UserDefinedLogicalOperator.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/UserDefinedLogicalOperator.cs
@@ -4,8 +4,13 @@
namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
- internal sealed class ExprUserLogicalOp : Expr
+ internal sealed class ExprUserLogicalOp : ExprWithType
{
+ public ExprUserLogicalOp(CType type)
+ : base(ExpressionKind.UserLogicalOp, type)
+ {
+ }
+
public Expr TrueFalseCall { get; set; }
public ExprCall OperatorCall { get; set; }
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Visitors/ExprVisitorBase.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Visitors/ExprVisitorBase.cs
index f1928030d1..376fc191d5 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Visitors/ExprVisitorBase.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Visitors/ExprVisitorBase.cs
@@ -98,460 +98,342 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
switch (pExpr.Kind)
{
- case ExpressionKind.EK_BLOCK:
+ case ExpressionKind.Block:
return VisitBLOCK(pExpr as ExprBlock);
- case ExpressionKind.EK_RETURN:
+ case ExpressionKind.Return:
return VisitRETURN(pExpr as ExprReturn);
- case ExpressionKind.EK_BINOP:
+ case ExpressionKind.BinaryOp:
return VisitBINOP(pExpr as ExprBinOp);
- case ExpressionKind.EK_UNARYOP:
+ case ExpressionKind.UnaryOp:
return VisitUNARYOP(pExpr as ExprUnaryOp);
- case ExpressionKind.EK_ASSIGNMENT:
+ case ExpressionKind.Assignment:
return VisitASSIGNMENT(pExpr as ExprAssignment);
- case ExpressionKind.EK_LIST:
+ case ExpressionKind.List:
return VisitLIST(pExpr as ExprList);
- case ExpressionKind.EK_QUESTIONMARK:
+ case ExpressionKind.QuestionMark:
return VisitQUESTIONMARK(pExpr as ExprQuestionMark);
- case ExpressionKind.EK_ARRAYINDEX:
+ case ExpressionKind.ArrayIndex:
return VisitARRAYINDEX(pExpr as ExprArrayIndex);
- case ExpressionKind.EK_ARRAYLENGTH:
+ case ExpressionKind.ArrayLength:
return VisitARRAYLENGTH(pExpr as ExprArrayLength);
- case ExpressionKind.EK_CALL:
+ case ExpressionKind.Call:
return VisitCALL(pExpr as ExprCall);
- case ExpressionKind.EK_EVENT:
+ case ExpressionKind.Event:
return VisitEVENT(pExpr as ExprEvent);
- case ExpressionKind.EK_FIELD:
+ case ExpressionKind.Field:
return VisitFIELD(pExpr as ExprField);
- case ExpressionKind.EK_LOCAL:
+ case ExpressionKind.Local:
return VisitLOCAL(pExpr as ExprLocal);
- case ExpressionKind.EK_THISPOINTER:
+ case ExpressionKind.ThisPointer:
return VisitTHISPOINTER(pExpr as ExprThisPointer);
- case ExpressionKind.EK_CONSTANT:
+ case ExpressionKind.Constant:
return VisitCONSTANT(pExpr as ExprConstant);
- case ExpressionKind.EK_TYPEARGUMENTS:
+ case ExpressionKind.TypeArguments:
return VisitTYPEARGUMENTS(pExpr as ExprTypeArguments);
- case ExpressionKind.EK_TYPEORNAMESPACE:
- return VisitTYPEORNAMESPACE(pExpr as ExprTypeOrNamespace);
- case ExpressionKind.EK_CLASS:
+ case ExpressionKind.Class:
return VisitCLASS(pExpr as ExprClass);
- case ExpressionKind.EK_FUNCPTR:
+ case ExpressionKind.FunctionPointer:
return VisitFUNCPTR(pExpr as ExprFuncPtr);
- case ExpressionKind.EK_PROP:
+ case ExpressionKind.Property:
return VisitPROP(pExpr as ExprProperty);
- case ExpressionKind.EK_MULTI:
+ case ExpressionKind.Multi:
return VisitMULTI(pExpr as ExprMulti);
- case ExpressionKind.EK_MULTIGET:
+ case ExpressionKind.MultiGet:
return VisitMULTIGET(pExpr as ExprMultiGet);
- case ExpressionKind.EK_WRAP:
+ case ExpressionKind.Wrap:
return VisitWRAP(pExpr as ExprWrap);
- case ExpressionKind.EK_CONCAT:
+ case ExpressionKind.Concat:
return VisitCONCAT(pExpr as ExprConcat);
- case ExpressionKind.EK_ARRINIT:
+ case ExpressionKind.ArrayInit:
return VisitARRINIT(pExpr as ExprArrayInit);
- case ExpressionKind.EK_CAST:
+ case ExpressionKind.Cast:
return VisitCAST(pExpr as ExprCast);
- case ExpressionKind.EK_USERDEFINEDCONVERSION:
+ case ExpressionKind.UserDefinedConversion:
return VisitUSERDEFINEDCONVERSION(pExpr as ExprUserDefinedConversion);
- case ExpressionKind.EK_TYPEOF:
+ case ExpressionKind.TypeOf:
return VisitTYPEOF(pExpr as ExprTypeOf);
- case ExpressionKind.EK_ZEROINIT:
+ case ExpressionKind.ZeroInit:
return VisitZEROINIT(pExpr as ExprZeroInit);
- case ExpressionKind.EK_USERLOGOP:
+ case ExpressionKind.UserLogicalOp:
return VisitUSERLOGOP(pExpr as ExprUserLogicalOp);
- case ExpressionKind.EK_MEMGRP:
+ case ExpressionKind.MemberGroup:
return VisitMEMGRP(pExpr as ExprMemberGroup);
- case ExpressionKind.EK_BOUNDLAMBDA:
+ case ExpressionKind.BoundLambda:
return VisitBOUNDLAMBDA(pExpr as ExprBoundLambda);
- case ExpressionKind.EK_UNBOUNDLAMBDA:
+ case ExpressionKind.UnboundLambda:
return VisitUNBOUNDLAMBDA(pExpr as ExprUnboundLambda);
- case ExpressionKind.EK_HOISTEDLOCALEXPR:
+ case ExpressionKind.HoistedLocalExpression:
return VisitHOISTEDLOCALEXPR(pExpr as ExprHoistedLocalExpr);
- case ExpressionKind.EK_FIELDINFO:
+ case ExpressionKind.FieldInfo:
return VisitFIELDINFO(pExpr as ExprFieldInfo);
- case ExpressionKind.EK_METHODINFO:
+ case ExpressionKind.MethodInfo:
return VisitMETHODINFO(pExpr as ExprMethodInfo);
// Binary operators
- case ExpressionKind.EK_EQUALS:
+ case ExpressionKind.EqualsParam:
return VisitEQUALS(pExpr as ExprBinOp);
- case ExpressionKind.EK_COMPARE:
+ case ExpressionKind.Compare:
return VisitCOMPARE(pExpr as ExprBinOp);
- case ExpressionKind.EK_NE:
+ case ExpressionKind.NotEq:
return VisitNE(pExpr as ExprBinOp);
- case ExpressionKind.EK_LT:
+ case ExpressionKind.LessThan:
return VisitLT(pExpr as ExprBinOp);
- case ExpressionKind.EK_LE:
+ case ExpressionKind.LessThanOrEqual:
return VisitLE(pExpr as ExprBinOp);
- case ExpressionKind.EK_GT:
+ case ExpressionKind.GreaterThan:
return VisitGT(pExpr as ExprBinOp);
- case ExpressionKind.EK_GE:
+ case ExpressionKind.GreaterThanOrEqual:
return VisitGE(pExpr as ExprBinOp);
- case ExpressionKind.EK_ADD:
+ case ExpressionKind.Add:
return VisitADD(pExpr as ExprBinOp);
- case ExpressionKind.EK_SUB:
+ case ExpressionKind.Subtract:
return VisitSUB(pExpr as ExprBinOp);
- case ExpressionKind.EK_MUL:
+ case ExpressionKind.Multiply:
return VisitMUL(pExpr as ExprBinOp);
- case ExpressionKind.EK_DIV:
+ case ExpressionKind.Divide:
return VisitDIV(pExpr as ExprBinOp);
- case ExpressionKind.EK_MOD:
+ case ExpressionKind.Modulo:
return VisitMOD(pExpr as ExprBinOp);
- case ExpressionKind.EK_BITAND:
+ case ExpressionKind.BitwiseAnd:
return VisitBITAND(pExpr as ExprBinOp);
- case ExpressionKind.EK_BITOR:
+ case ExpressionKind.BitwiseOr:
return VisitBITOR(pExpr as ExprBinOp);
- case ExpressionKind.EK_BITXOR:
+ case ExpressionKind.BitwiseExclusiveOr:
return VisitBITXOR(pExpr as ExprBinOp);
- case ExpressionKind.EK_LSHIFT:
+ case ExpressionKind.LeftShirt:
return VisitLSHIFT(pExpr as ExprBinOp);
- case ExpressionKind.EK_RSHIFT:
+ case ExpressionKind.RightShift:
return VisitRSHIFT(pExpr as ExprBinOp);
- case ExpressionKind.EK_LOGAND:
+ case ExpressionKind.LogicalAnd:
return VisitLOGAND(pExpr as ExprBinOp);
- case ExpressionKind.EK_LOGOR:
+ case ExpressionKind.LogicalOr:
return VisitLOGOR(pExpr as ExprBinOp);
- case ExpressionKind.EK_SEQUENCE:
+ case ExpressionKind.Sequence:
return VisitSEQUENCE(pExpr as ExprBinOp);
- case ExpressionKind.EK_SEQREV:
+ case ExpressionKind.SequenceReverse:
return VisitSEQREV(pExpr as ExprBinOp);
- case ExpressionKind.EK_SAVE:
+ case ExpressionKind.Save:
return VisitSAVE(pExpr as ExprBinOp);
- case ExpressionKind.EK_SWAP:
+ case ExpressionKind.Swap:
return VisitSWAP(pExpr as ExprBinOp);
- case ExpressionKind.EK_INDIR:
+ case ExpressionKind.Indir:
return VisitINDIR(pExpr as ExprBinOp);
- case ExpressionKind.EK_STRINGEQ:
+ case ExpressionKind.StringEq:
return VisitSTRINGEQ(pExpr as ExprBinOp);
- case ExpressionKind.EK_STRINGNE:
+ case ExpressionKind.StringNotEq:
return VisitSTRINGNE(pExpr as ExprBinOp);
- case ExpressionKind.EK_DELEGATEEQ:
+ case ExpressionKind.DelegateEq:
return VisitDELEGATEEQ(pExpr as ExprBinOp);
- case ExpressionKind.EK_DELEGATENE:
+ case ExpressionKind.DelegateNotEq:
return VisitDELEGATENE(pExpr as ExprBinOp);
- case ExpressionKind.EK_DELEGATEADD:
+ case ExpressionKind.DelegateAdd:
return VisitDELEGATEADD(pExpr as ExprBinOp);
- case ExpressionKind.EK_DELEGATESUB:
+ case ExpressionKind.DelegateSubtract:
return VisitDELEGATESUB(pExpr as ExprBinOp);
- case ExpressionKind.EK_EQ:
+ case ExpressionKind.Eq:
return VisitEQ(pExpr as ExprBinOp);
// Unary operators
- case ExpressionKind.EK_TRUE:
+ case ExpressionKind.True:
return VisitTRUE(pExpr as ExprUnaryOp);
- case ExpressionKind.EK_FALSE:
+ case ExpressionKind.False:
return VisitFALSE(pExpr as ExprUnaryOp);
- case ExpressionKind.EK_INC:
+ case ExpressionKind.Inc:
return VisitINC(pExpr as ExprUnaryOp);
- case ExpressionKind.EK_DEC:
+ case ExpressionKind.Dec:
return VisitDEC(pExpr as ExprUnaryOp);
- case ExpressionKind.EK_LOGNOT:
+ case ExpressionKind.LogicalNot:
return VisitLOGNOT(pExpr as ExprUnaryOp);
- case ExpressionKind.EK_NEG:
+ case ExpressionKind.Negate:
return VisitNEG(pExpr as ExprUnaryOp);
- case ExpressionKind.EK_UPLUS:
+ case ExpressionKind.UnaryPlus:
return VisitUPLUS(pExpr as ExprUnaryOp);
- case ExpressionKind.EK_BITNOT:
+ case ExpressionKind.BitwiseNot:
return VisitBITNOT(pExpr as ExprUnaryOp);
- case ExpressionKind.EK_ADDR:
+ case ExpressionKind.Addr:
return VisitADDR(pExpr as ExprUnaryOp);
- case ExpressionKind.EK_DECIMALNEG:
+ case ExpressionKind.DecimalNegate:
return VisitDECIMALNEG(pExpr as ExprUnaryOp);
- case ExpressionKind.EK_DECIMALINC:
+ case ExpressionKind.DecimalInc:
return VisitDECIMALINC(pExpr as ExprUnaryOp);
- case ExpressionKind.EK_DECIMALDEC:
+ case ExpressionKind.DecimalDec:
return VisitDECIMALDEC(pExpr as ExprUnaryOp);
default:
throw Error.InternalCompilerError();
}
}
+
private void VisitChildren(Expr pExpr)
{
Debug.Assert(pExpr != null);
- Expr exprRet = null;
+ Expr exprRet;
- // Lists are a special case. We treat a list not as a
- // binary node but rather as a node with n children.
- if (pExpr is ExprList list)
+ switch (pExpr.Kind)
{
- while (true)
- {
- list.OptionalElement = Visit(list.OptionalElement);
- Expr nextNode = list.OptionalNextListNode;
- if (nextNode == null)
- {
- return;
- }
+ case ExpressionKind.List:
- if (!(nextNode is ExprList next))
+ // Lists are a special case. We treat a list not as a
+ // binary node but rather as a node with n children.
+ ExprList list = (ExprList)pExpr;
+ while (true)
{
- list.OptionalNextListNode = Visit(nextNode);
- return;
+ list.OptionalElement = Visit(list.OptionalElement);
+ Expr nextNode = list.OptionalNextListNode;
+ if (nextNode == null)
+ {
+ return;
+ }
+
+ if (!(nextNode is ExprList next))
+ {
+ list.OptionalNextListNode = Visit(nextNode);
+ return;
+ }
+
+ list = next;
}
- list = next;
- }
- }
-
- switch (pExpr.Kind)
- {
- default:
- pExpr.AssertIsBin();
- goto VISIT_EXPRBINOP;
-
- VISIT_EXPR:
- break;
- VISIT_BASE_EXPRSTMT:
- goto VISIT_EXPR;
- VISIT_EXPRSTMT:
- goto VISIT_BASE_EXPRSTMT;
-
- case ExpressionKind.EK_BINOP:
- goto VISIT_EXPRBINOP;
- VISIT_BASE_EXPRBINOP:
- goto VISIT_EXPR;
- VISIT_EXPRBINOP:
- exprRet = Visit((pExpr as ExprBinOp).OptionalLeftChild);
- (pExpr as ExprBinOp).OptionalLeftChild = exprRet as Expr;
- exprRet = Visit((pExpr as ExprBinOp).OptionalRightChild);
- (pExpr as ExprBinOp).OptionalRightChild = exprRet as Expr;
- goto VISIT_BASE_EXPRBINOP;
-
- case ExpressionKind.EK_LIST:
- goto VISIT_EXPRLIST;
- VISIT_BASE_EXPRLIST:
- goto VISIT_EXPR;
- VISIT_EXPRLIST:
- exprRet = Visit((pExpr as ExprList).OptionalElement);
- (pExpr as ExprList).OptionalElement = exprRet as Expr;
- exprRet = Visit((pExpr as ExprList).OptionalNextListNode);
- (pExpr as ExprList).OptionalNextListNode = exprRet as Expr;
- goto VISIT_BASE_EXPRLIST;
-
- case ExpressionKind.EK_ASSIGNMENT:
- goto VISIT_EXPRASSIGNMENT;
- VISIT_BASE_EXPRASSIGNMENT:
- goto VISIT_EXPR;
- VISIT_EXPRASSIGNMENT:
+ case ExpressionKind.Assignment:
exprRet = Visit((pExpr as ExprAssignment).LHS);
Debug.Assert(exprRet != null);
- (pExpr as ExprAssignment).LHS = exprRet as Expr;
+ (pExpr as ExprAssignment).LHS = exprRet;
exprRet = Visit((pExpr as ExprAssignment).RHS);
Debug.Assert(exprRet != null);
- (pExpr as ExprAssignment).RHS = exprRet as Expr;
- goto VISIT_BASE_EXPRASSIGNMENT;
-
- case ExpressionKind.EK_QUESTIONMARK:
- goto VISIT_EXPRQUESTIONMARK;
- VISIT_BASE_EXPRQUESTIONMARK:
- goto VISIT_EXPR;
- VISIT_EXPRQUESTIONMARK:
+ (pExpr as ExprAssignment).RHS = exprRet;
+ break;
+
+ case ExpressionKind.QuestionMark:
exprRet = Visit((pExpr as ExprQuestionMark).TestExpression);
Debug.Assert(exprRet != null);
- (pExpr as ExprQuestionMark).TestExpression = exprRet as Expr;
+ (pExpr as ExprQuestionMark).TestExpression = exprRet;
exprRet = Visit((pExpr as ExprQuestionMark).Consequence);
Debug.Assert(exprRet != null);
(pExpr as ExprQuestionMark).Consequence = exprRet as ExprBinOp;
- goto VISIT_BASE_EXPRQUESTIONMARK;
+ break;
- case ExpressionKind.EK_ARRAYINDEX:
- goto VISIT_EXPRARRAYINDEX;
- VISIT_BASE_EXPRARRAYINDEX:
- goto VISIT_EXPR;
- VISIT_EXPRARRAYINDEX:
+ case ExpressionKind.ArrayIndex:
exprRet = Visit((pExpr as ExprArrayIndex).Array);
Debug.Assert(exprRet != null);
- (pExpr as ExprArrayIndex).Array = exprRet as Expr;
+ (pExpr as ExprArrayIndex).Array = exprRet;
exprRet = Visit((pExpr as ExprArrayIndex).Index);
Debug.Assert(exprRet != null);
- (pExpr as ExprArrayIndex).Index = exprRet as Expr;
- goto VISIT_BASE_EXPRARRAYINDEX;
-
- case ExpressionKind.EK_ARRAYLENGTH:
- goto VISIT_EXPRARRAYLENGTH;
- VISIT_BASE_EXPRARRAYLENGTH:
- goto VISIT_EXPR;
- VISIT_EXPRARRAYLENGTH:
+ (pExpr as ExprArrayIndex).Index = exprRet;
+ break;
+
+ case ExpressionKind.ArrayLength:
exprRet = Visit((pExpr as ExprArrayLength).Array);
Debug.Assert(exprRet != null);
- (pExpr as ExprArrayLength).Array = exprRet as Expr;
- goto VISIT_BASE_EXPRARRAYLENGTH;
-
- case ExpressionKind.EK_UNARYOP:
- case ExpressionKind.EK_TRUE:
- case ExpressionKind.EK_FALSE:
- case ExpressionKind.EK_INC:
- case ExpressionKind.EK_DEC:
- case ExpressionKind.EK_LOGNOT:
- case ExpressionKind.EK_NEG:
- case ExpressionKind.EK_UPLUS:
- case ExpressionKind.EK_BITNOT:
- case ExpressionKind.EK_ADDR:
- case ExpressionKind.EK_DECIMALNEG:
- case ExpressionKind.EK_DECIMALINC:
- case ExpressionKind.EK_DECIMALDEC:
- goto VISIT_EXPRUNARYOP;
- VISIT_BASE_EXPRUNARYOP:
- goto VISIT_EXPR;
- VISIT_EXPRUNARYOP:
+ (pExpr as ExprArrayLength).Array = exprRet;
+ break;
+
+ case ExpressionKind.UnaryOp:
+ case ExpressionKind.True:
+ case ExpressionKind.False:
+ case ExpressionKind.Inc:
+ case ExpressionKind.Dec:
+ case ExpressionKind.LogicalNot:
+ case ExpressionKind.Negate:
+ case ExpressionKind.UnaryPlus:
+ case ExpressionKind.BitwiseNot:
+ case ExpressionKind.Addr:
+ case ExpressionKind.DecimalNegate:
+ case ExpressionKind.DecimalInc:
+ case ExpressionKind.DecimalDec:
exprRet = Visit((pExpr as ExprUnaryOp).Child);
Debug.Assert(exprRet != null);
- (pExpr as ExprUnaryOp).Child = exprRet as Expr;
- goto VISIT_BASE_EXPRUNARYOP;
-
- case ExpressionKind.EK_USERLOGOP:
- goto VISIT_EXPRUSERLOGOP;
- VISIT_BASE_EXPRUSERLOGOP:
- goto VISIT_EXPR;
- VISIT_EXPRUSERLOGOP:
+ (pExpr as ExprUnaryOp).Child = exprRet;
+ break;
+
+ case ExpressionKind.UserLogicalOp:
exprRet = Visit((pExpr as ExprUserLogicalOp).TrueFalseCall);
Debug.Assert(exprRet != null);
- (pExpr as ExprUserLogicalOp).TrueFalseCall = exprRet as Expr;
+ (pExpr as ExprUserLogicalOp).TrueFalseCall = exprRet;
exprRet = Visit((pExpr as ExprUserLogicalOp).OperatorCall);
Debug.Assert(exprRet != null);
(pExpr as ExprUserLogicalOp).OperatorCall = exprRet as ExprCall;
exprRet = Visit((pExpr as ExprUserLogicalOp).FirstOperandToExamine);
Debug.Assert(exprRet != null);
- (pExpr as ExprUserLogicalOp).FirstOperandToExamine = exprRet as Expr;
- goto VISIT_BASE_EXPRUSERLOGOP;
-
- case ExpressionKind.EK_TYPEOF:
- goto VISIT_EXPRTYPEOF;
- VISIT_BASE_EXPRTYPEOF:
- goto VISIT_EXPR;
- VISIT_EXPRTYPEOF:
+ (pExpr as ExprUserLogicalOp).FirstOperandToExamine = exprRet;
+ break;
+
+ case ExpressionKind.TypeOf:
exprRet = Visit((pExpr as ExprTypeOf).SourceType);
- (pExpr as ExprTypeOf).SourceType = exprRet as ExprTypeOrNamespace;
- goto VISIT_BASE_EXPRTYPEOF;
-
- case ExpressionKind.EK_CAST:
- goto VISIT_EXPRCAST;
- VISIT_BASE_EXPRCAST:
- goto VISIT_EXPR;
- VISIT_EXPRCAST:
+ (pExpr as ExprTypeOf).SourceType = exprRet as ExprClass;
+ break;
+
+ case ExpressionKind.Cast:
exprRet = Visit((pExpr as ExprCast).Argument);
Debug.Assert(exprRet != null);
- (pExpr as ExprCast).Argument = exprRet as Expr;
+ (pExpr as ExprCast).Argument = exprRet;
exprRet = Visit((pExpr as ExprCast).DestinationType);
- (pExpr as ExprCast).DestinationType = exprRet as ExprTypeOrNamespace;
- goto VISIT_BASE_EXPRCAST;
-
- case ExpressionKind.EK_USERDEFINEDCONVERSION:
- goto VISIT_EXPRUSERDEFINEDCONVERSION;
- VISIT_BASE_EXPRUSERDEFINEDCONVERSION:
- goto VISIT_EXPR;
- VISIT_EXPRUSERDEFINEDCONVERSION:
+ (pExpr as ExprCast).DestinationType = exprRet as ExprClass;
+ break;
+
+ case ExpressionKind.UserDefinedConversion:
exprRet = Visit((pExpr as ExprUserDefinedConversion).UserDefinedCall);
Debug.Assert(exprRet != null);
- (pExpr as ExprUserDefinedConversion).UserDefinedCall = exprRet as Expr;
- goto VISIT_BASE_EXPRUSERDEFINEDCONVERSION;
-
- case ExpressionKind.EK_ZEROINIT:
- goto VISIT_EXPRZEROINIT;
- VISIT_BASE_EXPRZEROINIT:
- goto VISIT_EXPR;
- VISIT_EXPRZEROINIT:
+ (pExpr as ExprUserDefinedConversion).UserDefinedCall = exprRet;
+ break;
+
+ case ExpressionKind.ZeroInit:
exprRet = Visit((pExpr as ExprZeroInit).OptionalArgument);
- (pExpr as ExprZeroInit).OptionalArgument = exprRet as Expr;
+ (pExpr as ExprZeroInit).OptionalArgument = exprRet;
+
// Used for when we zeroinit 0 parameter constructors for structs/enums.
exprRet = Visit((pExpr as ExprZeroInit).OptionalConstructorCall);
- (pExpr as ExprZeroInit).OptionalConstructorCall = exprRet as Expr;
- goto VISIT_BASE_EXPRZEROINIT;
-
- case ExpressionKind.EK_BLOCK:
- goto VISIT_EXPRBLOCK;
- VISIT_BASE_EXPRBLOCK:
- goto VISIT_EXPRSTMT;
- VISIT_EXPRBLOCK:
+ (pExpr as ExprZeroInit).OptionalConstructorCall = exprRet;
+ break;
+
+ case ExpressionKind.Block:
exprRet = Visit((pExpr as ExprBlock).OptionalStatements);
(pExpr as ExprBlock).OptionalStatements = exprRet as ExprStatement;
- goto VISIT_BASE_EXPRBLOCK;
+ break;
+
+ case ExpressionKind.MemberGroup:
- case ExpressionKind.EK_MEMGRP:
- goto VISIT_EXPRMEMGRP;
- VISIT_BASE_EXPRMEMGRP:
- goto VISIT_EXPR;
- VISIT_EXPRMEMGRP:
// The object expression. NULL for a static invocation.
exprRet = Visit((pExpr as ExprMemberGroup).OptionalObject);
- (pExpr as ExprMemberGroup).OptionalObject = exprRet as Expr;
- goto VISIT_BASE_EXPRMEMGRP;
-
- case ExpressionKind.EK_CALL:
- goto VISIT_EXPRCALL;
- VISIT_BASE_EXPRCALL:
- goto VISIT_EXPR;
- VISIT_EXPRCALL:
+ (pExpr as ExprMemberGroup).OptionalObject = exprRet;
+ break;
+
+ case ExpressionKind.Call:
exprRet = Visit((pExpr as ExprCall).OptionalArguments);
- (pExpr as ExprCall).OptionalArguments = exprRet as Expr;
+ (pExpr as ExprCall).OptionalArguments = exprRet;
exprRet = Visit((pExpr as ExprCall).MemberGroup);
Debug.Assert(exprRet != null);
(pExpr as ExprCall).MemberGroup = exprRet as ExprMemberGroup;
- goto VISIT_BASE_EXPRCALL;
-
+ break;
- case ExpressionKind.EK_PROP:
- goto VISIT_EXPRPROP;
- VISIT_BASE_EXPRPROP:
- goto VISIT_EXPR;
- VISIT_EXPRPROP:
+ case ExpressionKind.Property:
exprRet = Visit((pExpr as ExprProperty).OptionalArguments);
- (pExpr as ExprProperty).OptionalArguments = exprRet as Expr;
+ (pExpr as ExprProperty).OptionalArguments = exprRet;
exprRet = Visit((pExpr as ExprProperty).MemberGroup);
Debug.Assert(exprRet != null);
(pExpr as ExprProperty).MemberGroup = exprRet as ExprMemberGroup;
- goto VISIT_BASE_EXPRPROP;
+ break;
- case ExpressionKind.EK_FIELD:
- goto VISIT_EXPRFIELD;
- VISIT_BASE_EXPRFIELD:
- goto VISIT_EXPR;
- VISIT_EXPRFIELD:
+ case ExpressionKind.Field:
exprRet = Visit((pExpr as ExprField).OptionalObject);
- (pExpr as ExprField).OptionalObject = exprRet as Expr;
- goto VISIT_BASE_EXPRFIELD;
-
- case ExpressionKind.EK_EVENT:
- goto VISIT_EXPREVENT;
- VISIT_BASE_EXPREVENT:
- goto VISIT_EXPR;
- VISIT_EXPREVENT:
+ (pExpr as ExprField).OptionalObject = exprRet;
+ break;
+
+ case ExpressionKind.Event:
exprRet = Visit((pExpr as ExprEvent).OptionalObject);
- (pExpr as ExprEvent).OptionalObject = exprRet as Expr;
- goto VISIT_BASE_EXPREVENT;
-
- case ExpressionKind.EK_LOCAL:
- goto VISIT_EXPRLOCAL;
- VISIT_BASE_EXPRLOCAL:
- goto VISIT_EXPR;
- VISIT_EXPRLOCAL:
- goto VISIT_BASE_EXPRLOCAL;
-
- case ExpressionKind.EK_THISPOINTER:
- goto VISIT_EXPRTHISPOINTER;
- VISIT_BASE_EXPRTHISPOINTER:
- goto VISIT_EXPRLOCAL;
- VISIT_EXPRTHISPOINTER:
- goto VISIT_BASE_EXPRTHISPOINTER;
-
- case ExpressionKind.EK_RETURN:
- goto VISIT_EXPRRETURN;
- VISIT_BASE_EXPRRETURN:
- goto VISIT_EXPRSTMT;
- VISIT_EXPRRETURN:
+ (pExpr as ExprEvent).OptionalObject = exprRet;
+ break;
+
+ case ExpressionKind.Return:
exprRet = Visit((pExpr as ExprReturn).OptionalObject);
- (pExpr as ExprReturn).OptionalObject = exprRet as Expr;
- goto VISIT_BASE_EXPRRETURN;
-
- case ExpressionKind.EK_CONSTANT:
- goto VISIT_EXPRCONSTANT;
- VISIT_BASE_EXPRCONSTANT:
- goto VISIT_EXPR;
- VISIT_EXPRCONSTANT:
+ (pExpr as ExprReturn).OptionalObject = exprRet;
+ break;
+
+ case ExpressionKind.Constant:
+
// Used for when we zeroinit 0 parameter constructors for structs/enums.
exprRet = Visit((pExpr as ExprConstant).OptionalConstructorCall);
- (pExpr as ExprConstant).OptionalConstructorCall = exprRet as Expr;
- goto VISIT_BASE_EXPRCONSTANT;
+ (pExpr as ExprConstant).OptionalConstructorCall = exprRet;
+ break;
/*************************************************************************************************
TYPEEXPRs defined:
@@ -581,132 +463,64 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
*************************************************************************************************/
- case ExpressionKind.EK_TYPEARGUMENTS:
- goto VISIT_EXPRTYPEARGUMENTS;
- VISIT_BASE_EXPRTYPEARGUMENTS:
- goto VISIT_EXPR;
- VISIT_EXPRTYPEARGUMENTS:
+ case ExpressionKind.TypeArguments:
exprRet = Visit((pExpr as ExprTypeArguments).OptionalElements);
- (pExpr as ExprTypeArguments).OptionalElements = exprRet as Expr;
- goto VISIT_BASE_EXPRTYPEARGUMENTS;
-
- case ExpressionKind.EK_TYPEORNAMESPACE:
- goto VISIT_EXPRTYPEORNAMESPACE;
- VISIT_BASE_EXPRTYPEORNAMESPACE:
- goto VISIT_EXPR;
- VISIT_EXPRTYPEORNAMESPACE:
- goto VISIT_BASE_EXPRTYPEORNAMESPACE;
-
- case ExpressionKind.EK_CLASS:
- goto VISIT_EXPRCLASS;
- VISIT_BASE_EXPRCLASS:
- goto VISIT_EXPRTYPEORNAMESPACE;
- VISIT_EXPRCLASS:
- goto VISIT_BASE_EXPRCLASS;
-
- case ExpressionKind.EK_FUNCPTR:
- goto VISIT_EXPRFUNCPTR;
- VISIT_BASE_EXPRFUNCPTR:
- goto VISIT_EXPR;
- VISIT_EXPRFUNCPTR:
- goto VISIT_BASE_EXPRFUNCPTR;
-
- case ExpressionKind.EK_MULTIGET:
- goto VISIT_EXPRMULTIGET;
- VISIT_BASE_EXPRMULTIGET:
- goto VISIT_EXPR;
- VISIT_EXPRMULTIGET:
- goto VISIT_BASE_EXPRMULTIGET;
-
- case ExpressionKind.EK_MULTI:
- goto VISIT_EXPRMULTI;
- VISIT_BASE_EXPRMULTI:
- goto VISIT_EXPR;
- VISIT_EXPRMULTI:
+ (pExpr as ExprTypeArguments).OptionalElements = exprRet;
+ break;
+
+ case ExpressionKind.Multi:
exprRet = Visit((pExpr as ExprMulti).Left);
Debug.Assert(exprRet != null);
- (pExpr as ExprMulti).Left = exprRet as Expr;
+ (pExpr as ExprMulti).Left = exprRet;
exprRet = Visit((pExpr as ExprMulti).Operator);
Debug.Assert(exprRet != null);
- (pExpr as ExprMulti).Operator = exprRet as Expr;
- goto VISIT_BASE_EXPRMULTI;
-
- case ExpressionKind.EK_WRAP:
- goto VISIT_EXPRWRAP;
- VISIT_BASE_EXPRWRAP:
- goto VISIT_EXPR;
- VISIT_EXPRWRAP:
- goto VISIT_BASE_EXPRWRAP;
-
- case ExpressionKind.EK_CONCAT:
- goto VISIT_EXPRCONCAT;
- VISIT_BASE_EXPRCONCAT:
- goto VISIT_EXPR;
- VISIT_EXPRCONCAT:
+ (pExpr as ExprMulti).Operator = exprRet;
+ break;
+
+ case ExpressionKind.Concat:
exprRet = Visit((pExpr as ExprConcat).FirstArgument);
Debug.Assert(exprRet != null);
- (pExpr as ExprConcat).FirstArgument = exprRet as Expr;
+ (pExpr as ExprConcat).FirstArgument = exprRet;
exprRet = Visit((pExpr as ExprConcat).SecondArgument);
Debug.Assert(exprRet != null);
- (pExpr as ExprConcat).SecondArgument = exprRet as Expr;
- goto VISIT_BASE_EXPRCONCAT;
-
- case ExpressionKind.EK_ARRINIT:
- goto VISIT_EXPRARRINIT;
- VISIT_BASE_EXPRARRINIT:
- goto VISIT_EXPR;
- VISIT_EXPRARRINIT:
+ (pExpr as ExprConcat).SecondArgument = exprRet;
+ break;
+
+ case ExpressionKind.ArrayInit:
exprRet = Visit((pExpr as ExprArrayInit).OptionalArguments);
- (pExpr as ExprArrayInit).OptionalArguments = exprRet as Expr;
+ (pExpr as ExprArrayInit).OptionalArguments = exprRet;
exprRet = Visit((pExpr as ExprArrayInit).OptionalArgumentDimensions);
- (pExpr as ExprArrayInit).OptionalArgumentDimensions = exprRet as Expr;
- goto VISIT_BASE_EXPRARRINIT;
-
- case ExpressionKind.EK_NOOP:
- goto VISIT_EXPRNOOP;
- VISIT_BASE_EXPRNOOP:
- goto VISIT_EXPRSTMT;
- VISIT_EXPRNOOP:
- goto VISIT_BASE_EXPRNOOP;
-
- case ExpressionKind.EK_BOUNDLAMBDA:
- goto VISIT_EXPRBOUNDLAMBDA;
- VISIT_BASE_EXPRBOUNDLAMBDA:
- goto VISIT_EXPR;
- VISIT_EXPRBOUNDLAMBDA:
+ (pExpr as ExprArrayInit).OptionalArgumentDimensions = exprRet;
+ break;
+
+ case ExpressionKind.BoundLambda:
exprRet = Visit((pExpr as ExprBoundLambda).OptionalBody);
(pExpr as ExprBoundLambda).OptionalBody = exprRet as ExprBlock;
- goto VISIT_BASE_EXPRBOUNDLAMBDA;
-
- case ExpressionKind.EK_UNBOUNDLAMBDA:
- goto VISIT_EXPRUNBOUNDLAMBDA;
- VISIT_BASE_EXPRUNBOUNDLAMBDA:
- goto VISIT_EXPR;
- VISIT_EXPRUNBOUNDLAMBDA:
- goto VISIT_BASE_EXPRUNBOUNDLAMBDA;
-
- case ExpressionKind.EK_HOISTEDLOCALEXPR:
- goto VISIT_EXPRHOISTEDLOCALEXPR;
- VISIT_BASE_EXPRHOISTEDLOCALEXPR:
- goto VISIT_EXPR;
- VISIT_EXPRHOISTEDLOCALEXPR:
- goto VISIT_BASE_EXPRHOISTEDLOCALEXPR;
-
- case ExpressionKind.EK_FIELDINFO:
- goto VISIT_EXPRFIELDINFO;
- VISIT_BASE_EXPRFIELDINFO:
- goto VISIT_EXPR;
- VISIT_EXPRFIELDINFO:
- goto VISIT_BASE_EXPRFIELDINFO;
-
- case ExpressionKind.EK_METHODINFO:
- goto VISIT_EXPRMETHODINFO;
- VISIT_BASE_EXPRMETHODINFO:
- goto VISIT_EXPR;
- VISIT_EXPRMETHODINFO:
- goto VISIT_BASE_EXPRMETHODINFO;
+ break;
+
+ case ExpressionKind.Local:
+ case ExpressionKind.ThisPointer:
+ case ExpressionKind.Class:
+ case ExpressionKind.FunctionPointer:
+ case ExpressionKind.MultiGet:
+ case ExpressionKind.Wrap:
+ case ExpressionKind.NoOp:
+ case ExpressionKind.UnboundLambda:
+ case ExpressionKind.HoistedLocalExpression:
+ case ExpressionKind.FieldInfo:
+ case ExpressionKind.MethodInfo:
+ break;
+
+ default:
+ pExpr.AssertIsBin();
+ exprRet = Visit((pExpr as ExprBinOp).OptionalLeftChild);
+ (pExpr as ExprBinOp).OptionalLeftChild = exprRet;
+ exprRet = Visit((pExpr as ExprBinOp).OptionalRightChild);
+ (pExpr as ExprBinOp).OptionalRightChild = exprRet;
+ break;
}
}
+
protected virtual Expr VisitEXPR(Expr pExpr)
{
VisitChildren(pExpr);
@@ -726,7 +540,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
}
protected virtual Expr VisitCLASS(ExprClass pExpr)
{
- return VisitTYPEORNAMESPACE(pExpr);
+ return VisitEXPR(pExpr);
}
protected virtual Expr VisitSTMT(ExprStatement pExpr)
{
@@ -812,10 +626,6 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
return VisitEXPR(pExpr);
}
- protected virtual Expr VisitTYPEORNAMESPACE(ExprTypeOrNamespace pExpr)
- {
- return VisitEXPR(pExpr);
- }
protected virtual Expr VisitFUNCPTR(ExprFuncPtr pExpr)
{
return VisitEXPR(pExpr);
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Visitors/ExpressionTreeRewriter.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Visitors/ExpressionTreeRewriter.cs
index 77ef6db2e4..6d94931305 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Visitors/ExpressionTreeRewriter.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Visitors/ExpressionTreeRewriter.cs
@@ -438,30 +438,30 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
switch (expr.Kind)
{
- case ExpressionKind.EK_LSHIFT: pdm = PREDEFMETH.PM_EXPRESSION_LEFTSHIFT; break;
- case ExpressionKind.EK_RSHIFT: pdm = PREDEFMETH.PM_EXPRESSION_RIGHTSHIFT; break;
- case ExpressionKind.EK_BITXOR: pdm = PREDEFMETH.PM_EXPRESSION_EXCLUSIVEOR; break;
- case ExpressionKind.EK_BITOR: pdm = PREDEFMETH.PM_EXPRESSION_OR; break;
- case ExpressionKind.EK_BITAND: pdm = PREDEFMETH.PM_EXPRESSION_AND; break;
- case ExpressionKind.EK_LOGAND: pdm = PREDEFMETH.PM_EXPRESSION_ANDALSO; break;
- case ExpressionKind.EK_LOGOR: pdm = PREDEFMETH.PM_EXPRESSION_ORELSE; break;
- case ExpressionKind.EK_STRINGEQ: pdm = PREDEFMETH.PM_EXPRESSION_EQUAL; break;
- case ExpressionKind.EK_EQ: pdm = PREDEFMETH.PM_EXPRESSION_EQUAL; break;
- case ExpressionKind.EK_STRINGNE: pdm = PREDEFMETH.PM_EXPRESSION_NOTEQUAL; break;
- case ExpressionKind.EK_NE: pdm = PREDEFMETH.PM_EXPRESSION_NOTEQUAL; break;
- case ExpressionKind.EK_GE: pdm = PREDEFMETH.PM_EXPRESSION_GREATERTHANOREQUAL; break;
- case ExpressionKind.EK_LE: pdm = PREDEFMETH.PM_EXPRESSION_LESSTHANOREQUAL; break;
- case ExpressionKind.EK_LT: pdm = PREDEFMETH.PM_EXPRESSION_LESSTHAN; break;
- case ExpressionKind.EK_GT: pdm = PREDEFMETH.PM_EXPRESSION_GREATERTHAN; break;
- case ExpressionKind.EK_MOD: pdm = PREDEFMETH.PM_EXPRESSION_MODULO; break;
- case ExpressionKind.EK_DIV: pdm = PREDEFMETH.PM_EXPRESSION_DIVIDE; break;
- case ExpressionKind.EK_MUL:
+ case ExpressionKind.LeftShirt: pdm = PREDEFMETH.PM_EXPRESSION_LEFTSHIFT; break;
+ case ExpressionKind.RightShift: pdm = PREDEFMETH.PM_EXPRESSION_RIGHTSHIFT; break;
+ case ExpressionKind.BitwiseExclusiveOr: pdm = PREDEFMETH.PM_EXPRESSION_EXCLUSIVEOR; break;
+ case ExpressionKind.BitwiseOr: pdm = PREDEFMETH.PM_EXPRESSION_OR; break;
+ case ExpressionKind.BitwiseAnd: pdm = PREDEFMETH.PM_EXPRESSION_AND; break;
+ case ExpressionKind.LogicalAnd: pdm = PREDEFMETH.PM_EXPRESSION_ANDALSO; break;
+ case ExpressionKind.LogicalOr: pdm = PREDEFMETH.PM_EXPRESSION_ORELSE; break;
+ case ExpressionKind.StringEq: pdm = PREDEFMETH.PM_EXPRESSION_EQUAL; break;
+ case ExpressionKind.Eq: pdm = PREDEFMETH.PM_EXPRESSION_EQUAL; break;
+ case ExpressionKind.StringNotEq: pdm = PREDEFMETH.PM_EXPRESSION_NOTEQUAL; break;
+ case ExpressionKind.NotEq: pdm = PREDEFMETH.PM_EXPRESSION_NOTEQUAL; break;
+ case ExpressionKind.GreaterThanOrEqual: pdm = PREDEFMETH.PM_EXPRESSION_GREATERTHANOREQUAL; break;
+ case ExpressionKind.LessThanOrEqual: pdm = PREDEFMETH.PM_EXPRESSION_LESSTHANOREQUAL; break;
+ case ExpressionKind.LessThan: pdm = PREDEFMETH.PM_EXPRESSION_LESSTHAN; break;
+ case ExpressionKind.GreaterThan: pdm = PREDEFMETH.PM_EXPRESSION_GREATERTHAN; break;
+ case ExpressionKind.Modulo: pdm = PREDEFMETH.PM_EXPRESSION_MODULO; break;
+ case ExpressionKind.Divide: pdm = PREDEFMETH.PM_EXPRESSION_DIVIDE; break;
+ case ExpressionKind.Multiply:
pdm = expr.isChecked() ? PREDEFMETH.PM_EXPRESSION_MULTIPLYCHECKED : PREDEFMETH.PM_EXPRESSION_MULTIPLY;
break;
- case ExpressionKind.EK_SUB:
+ case ExpressionKind.Subtract:
pdm = expr.isChecked() ? PREDEFMETH.PM_EXPRESSION_SUBTRACTCHECKED : PREDEFMETH.PM_EXPRESSION_SUBTRACT;
break;
- case ExpressionKind.EK_ADD:
+ case ExpressionKind.Add:
pdm = expr.isChecked() ? PREDEFMETH.PM_EXPRESSION_ADDCHECKED : PREDEFMETH.PM_EXPRESSION_ADD;
break;
@@ -546,11 +546,11 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
PREDEFMETH pdm;
switch (expr.Kind)
{
- case ExpressionKind.EK_UPLUS:
+ case ExpressionKind.UnaryPlus:
return Visit(expr.Child);
- case ExpressionKind.EK_BITNOT: pdm = PREDEFMETH.PM_EXPRESSION_NOT; break;
- case ExpressionKind.EK_LOGNOT: pdm = PREDEFMETH.PM_EXPRESSION_NOT; break;
- case ExpressionKind.EK_NEG:
+ case ExpressionKind.BitwiseNot: pdm = PREDEFMETH.PM_EXPRESSION_NOT; break;
+ case ExpressionKind.LogicalNot: pdm = PREDEFMETH.PM_EXPRESSION_NOT; break;
+ case ExpressionKind.Negate:
pdm = expr.isChecked() ? PREDEFMETH.PM_EXPRESSION_NEGATECHECKED : PREDEFMETH.PM_EXPRESSION_NEGATE;
break;
default:
@@ -566,7 +566,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
Expr op = Visit(pOriginalOperator);
if (pOriginalOperator.Type.IsNullableType() && pOriginalOperator.Type.StripNubs().isEnumType())
{
- Debug.Assert(pOperator.Kind == ExpressionKind.EK_BITNOT); // The only built-in unary operator defined on nullable enum.
+ Debug.Assert(pOperator.Kind == ExpressionKind.BitwiseNot); // The only built-in unary operator defined on nullable enum.
CType underlyingType = pOriginalOperator.Type.StripNubs().underlyingEnumType();
CType nullableType = GetSymbolLoader().GetTypeManager().GetNullable(underlyingType);
op = GenerateCall(PREDEFMETH.PM_EXPRESSION_CONVERT, op, CreateTypeOf(nullableType));
@@ -588,35 +588,35 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
switch (expr.Kind)
{
- case ExpressionKind.EK_LOGOR: pdm = PREDEFMETH.PM_EXPRESSION_ORELSE_USER_DEFINED; break;
- case ExpressionKind.EK_LOGAND: pdm = PREDEFMETH.PM_EXPRESSION_ANDALSO_USER_DEFINED; break;
- case ExpressionKind.EK_LSHIFT: pdm = PREDEFMETH.PM_EXPRESSION_LEFTSHIFT_USER_DEFINED; break;
- case ExpressionKind.EK_RSHIFT: pdm = PREDEFMETH.PM_EXPRESSION_RIGHTSHIFT_USER_DEFINED; break;
- case ExpressionKind.EK_BITXOR: pdm = PREDEFMETH.PM_EXPRESSION_EXCLUSIVEOR_USER_DEFINED; break;
- case ExpressionKind.EK_BITOR: pdm = PREDEFMETH.PM_EXPRESSION_OR_USER_DEFINED; break;
- case ExpressionKind.EK_BITAND: pdm = PREDEFMETH.PM_EXPRESSION_AND_USER_DEFINED; break;
- case ExpressionKind.EK_MOD: pdm = PREDEFMETH.PM_EXPRESSION_MODULO_USER_DEFINED; break;
- case ExpressionKind.EK_DIV: pdm = PREDEFMETH.PM_EXPRESSION_DIVIDE_USER_DEFINED; break;
- case ExpressionKind.EK_STRINGEQ:
- case ExpressionKind.EK_STRINGNE:
- case ExpressionKind.EK_DELEGATEEQ:
- case ExpressionKind.EK_DELEGATENE:
- case ExpressionKind.EK_EQ:
- case ExpressionKind.EK_NE:
- case ExpressionKind.EK_GE:
- case ExpressionKind.EK_GT:
- case ExpressionKind.EK_LE:
- case ExpressionKind.EK_LT:
+ case ExpressionKind.LogicalOr: pdm = PREDEFMETH.PM_EXPRESSION_ORELSE_USER_DEFINED; break;
+ case ExpressionKind.LogicalAnd: pdm = PREDEFMETH.PM_EXPRESSION_ANDALSO_USER_DEFINED; break;
+ case ExpressionKind.LeftShirt: pdm = PREDEFMETH.PM_EXPRESSION_LEFTSHIFT_USER_DEFINED; break;
+ case ExpressionKind.RightShift: pdm = PREDEFMETH.PM_EXPRESSION_RIGHTSHIFT_USER_DEFINED; break;
+ case ExpressionKind.BitwiseExclusiveOr: pdm = PREDEFMETH.PM_EXPRESSION_EXCLUSIVEOR_USER_DEFINED; break;
+ case ExpressionKind.BitwiseOr: pdm = PREDEFMETH.PM_EXPRESSION_OR_USER_DEFINED; break;
+ case ExpressionKind.BitwiseAnd: pdm = PREDEFMETH.PM_EXPRESSION_AND_USER_DEFINED; break;
+ case ExpressionKind.Modulo: pdm = PREDEFMETH.PM_EXPRESSION_MODULO_USER_DEFINED; break;
+ case ExpressionKind.Divide: pdm = PREDEFMETH.PM_EXPRESSION_DIVIDE_USER_DEFINED; break;
+ case ExpressionKind.StringEq:
+ case ExpressionKind.StringNotEq:
+ case ExpressionKind.DelegateEq:
+ case ExpressionKind.DelegateNotEq:
+ case ExpressionKind.Eq:
+ case ExpressionKind.NotEq:
+ case ExpressionKind.GreaterThanOrEqual:
+ case ExpressionKind.GreaterThan:
+ case ExpressionKind.LessThanOrEqual:
+ case ExpressionKind.LessThan:
return GenerateUserDefinedComparisonOperator(expr);
- case ExpressionKind.EK_DELEGATESUB:
- case ExpressionKind.EK_SUB:
+ case ExpressionKind.DelegateSubtract:
+ case ExpressionKind.Subtract:
pdm = expr.isChecked() ? PREDEFMETH.PM_EXPRESSION_SUBTRACTCHECKED_USER_DEFINED : PREDEFMETH.PM_EXPRESSION_SUBTRACT_USER_DEFINED;
break;
- case ExpressionKind.EK_DELEGATEADD:
- case ExpressionKind.EK_ADD:
+ case ExpressionKind.DelegateAdd:
+ case ExpressionKind.Add:
pdm = expr.isChecked() ? PREDEFMETH.PM_EXPRESSION_ADDCHECKED_USER_DEFINED : PREDEFMETH.PM_EXPRESSION_ADD_USER_DEFINED;
break;
- case ExpressionKind.EK_MUL:
+ case ExpressionKind.Multiply:
pdm = expr.isChecked() ? PREDEFMETH.PM_EXPRESSION_MULTIPLYCHECKED_USER_DEFINED : PREDEFMETH.PM_EXPRESSION_MULTIPLY_USER_DEFINED;
break;
default:
@@ -627,11 +627,11 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
Expr udcall = expr.OptionalUserDefinedCall;
if (udcall != null)
{
- Debug.Assert(udcall.Kind == ExpressionKind.EK_CALL || udcall.Kind == ExpressionKind.EK_USERLOGOP);
+ Debug.Assert(udcall.Kind == ExpressionKind.Call || udcall.Kind == ExpressionKind.UserLogicalOp);
if (udcall is ExprCall ascall)
{
ExprList args = (ExprList)ascall.OptionalArguments;
- Debug.Assert(args.OptionalNextListNode.Kind != ExpressionKind.EK_LIST);
+ Debug.Assert(args.OptionalNextListNode.Kind != ExpressionKind.List);
p1 = args.OptionalElement;
p2 = args.OptionalNextListNode;
}
@@ -640,7 +640,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
ExprUserLogicalOp userLogOp = udcall as ExprUserLogicalOp;
Debug.Assert(userLogOp != null);
ExprList args = (ExprList)userLogOp.OperatorCall.OptionalArguments;
- Debug.Assert(args.OptionalNextListNode.Kind != ExpressionKind.EK_LIST);
+ Debug.Assert(args.OptionalNextListNode.Kind != ExpressionKind.List);
p1 = ((ExprWrap)args.OptionalElement).OptionalExpression;
p2 = args.OptionalNextListNode;
}
@@ -652,7 +652,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
Expr call = GenerateCall(pdm, p1, p2, methodInfo);
// Delegate add/subtract generates a call to Combine/Remove, which returns System.Delegate,
// not the operand delegate CType. We must cast to the delegate CType.
- if (expr.Kind == ExpressionKind.EK_DELEGATESUB || expr.Kind == ExpressionKind.EK_DELEGATEADD)
+ if (expr.Kind == ExpressionKind.DelegateSubtract || expr.Kind == ExpressionKind.DelegateAdd)
{
Expr pTypeOf = CreateTypeOf(expr.Type);
return GenerateCall(PREDEFMETH.PM_EXPRESSION_CONVERT, call, pTypeOf);
@@ -666,7 +666,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
Debug.Assert(alwaysRewrite || currentAnonMeth != null);
PREDEFMETH pdm;
Expr arg = expr.Child;
- ExprCall call = expr.OptionalUserDefinedCall;
+ ExprCall call = (ExprCall)expr.OptionalUserDefinedCall;
if (call != null)
{
// Use the actual argument of the call; it may contain user-defined
@@ -674,26 +674,26 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
// argument stashed away in the left child of the operator.
arg = call.OptionalArguments;
}
- Debug.Assert(arg != null && arg.Kind != ExpressionKind.EK_LIST);
+ Debug.Assert(arg != null && arg.Kind != ExpressionKind.List);
switch (expr.Kind)
{
- case ExpressionKind.EK_TRUE:
- case ExpressionKind.EK_FALSE:
+ case ExpressionKind.True:
+ case ExpressionKind.False:
return Visit(call);
- case ExpressionKind.EK_UPLUS:
+ case ExpressionKind.UnaryPlus:
pdm = PREDEFMETH.PM_EXPRESSION_UNARYPLUS_USER_DEFINED;
break;
- case ExpressionKind.EK_BITNOT: pdm = PREDEFMETH.PM_EXPRESSION_NOT_USER_DEFINED; break;
- case ExpressionKind.EK_LOGNOT: pdm = PREDEFMETH.PM_EXPRESSION_NOT_USER_DEFINED; break;
- case ExpressionKind.EK_DECIMALNEG:
- case ExpressionKind.EK_NEG:
+ case ExpressionKind.BitwiseNot: pdm = PREDEFMETH.PM_EXPRESSION_NOT_USER_DEFINED; break;
+ case ExpressionKind.LogicalNot: pdm = PREDEFMETH.PM_EXPRESSION_NOT_USER_DEFINED; break;
+ case ExpressionKind.DecimalNegate:
+ case ExpressionKind.Negate:
pdm = expr.isChecked() ? PREDEFMETH.PM_EXPRESSION_NEGATECHECKED_USER_DEFINED : PREDEFMETH.PM_EXPRESSION_NEGATE_USER_DEFINED;
break;
- case ExpressionKind.EK_INC:
- case ExpressionKind.EK_DEC:
- case ExpressionKind.EK_DECIMALINC:
- case ExpressionKind.EK_DECIMALDEC:
+ case ExpressionKind.Inc:
+ case ExpressionKind.Dec:
+ case ExpressionKind.DecimalInc:
+ case ExpressionKind.DecimalDec:
pdm = PREDEFMETH.PM_EXPRESSION_CALL;
break;
@@ -703,8 +703,8 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
Expr op = Visit(arg);
Expr methodInfo = GetExprFactory().CreateMethodInfo(expr.UserDefinedCallMethod);
- if (expr.Kind == ExpressionKind.EK_INC || expr.Kind == ExpressionKind.EK_DEC ||
- expr.Kind == ExpressionKind.EK_DECIMALINC || expr.Kind == ExpressionKind.EK_DECIMALDEC)
+ if (expr.Kind == ExpressionKind.Inc || expr.Kind == ExpressionKind.Dec ||
+ expr.Kind == ExpressionKind.DecimalInc || expr.Kind == ExpressionKind.DecimalDec)
{
return GenerateCall(pdm, null, methodInfo, GenerateParamsArray(op, PredefinedType.PT_EXPRESSION));
}
@@ -719,16 +719,16 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
switch (expr.Kind)
{
- case ExpressionKind.EK_STRINGEQ: pdm = PREDEFMETH.PM_EXPRESSION_EQUAL_USER_DEFINED; break;
- case ExpressionKind.EK_STRINGNE: pdm = PREDEFMETH.PM_EXPRESSION_NOTEQUAL_USER_DEFINED; break;
- case ExpressionKind.EK_DELEGATEEQ: pdm = PREDEFMETH.PM_EXPRESSION_EQUAL_USER_DEFINED; break;
- case ExpressionKind.EK_DELEGATENE: pdm = PREDEFMETH.PM_EXPRESSION_NOTEQUAL_USER_DEFINED; break;
- case ExpressionKind.EK_EQ: pdm = PREDEFMETH.PM_EXPRESSION_EQUAL_USER_DEFINED; break;
- case ExpressionKind.EK_NE: pdm = PREDEFMETH.PM_EXPRESSION_NOTEQUAL_USER_DEFINED; break;
- case ExpressionKind.EK_LE: pdm = PREDEFMETH.PM_EXPRESSION_LESSTHANOREQUAL_USER_DEFINED; break;
- case ExpressionKind.EK_LT: pdm = PREDEFMETH.PM_EXPRESSION_LESSTHAN_USER_DEFINED; break;
- case ExpressionKind.EK_GE: pdm = PREDEFMETH.PM_EXPRESSION_GREATERTHANOREQUAL_USER_DEFINED; break;
- case ExpressionKind.EK_GT: pdm = PREDEFMETH.PM_EXPRESSION_GREATERTHAN_USER_DEFINED; break;
+ case ExpressionKind.StringEq: pdm = PREDEFMETH.PM_EXPRESSION_EQUAL_USER_DEFINED; break;
+ case ExpressionKind.StringNotEq: pdm = PREDEFMETH.PM_EXPRESSION_NOTEQUAL_USER_DEFINED; break;
+ case ExpressionKind.DelegateEq: pdm = PREDEFMETH.PM_EXPRESSION_EQUAL_USER_DEFINED; break;
+ case ExpressionKind.DelegateNotEq: pdm = PREDEFMETH.PM_EXPRESSION_NOTEQUAL_USER_DEFINED; break;
+ case ExpressionKind.Eq: pdm = PREDEFMETH.PM_EXPRESSION_EQUAL_USER_DEFINED; break;
+ case ExpressionKind.NotEq: pdm = PREDEFMETH.PM_EXPRESSION_NOTEQUAL_USER_DEFINED; break;
+ case ExpressionKind.LessThanOrEqual: pdm = PREDEFMETH.PM_EXPRESSION_LESSTHANOREQUAL_USER_DEFINED; break;
+ case ExpressionKind.LessThan: pdm = PREDEFMETH.PM_EXPRESSION_LESSTHAN_USER_DEFINED; break;
+ case ExpressionKind.GreaterThanOrEqual: pdm = PREDEFMETH.PM_EXPRESSION_GREATERTHANOREQUAL_USER_DEFINED; break;
+ case ExpressionKind.GreaterThan: pdm = PREDEFMETH.PM_EXPRESSION_GREATERTHAN_USER_DEFINED; break;
default:
throw Error.InternalCompilerError();
}
@@ -738,7 +738,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
ExprCall udcall = (ExprCall)expr.OptionalUserDefinedCall;
ExprList args = (ExprList)udcall.OptionalArguments;
- Debug.Assert(args.OptionalNextListNode.Kind != ExpressionKind.EK_LIST);
+ Debug.Assert(args.OptionalNextListNode.Kind != ExpressionKind.List);
p1 = args.OptionalElement;
p2 = args.OptionalNextListNode;
@@ -1037,7 +1037,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
ExprList origArgs = (ExprList)expr.OptionalArguments;
Debug.Assert(origArgs != null);
Expr target = origArgs.OptionalElement;
- Debug.Assert(origArgs.OptionalNextListNode.Kind == ExpressionKind.EK_FUNCPTR);
+ Debug.Assert(origArgs.OptionalNextListNode.Kind == ExpressionKind.FunctionPointer);
ExprFuncPtr funcptr = (ExprFuncPtr)origArgs.OptionalNextListNode;
Debug.Assert(funcptr != null);
MethodSymbol createDelegateMethod = GetPreDefMethod(PREDEFMETH.PM_METHODINFO_CREATEDELEGATE_TYPE_OBJECT);
@@ -1078,7 +1078,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
Expr newIndex = it.Current();
if (newIndex.Type != intType)
{
- ExprClass exprType = expressionFactory.CreateClass(intType, null, null);
+ ExprClass exprType = expressionFactory.CreateClass(intType, null);
newIndex = expressionFactory.CreateCast(EXPRFLAG.EXF_INDEXEXPR, exprType, newIndex);
newIndex.Flags |= EXPRFLAG.EXF_CHECKOVERFLOW;
}
@@ -1174,7 +1174,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
int parameterCount = ExpressionIterator.Count(args);
AggregateType paramsArrayElementType = GetSymbolLoader().GetOptPredefTypeErr(pt, true);
- ArrayType paramsArrayType = GetSymbolLoader().GetTypeManager().GetArray(paramsArrayElementType, 1);
+ ArrayType paramsArrayType = GetSymbolLoader().GetTypeManager().GetArray(paramsArrayElementType, 1, true);
ExprConstant paramsArrayArg = GetExprFactory().CreateIntegerConstant(parameterCount);
ExprArrayInit arrayInit = GetExprFactory().CreateArrayInit(EXPRFLAG.EXF_CANTBENULL, paramsArrayType, args, paramsArrayArg, null);
arrayInit.DimensionSize = parameterCount;
@@ -1204,7 +1204,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
}
AggregateType paramsArrayElementType = GetSymbolLoader().GetOptPredefTypeErr(pt, true);
- ArrayType paramsArrayType = GetSymbolLoader().GetTypeManager().GetArray(paramsArrayElementType, 1);
+ ArrayType paramsArrayType = GetSymbolLoader().GetTypeManager().GetArray(paramsArrayElementType, 1, true);
ExprConstant paramsArrayArg = GetExprFactory().CreateIntegerConstant(methodCount);
ExprArrayInit arrayInit = GetExprFactory().CreateArrayInit(EXPRFLAG.EXF_CANTBENULL, paramsArrayType, newArgs, paramsArrayArg, null);
arrayInit.DimensionSize = methodCount;
@@ -1285,7 +1285,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
pCall.Type.isDelegateType() &&
pCall.OptionalArguments != null &&
pCall.OptionalArguments is ExprList list &&
- list.OptionalNextListNode.Kind == ExpressionKind.EK_FUNCPTR;
+ list.OptionalNextListNode.Kind == ExpressionKind.FunctionPointer;
}
private static bool isEnumToDecimalConversion(CType argtype, CType desttype)
{
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ZeroInitialize.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ZeroInitialize.cs
index e561ba04bd..1de32f2c70 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ZeroInitialize.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ZeroInitialize.cs
@@ -4,8 +4,13 @@
namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
- internal sealed class ExprZeroInit : Expr
+ internal sealed class ExprZeroInit : ExprWithType
{
+ public ExprZeroInit(CType type)
+ : base(ExpressionKind.ZeroInit, type)
+ {
+ }
+
public Expr OptionalArgument { get; set; }
public Expr OptionalConstructorCall { get; set; }
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/AggregateType.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/AggregateType.cs
index 98b50a3f82..88ece16b00 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/AggregateType.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/AggregateType.cs
@@ -19,15 +19,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
private TypeArray _pTypeArgsAll; // includes args from outer types
private AggregateSymbol _pOwningAggregate;
-#if ! CSEE // The EE can't cache these since the AGGSYMs may change as things are imported.
private AggregateType _baseType; // This is the result of calling SubstTypeArray on the aggregate's baseClass.
private TypeArray _ifacesAll; // This is the result of calling SubstTypeArray on the aggregate's ifacesAll.
private TypeArray _winrtifacesAll; //This is the list of collection interfaces implemented by a WinRT object.
-#else // !CSEE
-
- public short proxyOID; // oid for the managed proxy in the host running inside the debugee
- public short typeConverterID;
-#endif // !CSEE
public bool fConstraintsChecked; // Have the constraints been checked yet?
public bool fConstraintError; // Did the constraints check produce an error?
@@ -51,21 +45,8 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
public AggregateType GetBaseClass()
{
-#if CSEE
- AggregateType atsBase = getAggregate().GetBaseClass();
- if (!atsBase || GetTypeArgsAll().size == 0 || atsBase.GetTypeArgsAll().size == 0)
- return atsBase;
-
- return getAggregate().GetTypeManager().SubstType(atsBase, GetTypeArgsAll()).AsAggregateType();
-#else // !CSEE
-
- if (_baseType == null)
- {
- _baseType = getAggregate().GetTypeManager().SubstType(getAggregate().GetBaseClass(), GetTypeArgsAll()) as AggregateType;
- }
-
- return _baseType;
-#endif // !CSEE
+ return _baseType ??
+ (_baseType = getAggregate().GetTypeManager().SubstType(getAggregate().GetBaseClass(), GetTypeArgsAll()) as AggregateType);
}
public void SetTypeArgsThis(TypeArray pTypeArgsThis)
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/ArrayType.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/ArrayType.cs
index 9e4d5a14ac..3ac3487126 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/ArrayType.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/ArrayType.cs
@@ -13,6 +13,8 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
// rank of the array. zero means unknown rank int [?].
public int rank;
+ public bool IsSZArray { get; set; }
+
public CType GetElementType() { return _pElementType; }
public void SetElementType(CType pType) { _pElementType = pType; }
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/PredefinedTypes.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/PredefinedTypes.cs
index dd5b42cc37..4c8a7b6da5 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/PredefinedTypes.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/PredefinedTypes.cs
@@ -51,12 +51,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
_runtimeBinderSymbolTable = symtable;
Debug.Assert(_pBSymmgr != null);
-
-#if !CSEE
Debug.Assert(_predefSyms == null);
-#else // CSEE
- Debug.Assert(predefSyms == null || aidMsCorLib != KAID.kaidNil);
-#endif // CSEE
if (_aidMsCorLib == KAID.kaidNil)
{
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/Type.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/Type.cs
index d5c93cb81b..3a10d38b05 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/Type.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/Type.cs
@@ -10,7 +10,7 @@ using Microsoft.CSharp.RuntimeBinder.Syntax;
namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
- internal abstract class CType : ITypeOrNamespace
+ internal abstract class CType
{
private TypeKind _typeKind;
private Name _pName;
@@ -97,14 +97,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
case TypeKind.TK_ArrayType:
ArrayType a = src.AsArrayType();
Type elementType = a.GetElementType().AssociatedSystemType;
- if (a.rank == 1)
- {
- result = elementType.MakeArrayType();
- }
- else
- {
- result = elementType.MakeArrayType(a.rank);
- }
+ result = a.IsSZArray ? elementType.MakeArrayType() : elementType.MakeArrayType(a.rank);
break;
case TypeKind.TK_NullableType:
@@ -197,14 +190,6 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
return uninstantiatedType;
}
- // ITypeOrNamespace
- public bool IsType => true;
-
- public bool IsNamespace => false;
-
- public AssemblyQualifiedNamespaceSymbol AsNamespace() { throw Error.InternalCompilerError(); }
- public CType AsType() { return this; }
-
public TypeKind GetTypeKind() { return _typeKind; }
public void SetTypeKind(TypeKind kind) { _typeKind = kind; }
@@ -316,14 +301,6 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
_fHasErrors = typePar.HasErrors();
_fUnres = typePar.IsUnresolved();
-#if CSEE
-
- this.typeRes = this;
- if (!this.fUnres)
- this.tsRes = ktsImportMax;
- this.fDirty = typePar.fDirty;
- this.tsDirty = typePar.tsDirty;
-#endif // CSEE
}
public bool HasErrors()
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/TypeFactory.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/TypeFactory.cs
index c28e52831a..afe0344c56 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/TypeFactory.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/TypeFactory.cs
@@ -34,15 +34,6 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
type.SetTypeParameterSymbol(pSymbol);
type.SetUnresolved(pSymbol.parent != null && pSymbol.parent.IsAggregateSymbol() && pSymbol.parent.AsAggregateSymbol().IsUnresolved());
type.SetName(pSymbol.name);
-
-#if CSEE
- type.typeRes = type;
- if (!type.IsUnresolved())
- {
- type.tsRes = ktsImportMax;
- }
-#endif // CSEE
-
Debug.Assert(pSymbol.GetTypeParameterType() == null);
pSymbol.SetTypeParameterType(type);
@@ -112,12 +103,13 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
}
// Derived types - parent is base type
- public ArrayType CreateArray(Name name, CType pElementType, int rank)
+ public ArrayType CreateArray(Name name, CType pElementType, int rank, bool isSZArray)
{
ArrayType type = new ArrayType();
type.SetName(name);
type.rank = rank;
+ type.IsSZArray = isSZArray;
type.SetElementType(pElementType);
type.SetTypeKind(TypeKind.TK_ArrayType);
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/TypeManager.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/TypeManager.cs
index 2f14806d0a..7c7fde7c80 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/TypeManager.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Types/TypeManager.cs
@@ -169,15 +169,24 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
}
}
- public ArrayType GetArray(CType elementType, int args)
+ public ArrayType GetArray(CType elementType, int args, bool isSZArray)
{
Name name;
Debug.Assert(args > 0 && args < 32767);
+ Debug.Assert(args == 1 || !isSZArray);
switch (args)
{
case 1:
+ if (isSZArray)
+ {
+ goto case 2;
+ }
+ else
+ {
+ goto default;
+ }
case 2:
name = NameManager.GetPredefinedName(PredefinedName.PN_ARRAY0 + args);
break;
@@ -191,7 +200,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
if (pArray == null)
{
// No existing array symbol. Create a new one.
- pArray = _typeFactory.CreateArray(name, elementType, args);
+ pArray = _typeFactory.CreateArray(name, elementType, args, isSZArray);
pArray.InitFromParent();
_typeTable.InsertArray(name, elementType, pArray);
@@ -236,19 +245,6 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
Debug.Assert(!pAggregate.fConstraintsChecked && !pAggregate.fConstraintError);
pAggregate.SetErrors(false);
-#if CSEE
-
- SpecializedSymbolCreationEE* pSymCreate = static_cast<SpecializedSymbolCreationEE*>(m_BSymmgr.GetSymFactory().m_pSpecializedSymbolCreation);
- AggregateSymbolExtra* pExtra = pSymCreate.GetHashTable().GetElement(agg).AsAggregateSymbolExtra();
- pAggregate.typeRes = pAggregate;
- if (!pAggregate.IsUnresolved())
- {
- pAggregate.tsRes = ktsImportMax;
- }
- pAggregate.fDirty = pExtra.IsDirty() || pAggregate.IsUnresolved();
- pAggregate.tsDirty = pExtra.GetLastComputedDirtyBit();
-#endif // CSEE
-
_typeTable.InsertAggregate(name, agg, pAggregate);
// If we have a generic type definition, then we need to set the
@@ -567,7 +563,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
case TypeKind.TK_ArrayType:
typeDst = SubstTypeCore(typeSrc = type.AsArrayType().GetElementType(), pctx);
- return (typeDst == typeSrc) ? type : GetArray(typeDst, type.AsArrayType().rank);
+ return (typeDst == typeSrc) ? type : GetArray(typeDst, type.AsArrayType().rank, type.AsArrayType().IsSZArray);
case TypeKind.TK_PointerType:
typeDst = SubstTypeCore(typeSrc = type.AsPointerType().GetReferentType(), pctx);
@@ -703,7 +699,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
return false;
case TypeKind.TK_ArrayType:
- if (typeDst.GetTypeKind() != TypeKind.TK_ArrayType || typeDst.AsArrayType().rank != typeSrc.AsArrayType().rank)
+ if (typeDst.GetTypeKind() != TypeKind.TK_ArrayType || typeDst.AsArrayType().rank != typeSrc.AsArrayType().rank || typeDst.AsArrayType().IsSZArray != typeSrc.AsArrayType().IsSZArray)
return false;
goto LCheckBases;
@@ -1282,7 +1278,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics
CType intermediateType;
if (GetBestAccessibleType(semanticChecker, bindingContext, elementType, out intermediateType))
{
- typeDst = this.GetArray(intermediateType, typeSrc.rank);
+ typeDst = this.GetArray(intermediateType, typeSrc.rank, typeSrc.IsSZArray);
Debug.Assert(semanticChecker.CheckTypeAccess(typeDst, bindingContext.ContextForMemberLookup()));
return true;
diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/SymbolTable.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/SymbolTable.cs
index 7875628434..5064f3c107 100644
--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/SymbolTable.cs
+++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/SymbolTable.cs
@@ -819,7 +819,15 @@ namespace Microsoft.CSharp.RuntimeBinder
else if (t.IsArray)
{
// Now we return an array of nesting level corresponding to the rank.
- ctype = _typeManager.GetArray(GetCTypeFromType(t.GetElementType()), t.GetArrayRank());
+ ctype = _typeManager.GetArray(
+ GetCTypeFromType(t.GetElementType()),
+ t.GetArrayRank(),
+#if netcoreapp
+ t.IsSZArray
+#else
+ t.GetElementType().MakeArrayType() == t
+#endif
+ );
return ctype;
}
else if (t.IsPointer)
diff --git a/src/Microsoft.CSharp/tests/ArrayHandling.cs b/src/Microsoft.CSharp/tests/ArrayHandling.cs
new file mode 100644
index 0000000000..057ab09f72
--- /dev/null
+++ b/src/Microsoft.CSharp/tests/ArrayHandling.cs
@@ -0,0 +1,55 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Xunit;
+
+namespace Microsoft.CSharp.RuntimeBinder.Tests
+{
+ public class ArrayHandling
+ {
+ [Fact]
+ public void SingleRankNonSZArray()
+ {
+ dynamic d = Array.CreateInstance(typeof(int), new[] { 8 }, new[] { -2 });
+ d.SetValue(32, 3);
+ d.SetValue(28, -1);
+ Assert.Equal(32, d.GetValue(3));
+ Assert.Equal(28, d.GetValue(-1));
+ }
+
+ [Fact]
+ public void SingleRankNonSZArrayIndexed()
+ {
+ dynamic d = Array.CreateInstance(typeof(int), new[] { 8 }, new[] { -2 });
+ d[3] = 32;
+ d[-1] = 28;
+ Assert.Equal(32, d[3]);
+ Assert.Equal(28, d[-1]);
+ }
+
+ [Fact]
+ public void ArrayTypeNames()
+ {
+ dynamic d = Array.CreateInstance(typeof(int), new[] { 8 }, new[] { -2 });
+ RuntimeBinderException ex = Assert.Throws<RuntimeBinderException>(() => { string s = d; });
+ Assert.Contains("int[*]", ex.Message);
+
+ d = new int[3];
+ ex = Assert.Throws<RuntimeBinderException>(() => { string s = d; });
+ Assert.Contains("int[]", ex.Message);
+
+ d = new int[3, 2, 1];
+ ex = Assert.Throws<RuntimeBinderException>(() => { string s = d; });
+ Assert.Contains("int[,,]", ex.Message);
+
+ d = Array.CreateInstance(typeof(int), new[] { 3, 2, 1 }, new[] { -2, 2, -0 });
+ ex = Assert.Throws<RuntimeBinderException>(() => { string s = d; });
+ Assert.Contains("int[,,]", ex.Message);
+
+ }
+ }
+}
diff --git a/src/Microsoft.CSharp/tests/Microsoft.CSharp.Tests.csproj b/src/Microsoft.CSharp/tests/Microsoft.CSharp.Tests.csproj
index a0a1b70cfa..e6487e881e 100644
--- a/src/Microsoft.CSharp/tests/Microsoft.CSharp.Tests.csproj
+++ b/src/Microsoft.CSharp/tests/Microsoft.CSharp.Tests.csproj
@@ -10,6 +10,7 @@
<Compile Include="$(CommonTestPath)\System\Runtime\Serialization\Formatters\BinaryFormatterHelpers.cs">
<Link>Common\System\Runtime\Serialization\Formatters\BinaryFormatterHelpers.cs</Link>
</Compile>
+ <Compile Include="ArrayHandling.cs" />
<Compile Include="CSharpArgumentInfoTests.cs" />
<Compile Include="EnumArithmeticTests.cs" />
<Compile Include="IntegerBinaryOperationTests.cs" />
@@ -18,4 +19,4 @@
<Compile Include="RuntimeBinderTests.cs" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
-</Project>
+</Project> \ No newline at end of file
diff --git a/src/Microsoft.Win32.Registry.AccessControl/src/Microsoft/Win32/RegistryAclExtensions.cs b/src/Microsoft.Win32.Registry.AccessControl/src/Microsoft/Win32/RegistryAclExtensions.cs
index b8527b0d21..7b1ac87a0a 100644
--- a/src/Microsoft.Win32.Registry.AccessControl/src/Microsoft/Win32/RegistryAclExtensions.cs
+++ b/src/Microsoft.Win32.Registry.AccessControl/src/Microsoft/Win32/RegistryAclExtensions.cs
@@ -2,24 +2,34 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
+using System;
using System.Security.AccessControl;
namespace Microsoft.Win32
{
public static class RegistryAclExtensions
{
- public static RegistrySecurity GetAccessControl(RegistryKey key)
+ public static RegistrySecurity GetAccessControl(this RegistryKey key)
{
+ if (key == null)
+ throw new ArgumentNullException(nameof(key));
+
return key.GetAccessControl();
}
- public static RegistrySecurity GetAccessControl(RegistryKey key, AccessControlSections includeSections)
+ public static RegistrySecurity GetAccessControl(this RegistryKey key, AccessControlSections includeSections)
{
+ if (key == null)
+ throw new ArgumentNullException(nameof(key));
+
return key.GetAccessControl(includeSections);
}
- public static void SetAccessControl(RegistryKey key, RegistrySecurity registrySecurity)
+ public static void SetAccessControl(this RegistryKey key, RegistrySecurity registrySecurity)
{
+ if (key == null)
+ throw new ArgumentNullException(nameof(key));
+
key.SetAccessControl(registrySecurity);
}
}
diff --git a/src/Microsoft.Win32.Registry.AccessControl/tests/RegistryAclExtensionsTests.cs b/src/Microsoft.Win32.Registry.AccessControl/tests/RegistryAclExtensionsTests.cs
index c39da9cc29..90fd2c6d0f 100644
--- a/src/Microsoft.Win32.Registry.AccessControl/tests/RegistryAclExtensionsTests.cs
+++ b/src/Microsoft.Win32.Registry.AccessControl/tests/RegistryAclExtensionsTests.cs
@@ -12,7 +12,14 @@ namespace Microsoft.Win32
[Fact]
public void GetAccessControl_NullArgument_Throws()
{
- Assert.Throws<NullReferenceException>(() => RegistryAclExtensions.GetAccessControl(null));
+ Assert.Throws<ArgumentNullException>(() => RegistryAclExtensions.GetAccessControl(null));
+ Assert.Throws<ArgumentNullException>(() => RegistryAclExtensions.GetAccessControl(null, System.Security.AccessControl.AccessControlSections.All));
+ }
+
+ [Fact]
+ public void SetAccessControl_NullArgument_Throws()
+ {
+ Assert.Throws<ArgumentNullException>(() => RegistryAclExtensions.SetAccessControl(null, new System.Security.AccessControl.RegistrySecurity()));
}
}
}
diff --git a/src/Microsoft.Win32.Registry/src/Microsoft.Win32.Registry.csproj b/src/Microsoft.Win32.Registry/src/Microsoft.Win32.Registry.csproj
index fdd4e8d759..3e79e544c5 100644
--- a/src/Microsoft.Win32.Registry/src/Microsoft.Win32.Registry.csproj
+++ b/src/Microsoft.Win32.Registry/src/Microsoft.Win32.Registry.csproj
@@ -105,6 +105,8 @@
<Reference Include="mscorlib" />
</ItemGroup>
<ItemGroup>
+ <Reference Include="System.Buffers" />
+ <Reference Include="System.Collections" />
<Reference Include="System.Diagnostics.Debug" />
<Reference Include="System.Diagnostics.Tools" />
<Reference Include="System.Resources.ResourceManager" />
diff --git a/src/Microsoft.Win32.Registry/src/Microsoft/Win32/RegistryKey.Windows.cs b/src/Microsoft.Win32.Registry/src/Microsoft/Win32/RegistryKey.Windows.cs
index 18ce665b88..0f69957aea 100644
--- a/src/Microsoft.Win32.Registry/src/Microsoft/Win32/RegistryKey.Windows.cs
+++ b/src/Microsoft.Win32.Registry/src/Microsoft/Win32/RegistryKey.Windows.cs
@@ -8,6 +8,7 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Security.AccessControl;
+using System.Buffers;
/*
Note on transaction support:
@@ -393,36 +394,45 @@ namespace Microsoft.Win32
return subkeys;
}
- private unsafe string[] InternalGetSubKeyNamesCore(int subkeys)
+ private string[] InternalGetSubKeyNamesCore(int subkeys)
{
- string[] names = new string[subkeys];
- char[] name = new char[MaxKeyLength + 1];
+ var names = new List<string>(subkeys);
+ char[] name = ArrayPool<char>.Shared.Rent(MaxKeyLength + 1);
- int namelen;
-
- fixed (char* namePtr = &name[0])
+ try
{
- for (int i = 0; i < subkeys; i++)
+ int result;
+ int nameLength = name.Length;
+
+ while ((result = Interop.Advapi32.RegEnumKeyEx(
+ _hkey,
+ names.Count,
+ name,
+ ref nameLength,
+ null,
+ null,
+ null,
+ null)) != Interop.Errors.ERROR_NO_MORE_ITEMS)
{
- namelen = name.Length; // Don't remove this. The API's doesn't work if this is not properly initialized.
- int ret = Interop.Advapi32.RegEnumKeyEx(_hkey,
- i,
- namePtr,
- ref namelen,
- null,
- null,
- null,
- null);
- if (ret != 0)
+ switch (result)
{
- Win32Error(ret, null);
+ case Interop.Errors.ERROR_SUCCESS:
+ names.Add(new string(name, 0, nameLength));
+ nameLength = name.Length;
+ break;
+ default:
+ // Throw the error
+ Win32Error(result, null);
+ break;
}
-
- names[i] = new string(namePtr);
}
}
+ finally
+ {
+ ArrayPool<char>.Shared.Return(name);
+ }
- return names;
+ return names.ToArray();
}
private int InternalValueCountCore()
@@ -453,37 +463,79 @@ namespace Microsoft.Win32
/// <returns>All value names.</returns>
private unsafe string[] GetValueNamesCore(int values)
{
- string[] names = new string[values];
- char[] name = new char[MaxValueLength + 1];
- int namelen;
+ var names = new List<string>(values);
- fixed (char* namePtr = &name[0])
+ // Names in the registry aren't usually very long, although they can go to as large
+ // as 16383 characters (MaxValueLength).
+ //
+ // Every call to RegEnumValue will allocate another buffer to get the data from
+ // NtEnumerateValueKey before copying it back out to our passed in buffer. This can
+ // add up quickly- we'll try to keep the memory pressure low and grow the buffer
+ // only if needed.
+
+ char[] name = ArrayPool<char>.Shared.Rent(100);
+
+ try
{
- for (int i = 0; i < values; i++)
+ int result;
+ int nameLength = name.Length;
+
+ while ((result = Interop.Advapi32.RegEnumValue(
+ _hkey,
+ names.Count,
+ name,
+ ref nameLength,
+ IntPtr.Zero,
+ null,
+ null,
+ null)) != Interop.Errors.ERROR_NO_MORE_ITEMS)
{
- namelen = name.Length;
-
- int ret = Interop.Advapi32.RegEnumValue(_hkey,
- i,
- namePtr,
- ref namelen,
- IntPtr.Zero,
- null,
- null,
- null);
-
- if (ret != 0)
+ switch (result)
{
- // ignore ERROR_MORE_DATA if we're querying HKEY_PERFORMANCE_DATA
- if (!(IsPerfDataKey() && ret == Interop.Errors.ERROR_MORE_DATA))
- Win32Error(ret, null);
+ // The size is only ever reported back correctly in the case
+ // of ERROR_SUCCESS. It will almost always be changed, however.
+ case Interop.Errors.ERROR_SUCCESS:
+ names.Add(new string(name, 0, nameLength));
+ break;
+ case Interop.Errors.ERROR_MORE_DATA:
+ if (IsPerfDataKey())
+ {
+ // Enumerating the values for Perf keys always returns
+ // ERROR_MORE_DATA, but has a valid name. Buffer does need
+ // to be big enough however. 8 characters is the largest
+ // known name. The size isn't returned, but the string is
+ // null terminated.
+ fixed (char* c = &name[0])
+ {
+ names.Add(new string(c));
+ }
+ }
+ else
+ {
+ char[] oldName = name;
+ int oldLength = oldName.Length;
+ name = null;
+ ArrayPool<char>.Shared.Return(oldName);
+ name = ArrayPool<char>.Shared.Rent(checked(oldLength * 2));
+ }
+ break;
+ default:
+ // Throw the error
+ Win32Error(result, null);
+ break;
}
- names[i] = new string(namePtr);
+ // Always set the name length back to the buffer size
+ nameLength = name.Length;
}
}
+ finally
+ {
+ if (name != null)
+ ArrayPool<char>.Shared.Return(name);
+ }
- return names;
+ return names.ToArray();
}
private object InternalGetValueCore(string name, object defaultValue, bool doNotExpand)
@@ -505,15 +557,15 @@ namespace Microsoft.Win32
byte[] blob = new byte[size];
while (Interop.Errors.ERROR_MORE_DATA == (r = Interop.Advapi32.RegQueryValueEx(_hkey, name, null, ref type, blob, ref sizeInput)))
{
- if (size == Int32.MaxValue)
+ if (size == int.MaxValue)
{
// ERROR_MORE_DATA was returned however we cannot increase the buffer size beyond Int32.MaxValue
Win32Error(r, name);
}
- else if (size > (Int32.MaxValue / 2))
+ else if (size > (int.MaxValue / 2))
{
// at this point in the loop "size * 2" would cause an overflow
- size = Int32.MaxValue;
+ size = int.MaxValue;
}
else
{
diff --git a/src/Microsoft.Win32.Registry/tests/RegistryKey/RegistryKey_GetValueNames.cs b/src/Microsoft.Win32.Registry/tests/RegistryKey/RegistryKey_GetValueNames.cs
index 804704e9f6..1bd1a1d651 100644
--- a/src/Microsoft.Win32.Registry/tests/RegistryKey/RegistryKey_GetValueNames.cs
+++ b/src/Microsoft.Win32.Registry/tests/RegistryKey/RegistryKey_GetValueNames.cs
@@ -62,7 +62,8 @@ namespace Microsoft.Win32.RegistryTests
public static void TestGetValueNamesForPerformanceData()
{
var rk = Registry.PerformanceData;
- int iNumValue = rk.GetValueNames().Length;
+ string[] names = rk.GetValueNames();
+ Assert.Equal(new string[] { "Global", "Costly" }, names);
}
}
}
diff --git a/src/Microsoft.XmlSerializer.Generator/Microsoft.XmlSerializer.Generator.sln b/src/Microsoft.XmlSerializer.Generator/Microsoft.XmlSerializer.Generator.sln
index 7cb1471b04..8245bf6092 100644
--- a/src/Microsoft.XmlSerializer.Generator/Microsoft.XmlSerializer.Generator.sln
+++ b/src/Microsoft.XmlSerializer.Generator/Microsoft.XmlSerializer.Generator.sln
@@ -1,38 +1,38 @@
-
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFCD}") = "Microsoft.XmlSerializer.Generator", "src\Microsoft.XmlSerializer.Generator.csproj", "{80958E8B-2FEB-4F95-83F9-825CA1ED26F8}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.XmlSerializer.Generator.Tests", "tests\Microsoft.XmlSerializer.Generator.Tests.csproj", "{0D1E2954-A5C7-4B8C-932A-31EB4A96A737}"
+ ProjectSection(ProjectDependencies) = postProject
+ {80958E8B-2FEB-4F95-83F9-825CA1ED26F8} = {80958E8B-2FEB-4F95-83F9-825CA1ED26F8}
+ EndProjectSection
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFCD}") = "Microsoft.XmlSerializer.Generator.Tests", "tests\Microsoft.XmlSerializer.Generator.Tests.csproj", "{0D1E2954-A5C7-4B8C-932A-31EB4A96A737}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.XmlSerializer.Generator", "src\Microsoft.XmlSerializer.Generator.csproj", "{80958E8B-2FEB-4F95-83F9-825CA1ED26F8}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{1A2F9F4A-A032-433E-B914-ADD5992BB178}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{E107E9C1-E893-4E87-987E-04EF0DCEAEFD}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
- netstandard-Debug|Any CPU = netstandard-Debug|Any CPU
- netstandard-Release|Any CPU = netstandard-Release|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {80958E8B-2FEB-4F95-83F9-825CA1ED26F8}.Debug|Any CPU.ActiveCfg = netstandard-Debug|Any CPU
- {80958E8B-2FEB-4F95-83F9-825CA1ED26F8}.Debug|Any CPU.Build.0 = netstandard-Debug|Any CPU
- {80958E8B-2FEB-4F95-83F9-825CA1ED26F8}.netstandard-Debug|Any CPU.ActiveCfg = netstandard-Debug|Any CPU
- {80958E8B-2FEB-4F95-83F9-825CA1ED26F8}.netstandard-Debug|Any CPU.Build.0 = netstandard-Debug|Any CPU
- {80958E8B-2FEB-4F95-83F9-825CA1ED26F8}.netstandard-Release|Any CPU.ActiveCfg = netstandard-Release|Any CPU
- {80958E8B-2FEB-4F95-83F9-825CA1ED26F8}.netstandard-Release|Any CPU.Build.0 = netstandard-Release|Any CPU
- {80958E8B-2FEB-4F95-83F9-825CA1ED26F8}.Release|Any CPU.ActiveCfg = netstandard-Release|Any CPU
- {80958E8B-2FEB-4F95-83F9-825CA1ED26F8}.Release|Any CPU.Build.0 = netstandard-Release|Any CPU
{0D1E2954-A5C7-4B8C-932A-31EB4A96A737}.Debug|Any CPU.ActiveCfg = netstandard-Debug|Any CPU
{0D1E2954-A5C7-4B8C-932A-31EB4A96A737}.Debug|Any CPU.Build.0 = netstandard-Debug|Any CPU
- {0D1E2954-A5C7-4B8C-932A-31EB4A96A737}.netstandard-Debug|Any CPU.ActiveCfg = netstandard-Debug|Any CPU
- {0D1E2954-A5C7-4B8C-932A-31EB4A96A737}.netstandard-Debug|Any CPU.Build.0 = netstandard-Debug|Any CPU
- {0D1E2954-A5C7-4B8C-932A-31EB4A96A737}.netstandard-Release|Any CPU.ActiveCfg = netstandard-Release|Any CPU
- {0D1E2954-A5C7-4B8C-932A-31EB4A96A737}.netstandard-Release|Any CPU.Build.0 = netstandard-Release|Any CPU
{0D1E2954-A5C7-4B8C-932A-31EB4A96A737}.Release|Any CPU.ActiveCfg = netstandard-Release|Any CPU
{0D1E2954-A5C7-4B8C-932A-31EB4A96A737}.Release|Any CPU.Build.0 = netstandard-Release|Any CPU
+ {80958E8B-2FEB-4F95-83F9-825CA1ED26F8}.Debug|Any CPU.ActiveCfg = netstandard-Debug|Any CPU
+ {80958E8B-2FEB-4F95-83F9-825CA1ED26F8}.Debug|Any CPU.Build.0 = netstandard-Debug|Any CPU
+ {80958E8B-2FEB-4F95-83F9-825CA1ED26F8}.Release|Any CPU.ActiveCfg = netstandard-Release|Any CPU
+ {80958E8B-2FEB-4F95-83F9-825CA1ED26F8}.Release|Any CPU.Build.0 = netstandard-Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {0D1E2954-A5C7-4B8C-932A-31EB4A96A737} = {1A2F9F4A-A032-433E-B914-ADD5992BB178}
+ {80958E8B-2FEB-4F95-83F9-825CA1ED26F8} = {E107E9C1-E893-4E87-987E-04EF0DCEAEFD}
+ EndGlobalSection
EndGlobal
diff --git a/src/Microsoft.XmlSerializer.Generator/src/Microsoft.XmlSerializer.Generator.csproj b/src/Microsoft.XmlSerializer.Generator/src/Microsoft.XmlSerializer.Generator.csproj
index cfc72e82e7..1fe65c0cc7 100644
--- a/src/Microsoft.XmlSerializer.Generator/src/Microsoft.XmlSerializer.Generator.csproj
+++ b/src/Microsoft.XmlSerializer.Generator/src/Microsoft.XmlSerializer.Generator.csproj
@@ -10,10 +10,8 @@
<SourceDir>..\..\System.Private.Xml\src</SourceDir>
</PropertyGroup>
<!-- Default configurations to help VS understand the options -->
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='netfx-Debug|AnyCPU'" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='netfx-Release|AnyCPU'" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='netstandard-Debug|AnyCPU'" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='netstandard-Release|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Debug|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Release|AnyCPU'" />
<ItemGroup Condition="'$(TargetGroup)' == 'netstandard'">
<Compile Include="$(CommonPath)\System\CSharpHelpers.cs" />
<Compile Include="$(CommonPath)\System\LocalAppContext.cs" />
diff --git a/src/Microsoft.XmlSerializer.Generator/src/Sgen.cs b/src/Microsoft.XmlSerializer.Generator/src/Sgen.cs
index 1c67a12109..c5ea073ccc 100644
--- a/src/Microsoft.XmlSerializer.Generator/src/Sgen.cs
+++ b/src/Microsoft.XmlSerializer.Generator/src/Sgen.cs
@@ -1,16 +1,306 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Threading;
namespace Microsoft.XmlSerializer.Generator
{
- using System;
public class Sgen
{
public static int Main(string[] args)
{
- //TODO SGEN
+ Sgen sgen = new Sgen();
+ sgen.Run(args);
return 0;
}
+
+ private int Run(string[] args)
+ {
+ string assembly = null;
+ List<string> types = new List<string>();
+ string codePath = null;
+ var errs = new ArrayList();
+ bool force = false;
+ bool proxyOnly = false;
+
+ try
+ {
+ for (int i = 0; i < args.Length; i++)
+ {
+ bool argument = false;
+ string arg = args[i];
+ string value = string.Empty;
+
+ if (arg.StartsWith("/") || arg.StartsWith("-"))
+ {
+ argument = true;
+ int colonPos = arg.IndexOf(":");
+ if (colonPos != -1)
+ {
+ value = arg.Substring(colonPos + 1).Trim();
+ arg = arg.Substring(0, colonPos).Trim();
+ }
+ }
+
+ arg = arg.ToLower(CultureInfo.InvariantCulture);
+ if (ArgumentMatch(arg, "?") || ArgumentMatch(arg, "help"))
+ {
+ WriteHeader();
+ WriteHelp();
+ return 0;
+ }
+ else if (!argument && (arg.EndsWith(".dll") || arg.EndsWith(".exe")))
+ {
+ if (assembly != null)
+ {
+ errs.Add(SR.Format(SR.ErrInvalidArgument, "/assembly", arg));
+ }
+
+ assembly = arg;
+ }
+ else if (ArgumentMatch(arg, "force"))
+ {
+ force = true;
+ }
+ else if (ArgumentMatch(arg, "proxytypes"))
+ {
+ proxyOnly = true;
+ }
+ else if (ArgumentMatch(arg, "out"))
+ {
+ if (codePath != null)
+ {
+ errs.Add(SR.Format(SR.ErrInvalidArgument, "/out", arg));
+ }
+
+ codePath = value;
+ }
+ else if (ArgumentMatch(arg, "type"))
+ {
+ types.Add(value);
+ }
+ else
+ {
+ errs.Add(SR.Format(SR.ErrInvalidArgument, arg));
+ continue;
+ }
+ }
+
+ if (errs.Count > 0)
+ {
+ foreach (string err in errs)
+ {
+ Console.Error.WriteLine(FormatMessage(true, SR.Format(SR.Warning, err)));
+ }
+ }
+
+ if (args.Length == 0 || assembly == null)
+ {
+ if (assembly == null)
+ {
+ Console.Error.WriteLine(FormatMessage(false, SR.Format(SR.ErrMissingRequiredArgument, SR.Format(SR.ErrAssembly, "assembly"))));
+ }
+
+ WriteHelp();
+ return 0;
+ }
+
+ GenerateAssembly(types, assembly, proxyOnly, force, codePath);
+ }
+ catch (Exception e)
+ {
+ if (e is ThreadAbortException || e is StackOverflowException || e is OutOfMemoryException)
+ {
+ throw;
+ }
+
+ return 1;
+ }
+
+ return 0;
+ }
+
+ private void GenerateAssembly(List<string> typeNames, string assemblyName, bool proxyOnly, bool force, string codePath)
+ {
+ Assembly assembly = LoadAssembly(assemblyName, true);
+ Type[] types;
+
+ if (typeNames == null || typeNames.Count == 0)
+ {
+ try
+ {
+ types = assembly.GetTypes();
+ }
+ catch (ReflectionTypeLoadException typeException)
+ {
+ List<Type> loadedTypes = new List<Type>();
+ foreach (Type type in typeException.Types)
+ {
+ if (type != null)
+ {
+ loadedTypes.Add(type);
+ }
+ }
+
+ types = loadedTypes.ToArray();
+ }
+ }
+ else
+ {
+ types = new Type[typeNames.Count];
+ int typeIndex = 0;
+ foreach (string typeName in typeNames)
+ {
+ Type type = assembly.GetType(typeName);
+ if (type == null)
+ {
+ Console.Error.WriteLine(FormatMessage(false, SR.Format(SR.ErrorDetails, SR.Format(SR.ErrLoadType, typeName, assemblyName))));
+ }
+
+ types[typeIndex++] = type;
+ }
+ }
+
+ var mappings = new ArrayList();
+ var importedTypes = new ArrayList();
+ var importer = new XmlReflectionImporter();
+
+ for (int i = 0; i < types.Length; i++)
+ {
+ Type type = types[i];
+
+ if (type != null)
+ {
+ bool isObsolete = false;
+ object[] obsoleteAttributes = type.GetCustomAttributes(typeof(ObsoleteAttribute), false);
+ foreach (object attribute in obsoleteAttributes)
+ {
+ if (((ObsoleteAttribute)attribute).IsError)
+ {
+ isObsolete = true;
+ break;
+ }
+ }
+
+ if (isObsolete)
+ {
+ continue;
+ }
+ }
+
+ if (!proxyOnly)
+ {
+ ImportType(type, mappings, importedTypes, importer);
+ }
+ }
+
+ if (importedTypes.Count > 0)
+ {
+ var serializableTypes = (Type[])importedTypes.ToArray(typeof(Type));
+ var allMappings = (XmlMapping[])mappings.ToArray(typeof(XmlMapping));
+
+ bool gac = assembly.GlobalAssemblyCache;
+ codePath = codePath == null ? (gac ? Environment.CurrentDirectory : Path.GetDirectoryName(assembly.Location)) : codePath;
+ string serializerName = XmlSerializer.GetXmlSerializerAssemblyName(serializableTypes[0], null);
+ string location = Path.Combine(codePath, serializerName + ".cs");
+
+ if (!force)
+ {
+ if (File.Exists(location))
+ throw new InvalidOperationException(SR.Format(SR.ErrSerializerExists, location, "force"));
+ }
+
+ if (Directory.Exists(location))
+ {
+ throw new InvalidOperationException(SR.Format(SR.ErrDirectoryExists, location));
+ }
+
+ bool success = XmlSerializer.GenerateSerializer(serializableTypes, allMappings, codePath);
+
+ if (success)
+ {
+ Console.Out.WriteLine(SR.Format(SR.InfoAssemblyName, location));
+ Console.Out.WriteLine(SR.Format(SR.InfoGeneratedAssembly, assembly.Location, location));
+ }
+ else
+ {
+ Console.Out.WriteLine(FormatMessage(false, SR.Format(SR.ErrGenerationFailed, assembly.Location)));
+ }
+ }
+ }
+
+ // assumes all same case.
+ private bool ArgumentMatch(string arg, string formal)
+ {
+ if (arg[0] != '/' && arg[0] != '-')
+ {
+ return false;
+ }
+
+ arg = arg.Substring(1);
+ return (arg == formal || (arg.Length == 1 && arg[0] == formal[0]));
+ }
+
+ private void ImportType(Type type, ArrayList mappings, ArrayList importedTypes, XmlReflectionImporter importer)
+ {
+ XmlTypeMapping xmlTypeMapping = null;
+ var localImporter = new XmlReflectionImporter();
+ try
+ {
+ xmlTypeMapping = localImporter.ImportTypeMapping(type);
+ }
+ catch (Exception e)
+ {
+ if (e is ThreadAbortException || e is StackOverflowException || e is OutOfMemoryException)
+ {
+ throw;
+ }
+ return;
+ }
+ if (xmlTypeMapping != null)
+ {
+ xmlTypeMapping = importer.ImportTypeMapping(type);
+ mappings.Add(xmlTypeMapping);
+ importedTypes.Add(type);
+ }
+ }
+
+ private static Assembly LoadAssembly(string assemblyName, bool throwOnFail)
+ {
+ Assembly assembly = null;
+ string path = Path.GetFullPath(assemblyName);
+ assembly = Assembly.LoadFile(path);
+ return assembly;
+ }
+
+ private void WriteHeader()
+ {
+ // do not localize Copyright header
+ Console.WriteLine(String.Format(CultureInfo.CurrentCulture, "[Microsoft (R) .NET Framework, Version {0}]", TempAssembly.ThisAssembly.InformationalVersion));
+ Console.WriteLine("Copyright (C) Microsoft Corporation. All rights reserved.");
+ }
+
+ void WriteHelp()
+ {
+ //TBD
+ Console.WriteLine("In Development");
+ }
+
+ private static string FormatMessage(bool warning, string message)
+ {
+ return FormatMessage(warning, "SGEN1", message);
+ }
+
+ private static string FormatMessage(bool warning, string code, string message)
+ {
+ return "SGEN: " + (warning ? "warning " : "error ") + code + ": " + message;
+ }
}
} \ No newline at end of file
diff --git a/src/Native/Unix/System.Native/pal_console.cpp b/src/Native/Unix/System.Native/pal_console.cpp
index ce7a55c47a..2d19062b1d 100644
--- a/src/Native/Unix/System.Native/pal_console.cpp
+++ b/src/Native/Unix/System.Native/pal_console.cpp
@@ -74,7 +74,7 @@ extern "C" void SystemNative_SetKeypadXmit(const char* terminfoString)
}
static bool g_readInProgress = false; // tracks whether a read is currently in progress, such that attributes have been changed
-static bool g_signalForBreak = true; // tracks whether the terminal should send signals for breaks
+static bool g_signalForBreak = true; // tracks whether the terminal should send signals for breaks, such that attributes have been changed
static bool g_haveInitTermios = false; // whether g_initTermios has been initialized
static struct termios g_initTermios = {}; // the initial attributes captured when Console was initialized
static struct termios g_preReadTermios = {}; // the original attributes captured before a read; valid if g_readInProgress is true
@@ -82,9 +82,18 @@ static struct termios g_currTermios = {}; // the current attributes set durin
static void UninitializeConsole()
{
- // Put the attributes back to what they were when the console was initially initialized
- if (g_haveInitTermios)
- tcsetattr(STDIN_FILENO, TCSANOW, &g_initTermios); // ignore any failure
+ // Put the attributes back to what they were when the console was initially initialized.
+ // We only do so, however, if we have explicitly modified the termios; doing so always
+ // can result in problems if the app is in the background, as then attempting to call
+ // tcsetattr on STDIN_FILENO will suspend the app and prevent its shutdown. We also don't
+ // want to, for example, just compare g_currTermios with g_initTermios, as we'd then be
+ // factoring in changes made by other apps or by user code.
+ if (g_haveInitTermios && // we successfully initialized the console
+ (g_readInProgress || !g_signalForBreak)) // we modified attributes
+ {
+ tcsetattr(STDIN_FILENO, TCSANOW, &g_initTermios);
+ // ignore any failure
+ }
}
static void IncorporateBreak(struct termios *termios, int32_t signalForBreak)
diff --git a/src/Native/Unix/System.Native/pal_interfaceaddresses.cpp b/src/Native/Unix/System.Native/pal_interfaceaddresses.cpp
index 2287e09387..a5513c2f8a 100644
--- a/src/Native/Unix/System.Native/pal_interfaceaddresses.cpp
+++ b/src/Native/Unix/System.Native/pal_interfaceaddresses.cpp
@@ -45,6 +45,10 @@ extern "C" int32_t SystemNative_EnumerateInterfaceAddresses(IPv4AddressFound onI
for (ifaddrs* current = headAddr; current != nullptr; current = current->ifa_next)
{
+ if (current->ifa_addr == nullptr)
+ {
+ continue;
+ }
uint32_t interfaceIndex = if_nametoindex(current->ifa_name);
// ifa_name may be an aliased interface name.
// Use if_indextoname to map back to the true device name.
diff --git a/src/Native/Unix/System.Native/pal_networking.cpp b/src/Native/Unix/System.Native/pal_networking.cpp
index dc232f51b9..709ce1abdf 100644
--- a/src/Native/Unix/System.Native/pal_networking.cpp
+++ b/src/Native/Unix/System.Native/pal_networking.cpp
@@ -1474,7 +1474,7 @@ extern "C" Error SystemNative_GetIPv6MulticastOption(intptr_t socket, int32_t mu
int fd = ToFileDescriptor(socket);
int optionName;
- if (!GetMulticastOptionName(multicastOption, false, optionName))
+ if (!GetMulticastOptionName(multicastOption, true, optionName))
{
return PAL_EINVAL;
}
@@ -1502,7 +1502,7 @@ extern "C" Error SystemNative_SetIPv6MulticastOption(intptr_t socket, int32_t mu
int fd = ToFileDescriptor(socket);
int optionName;
- if (!GetMulticastOptionName(multicastOption, false, optionName))
+ if (!GetMulticastOptionName(multicastOption, true, optionName))
{
return PAL_EINVAL;
}
diff --git a/src/Native/Unix/System.Net.Http.Native/pal_versioninfo.cpp b/src/Native/Unix/System.Net.Http.Native/pal_versioninfo.cpp
index 2aecdfcb0e..f67bd8a69c 100644
--- a/src/Native/Unix/System.Net.Http.Native/pal_versioninfo.cpp
+++ b/src/Native/Unix/System.Net.Http.Native/pal_versioninfo.cpp
@@ -40,6 +40,11 @@ static_assert(PAL_CURL_VERSION_UNIX_SOCKETS == CURL_VERSION_UNIX_SOCKETS, "");
static_assert(PAL_CURL_VERSION_PSL == CURL_VERSION_PSL, "");
#endif
+// Based on docs/libcurl/symbols-in-versions in libcurl source tree,
+// the CURL_VERSION_HTTP2 was introduced in libcurl 7.33.0 and
+// the CURLPIPE_MULTIPLEX was introduced in libcurl 7.43.0.
+#define MIN_VERSION_WITH_CURLPIPE_MULTIPLEX 0x074300
+
extern "C" int32_t HttpNative_GetSupportedFeatures()
{
curl_version_info_data* info = curl_version_info(CURLVERSION_NOW);
@@ -48,12 +53,10 @@ extern "C" int32_t HttpNative_GetSupportedFeatures()
extern "C" int32_t HttpNative_GetSupportsHttp2Multiplexing()
{
-#if HAVE_CURLPIPE_MULTIPLEX
curl_version_info_data* info = curl_version_info(CURLVERSION_NOW);
- return info != nullptr && (info->features & CURL_VERSION_HTTP2) == CURL_VERSION_HTTP2 ? 1 : 0;
-#else
- return 0;
-#endif
+ return info != nullptr &&
+ (info->version_num >= MIN_VERSION_WITH_CURLPIPE_MULTIPLEX) &&
+ ((info->features & PAL_CURL_VERSION_HTTP2) == PAL_CURL_VERSION_HTTP2) ? 1 : 0;
}
extern "C" char* HttpNative_GetVersionDescription()
@@ -67,39 +70,3 @@ extern "C" char* HttpNative_GetSslVersionDescription()
curl_version_info_data* info = curl_version_info(CURLVERSION_NOW);
return info != nullptr && info->ssl_version != nullptr ? strdup(info->ssl_version) : nullptr;
}
-
-// TODO: Remove HttpNative_GetCurlVersionInfo once the build containing the above functions
-// is available as part of a package.
-extern "C" int32_t HttpNative_GetCurlVersionInfo(int32_t* age,
- int32_t* supportsSsl,
- int32_t* supportsAutoDecompression,
- int32_t* supportsHttp2Multiplexing)
-{
- curl_version_info_data* versionInfo = curl_version_info(CURLVERSION_NOW);
-
- if (!versionInfo || !age || !supportsSsl || !supportsAutoDecompression || !supportsHttp2Multiplexing)
- {
- if (age)
- *age = 0;
- if (supportsSsl)
- *supportsSsl = 0;
- if (supportsAutoDecompression)
- *supportsAutoDecompression = 0;
- if (supportsHttp2Multiplexing)
- *supportsHttp2Multiplexing = 0;
-
- return 0;
- }
-
- *age = versionInfo->age;
- *supportsSsl = (versionInfo->features & CURL_VERSION_SSL) == CURL_VERSION_SSL;
- *supportsAutoDecompression = (versionInfo->features & CURL_VERSION_LIBZ) == CURL_VERSION_LIBZ;
- *supportsHttp2Multiplexing =
-#if HAVE_CURLPIPE_MULTIPLEX
- (versionInfo->features & CURL_VERSION_HTTP2) == CURL_VERSION_HTTP2;
-#else
- 0;
-#endif
-
- return 1;
-}
diff --git a/src/Native/Unix/System.Security.Cryptography.Native/pal_ssl.cpp b/src/Native/Unix/System.Security.Cryptography.Native/pal_ssl.cpp
index e6ba23a8be..450c6ce613 100644
--- a/src/Native/Unix/System.Security.Cryptography.Native/pal_ssl.cpp
+++ b/src/Native/Unix/System.Security.Cryptography.Native/pal_ssl.cpp
@@ -536,26 +536,6 @@ extern "C" void CryptoNative_SslCtxSetClientCertCallback(SSL_CTX* ctx, SslClient
SSL_CTX_set_client_cert_cb(ctx, callback);
}
-extern "C" void CryptoNative_GetStreamSizes(int32_t* header, int32_t* trailer, int32_t* maximumMessage)
-{
- // This function is kept for compatibility with RC2 builds on a jagged upgrade path.
- // Removal is tracked via issue #8504.
- if (header)
- {
- *header = SSL3_RT_HEADER_LENGTH;
- }
-
- if (trailer)
- {
- *trailer = 68;
- }
-
- if (maximumMessage)
- {
- *maximumMessage = SSL3_RT_MAX_PLAIN_LENGTH;
- }
-}
-
extern "C" int32_t CryptoNative_SslAddExtraChainCert(SSL* ssl, X509* x509)
{
if (!x509 || !ssl)
diff --git a/src/Native/pkg/dir.props b/src/Native/pkg/dir.props
index 8067685111..f89dc1deb2 100644
--- a/src/Native/pkg/dir.props
+++ b/src/Native/pkg/dir.props
@@ -9,7 +9,6 @@
<WinNativePath Condition="'$(WinNativePath)' == ''">$(BinDir)Windows_NT.$(PackagePlatform).$(ConfigurationGroup)\native\</WinNativePath>
<RHELNativePath Condition="'$(RHELNativePath)' == ''">$(LinuxNativePath)</RHELNativePath>
<DebianNativePath Condition="'$(DebianNativePath)' == ''">$(LinuxNativePath)</DebianNativePath>
- <Fedora23NativePath Condition="'$(Fedora23NativePath)' == ''">$(LinuxNativePath)</Fedora23NativePath>
<Fedora24NativePath Condition="'$(Fedora24NativePath)' == ''">$(LinuxNativePath)</Fedora24NativePath>
<OSXNativePath Condition="'$(OSXNativePath)' == ''">$(BinDir)OSX.$(PackagePlatform).$(ConfigurationGroup)\native\</OSXNativePath>
<OpenSuse132NativePath Condition="'$(OpenSuse132NativePath)' == ''">$(LinuxNativePath)</OpenSuse132NativePath>
diff --git a/src/System.AppContext/src/ApiCompatBaseline.uapaot.txt b/src/System.AppContext/src/ApiCompatBaseline.uapaot.txt
deleted file mode 100644
index b407edaa33..0000000000
--- a/src/System.AppContext/src/ApiCompatBaseline.uapaot.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Compat issues with assembly System.AppContext:
-TypesMustExist : Type 'System.AppContext' does not exist in the implementation but it does exist in the contract.
-Total Issues: 1
diff --git a/src/System.ComponentModel.TypeConverter/src/System.ComponentModel.TypeConverter.csproj b/src/System.ComponentModel.TypeConverter/src/System.ComponentModel.TypeConverter.csproj
index cf3ae68087..afcdd237df 100644
--- a/src/System.ComponentModel.TypeConverter/src/System.ComponentModel.TypeConverter.csproj
+++ b/src/System.ComponentModel.TypeConverter/src/System.ComponentModel.TypeConverter.csproj
@@ -267,7 +267,6 @@
<Reference Include="System.Runtime.Extensions" />
<Reference Include="System.Runtime.InteropServices" />
<Reference Include="System.Runtime.Serialization.Formatters" />
- <Reference Include="System.Security.Permissions" />
<Reference Include="System.Text.RegularExpressions" />
<Reference Include="System.Threading" />
<Reference Include="System.Threading.Timer" />
diff --git a/src/System.ComponentModel.TypeConverter/src/System/Drawing/ColorConverter.cs b/src/System.ComponentModel.TypeConverter/src/System/Drawing/ColorConverter.cs
index f53aeb7e54..26266840df 100644
--- a/src/System.ComponentModel.TypeConverter/src/System/Drawing/ColorConverter.cs
+++ b/src/System.ComponentModel.TypeConverter/src/System/Drawing/ColorConverter.cs
@@ -20,7 +20,7 @@ namespace System.Drawing
private static readonly Lazy<StandardValuesCollection> s_valuesLazy = new Lazy<StandardValuesCollection>(() => {
// We must take the value from each hashtable and combine them.
//
- HashSet<Color> set = new HashSet<Color>(ColorTable.Colors.Values.Concat(ColorTable.SystemColors.Values));
+ HashSet<Color> set = new HashSet<Color>(ColorTable.Colors.Values);
return new StandardValuesCollection(set.OrderBy(c => c, new ColorComparer()).ToList());
});
@@ -173,7 +173,7 @@ namespace System.Drawing
// If this is a known color, then Color can provide its own
// name. Otherwise, we fabricate an ARGB value for it.
//
- if (c.IsKnownColor)
+ if (ColorTable.IsKnownNamedColor(c.Name))
{
return c.Name;
}
@@ -207,14 +207,14 @@ namespace System.Drawing
args[nArg++] = intConverter.ConvertToString(context, culture, (object)c.G);
args[nArg++] = intConverter.ConvertToString(context, culture, (object)c.B);
- // Now slam all of these together with the fantastic Join
+ // Now slam all of these together with the fantastic Join
// method.
//
return string.Join(sep, args);
}
}
}
-
+
if (destinationType == typeof(InstanceDescriptor))
{
MemberInfo member = null;
@@ -226,11 +226,7 @@ namespace System.Drawing
{
member = typeof(Color).GetField("Empty");
}
- else if (c.IsSystemColor)
- {
- member = typeof(SystemColors).GetProperty(c.Name);
- }
- else if (c.IsKnownColor)
+ else if (ColorTable.IsKnownNamedColor(c.Name))
{
member = typeof(Color).GetProperty(c.Name);
}
diff --git a/src/System.ComponentModel.TypeConverter/tests/Configurations.props b/src/System.ComponentModel.TypeConverter/tests/Configurations.props
index 77a4b65bc9..6a544338f3 100644
--- a/src/System.ComponentModel.TypeConverter/tests/Configurations.props
+++ b/src/System.ComponentModel.TypeConverter/tests/Configurations.props
@@ -4,6 +4,7 @@
<BuildConfigurations>
netstandard;
netcoreapp;
+ netfx;
</BuildConfigurations>
</PropertyGroup>
</Project> \ No newline at end of file
diff --git a/src/System.ComponentModel.TypeConverter/tests/Drawing/ColorConverterTests.cs b/src/System.ComponentModel.TypeConverter/tests/Drawing/ColorConverterTests.cs
index d0e017acce..2b86d4edab 100644
--- a/src/System.ComponentModel.TypeConverter/tests/Drawing/ColorConverterTests.cs
+++ b/src/System.ComponentModel.TypeConverter/tests/Drawing/ColorConverterTests.cs
@@ -84,8 +84,9 @@ namespace System.ComponentModel.TypeConverterTests
}
}
- public static IEnumerable<object[]> ColorNames =>
- Enum.GetNames(typeof(KnownColor)).Select(n => new object[] {n});
+ public static IEnumerable<object[]> ColorNames => typeof(Color).GetProperties()
+ .Where(p => p.PropertyType == typeof(Color))
+ .Select(p => new object[] { p.Name} );
[Theory]
[MemberData(nameof(ColorData))]
@@ -436,8 +437,7 @@ namespace System.ComponentModel.TypeConverterTests
{
var conv = new ColorConverter();
- Assert.Equal((int) KnownColor.MenuHighlight, conv.GetStandardValues().Count);
- Assert.Equal((int) KnownColor.MenuHighlight, conv.GetStandardValues(null).Count);
+ Assert.True(conv.GetStandardValues().Count > 0);
}
[Fact]
diff --git a/src/System.ComponentModel.TypeConverter/tests/Drawing/PointConverterTests.cs b/src/System.ComponentModel.TypeConverter/tests/Drawing/PointConverterTests.cs
index 6a7c5485f9..cd231d89dc 100644
--- a/src/System.ComponentModel.TypeConverter/tests/Drawing/PointConverterTests.cs
+++ b/src/System.ComponentModel.TypeConverter/tests/Drawing/PointConverterTests.cs
@@ -175,16 +175,14 @@ namespace System.ComponentModel.TypeConverterTests
{
var pt = new Point(1, 1);
var props = Converter.GetProperties(new Point(1, 1));
- Assert.Equal(3, props.Count);
+ Assert.Equal(2, props.Count);
Assert.Equal(1, props["X"].GetValue(pt));
Assert.Equal(1, props["Y"].GetValue(pt));
- Assert.Equal(false, props["IsEmpty"].GetValue(pt));
props = Converter.GetProperties(null, new Point(1, 1));
- Assert.Equal(3, props.Count);
+ Assert.Equal(2, props.Count);
Assert.Equal(1, props["X"].GetValue(pt));
Assert.Equal(1, props["Y"].GetValue(pt));
- Assert.Equal(false, props["IsEmpty"].GetValue(pt));
props = Converter.GetProperties(null, new Point(1, 1), null);
Assert.Equal(3, props.Count);
@@ -192,12 +190,15 @@ namespace System.ComponentModel.TypeConverterTests
Assert.Equal(1, props["Y"].GetValue(pt));
Assert.Equal(false, props["IsEmpty"].GetValue(pt));
- props = Converter.GetProperties(null, new Point(1, 1),
- typeof(Point).GetCustomAttributes(true).OfType<Attribute>().ToArray());
+ props = Converter.GetProperties(null, new Point(1, 1), new Attribute[0]);
Assert.Equal(3, props.Count);
Assert.Equal(1, props["X"].GetValue(pt));
Assert.Equal(1, props["Y"].GetValue(pt));
Assert.Equal(false, props["IsEmpty"].GetValue(pt));
+
+ // Pick an attibute that cannot be applied to properties to make sure everything gets filtered
+ props = Converter.GetProperties(null, new Point(1, 1), new Attribute[] { new System.Reflection.AssemblyCopyrightAttribute("")});
+ Assert.Equal(0, props.Count);
}
[Theory]
diff --git a/src/System.ComponentModel.TypeConverter/tests/Drawing/RectangleConverterTests.cs b/src/System.ComponentModel.TypeConverter/tests/Drawing/RectangleConverterTests.cs
index b149ec4c7e..065d442afa 100644
--- a/src/System.ComponentModel.TypeConverter/tests/Drawing/RectangleConverterTests.cs
+++ b/src/System.ComponentModel.TypeConverter/tests/Drawing/RectangleConverterTests.cs
@@ -175,7 +175,7 @@ namespace System.ComponentModel.TypeConverterTests
{
var rect = new Rectangle(10, 10, 20, 30);
var propsColl = Converter.GetProperties(rect);
- Assert.Equal(11, propsColl.Count);
+ Assert.Equal(4, propsColl.Count);
Assert.Equal(rect.X, propsColl["X"].GetValue(rect));
Assert.Equal(rect.Y, propsColl["Y"].GetValue(rect));
Assert.Equal(rect.Width, propsColl["Width"].GetValue(rect));
@@ -183,7 +183,7 @@ namespace System.ComponentModel.TypeConverterTests
rect = new Rectangle(-10, -10, 20, 30);
propsColl = Converter.GetProperties(null, rect);
- Assert.Equal(11, propsColl.Count);
+ Assert.Equal(4, propsColl.Count);
Assert.Equal(rect.X, propsColl["X"].GetValue(rect));
Assert.Equal(rect.Y, propsColl["Y"].GetValue(rect));
Assert.Equal(rect.Width, propsColl["Width"].GetValue(rect));
@@ -196,6 +196,7 @@ namespace System.ComponentModel.TypeConverterTests
Assert.Equal(rect.Y, propsColl["Y"].GetValue(rect));
Assert.Equal(rect.Width, propsColl["Width"].GetValue(rect));
Assert.Equal(rect.Height, propsColl["Height"].GetValue(rect));
+ Assert.Equal(rect.IsEmpty, propsColl["IsEmpty"].GetValue(rect));
Assert.Equal(rect.Top, propsColl["Top"].GetValue(rect));
Assert.Equal(rect.Bottom, propsColl["Bottom"].GetValue(rect));
@@ -204,6 +205,10 @@ namespace System.ComponentModel.TypeConverterTests
Assert.Equal(rect.Location, propsColl["Location"].GetValue(rect));
Assert.Equal(rect.Size, propsColl["Size"].GetValue(rect));
Assert.Equal(rect.IsEmpty, propsColl["IsEmpty"].GetValue(rect));
+
+ // Pick an attibute that cannot be applied to properties to make sure everything gets filtered
+ propsColl = Converter.GetProperties(null, new Rectangle(10, 10, 20, 30), new Attribute[] { new System.Reflection.AssemblyCopyrightAttribute("")});
+ Assert.Equal(0, propsColl.Count);
}
[Theory]
diff --git a/src/System.ComponentModel.TypeConverter/tests/Drawing/SizeConverterTests.cs b/src/System.ComponentModel.TypeConverter/tests/Drawing/SizeConverterTests.cs
index 55650063f0..794ba38ad1 100644
--- a/src/System.ComponentModel.TypeConverter/tests/Drawing/SizeConverterTests.cs
+++ b/src/System.ComponentModel.TypeConverter/tests/Drawing/SizeConverterTests.cs
@@ -175,16 +175,14 @@ namespace System.ComponentModel.TypeConverterTests
{
var pt = new Size(1, 1);
var props = Converter.GetProperties(new Size(1, 1));
- Assert.Equal(3, props.Count);
+ Assert.Equal(2, props.Count);
Assert.Equal(1, props["Width"].GetValue(pt));
Assert.Equal(1, props["Height"].GetValue(pt));
- Assert.Equal(false, props["IsEmpty"].GetValue(pt));
props = Converter.GetProperties(null, new Size(1, 1));
- Assert.Equal(3, props.Count);
+ Assert.Equal(2, props.Count);
Assert.Equal(1, props["Width"].GetValue(pt));
Assert.Equal(1, props["Height"].GetValue(pt));
- Assert.Equal(false, props["IsEmpty"].GetValue(pt));
props = Converter.GetProperties(null, new Size(1, 1), null);
Assert.Equal(3, props.Count);
@@ -192,12 +190,15 @@ namespace System.ComponentModel.TypeConverterTests
Assert.Equal(1, props["Height"].GetValue(pt));
Assert.Equal(false, props["IsEmpty"].GetValue(pt));
- props = Converter.GetProperties(null, new Size(1, 1),
- typeof(Size).GetCustomAttributes(true).OfType<Attribute>().ToArray());
+ props = Converter.GetProperties(null, new Size(1, 1), new Attribute[0]);
Assert.Equal(3, props.Count);
Assert.Equal(1, props["Width"].GetValue(pt));
Assert.Equal(1, props["Height"].GetValue(pt));
Assert.Equal(false, props["IsEmpty"].GetValue(pt));
+
+ // Pick an attibute that cannot be applied to properties to make sure everything gets filtered
+ props = Converter.GetProperties(null, new Size(1, 1), new Attribute[] { new System.Reflection.AssemblyCopyrightAttribute("")});
+ Assert.Equal(0, props.Count);
}
[Theory]
diff --git a/src/System.ComponentModel.TypeConverter/tests/Drawing/SizeFConverterTests.cs b/src/System.ComponentModel.TypeConverter/tests/Drawing/SizeFConverterTests.cs
index cb603cda30..7143211b82 100644
--- a/src/System.ComponentModel.TypeConverter/tests/Drawing/SizeFConverterTests.cs
+++ b/src/System.ComponentModel.TypeConverter/tests/Drawing/SizeFConverterTests.cs
@@ -160,7 +160,12 @@ namespace System.ComponentModel.TypeConverterTests
[Fact]
public void CreateInstance_CaseSensitive()
{
- Assert.Throws<ArgumentException>(() =>
+ // NET Framework throws NullReferenceException but we want it to be friendly on Core so it
+ // correctly throws an ArgumentException
+ Type expectedExceptionType =
+ PlatformDetection.IsFullFramework ? typeof(NullReferenceException) : typeof(ArgumentException);
+
+ Assert.Throws(expectedExceptionType, () =>
{
Converter.CreateInstance(null, new Dictionary<string, object>
{
@@ -175,16 +180,14 @@ namespace System.ComponentModel.TypeConverterTests
{
var pt = new SizeF(1, 1);
var props = Converter.GetProperties(new SizeF(1, 1));
- Assert.Equal(3, props.Count);
+ Assert.Equal(2, props.Count);
Assert.Equal(1f, props["Width"].GetValue(pt));
Assert.Equal(1f, props["Height"].GetValue(pt));
- Assert.Equal(false, props["IsEmpty"].GetValue(pt));
props = Converter.GetProperties(null, new SizeF(1, 1));
- Assert.Equal(3, props.Count);
+ Assert.Equal(2, props.Count);
Assert.Equal(1f, props["Width"].GetValue(pt));
Assert.Equal(1f, props["Height"].GetValue(pt));
- Assert.Equal(false, props["IsEmpty"].GetValue(pt));
props = Converter.GetProperties(null, new SizeF(1, 1), null);
Assert.Equal(3, props.Count);
@@ -192,12 +195,15 @@ namespace System.ComponentModel.TypeConverterTests
Assert.Equal(1f, props["Height"].GetValue(pt));
Assert.Equal(false, props["IsEmpty"].GetValue(pt));
- props = Converter.GetProperties(null, new SizeF(1, 1),
- typeof(SizeF).GetCustomAttributes(true).OfType<Attribute>().ToArray());
+ props = Converter.GetProperties(null, new SizeF(1, 1), new Attribute[0]);
Assert.Equal(3, props.Count);
Assert.Equal(1f, props["Width"].GetValue(pt));
Assert.Equal(1f, props["Height"].GetValue(pt));
Assert.Equal(false, props["IsEmpty"].GetValue(pt));
+
+ // Pick an attibute that cannot be applied to properties to make sure everything gets filtered
+ props = Converter.GetProperties(null, new SizeF(1, 1), new Attribute[] { new System.Reflection.AssemblyCopyrightAttribute("")});
+ Assert.Equal(0, props.Count);
}
[Theory]
diff --git a/src/System.ComponentModel.TypeConverter/tests/MemberDescriptorTests.cs b/src/System.ComponentModel.TypeConverter/tests/MemberDescriptorTests.cs
index fc866bb4f6..88ae5daea7 100644
--- a/src/System.ComponentModel.TypeConverter/tests/MemberDescriptorTests.cs
+++ b/src/System.ComponentModel.TypeConverter/tests/MemberDescriptorTests.cs
@@ -9,24 +9,19 @@ namespace System.ComponentModel.Tests
{
public class MemberDescriptorTests
{
- static MemberDescriptorTests()
- {
- if (PlatformDetection.IsFullFramework)
- {
- // MethodDescriptor.Equals checks for this quirk and if it is set to true the behavior will be different to what we expect and the test will fail.
- // This quirk is set to true by default on .NET versions earlier than 4.6.1 and Xunit runner was built against 4.5, so we override the quirk value to have the expected behavior.
- AppContext.SetSwitch(@"Switch.System.MemberDescriptorEqualsReturnsFalseIfEquivalent", false);
- }
- }
-
[Fact]
public void CopiedMemberDescriptorEqualsItsSource()
{
+ string description = "MockCategory";
var attributes = new Attribute[]
{
- new CategoryAttribute("category"),
- new DescriptionAttribute("description")
+ new CategoryAttribute(description),
+ // setting Decription and Category the same as .NET Framework has a bug in the equals that compares them
+ // instead of each other. In .NET 4.6.2 and greater this is no longer an issue but to make the test
+ // work on all platforms just setting them to be the same.
+ new DescriptionAttribute(description)
};
+
var firstDescriptor = new MockMemberDescriptor(nameof(MemberDescriptor), attributes);
var copiedDescriptor = new MockMemberDescriptor(firstDescriptor);
diff --git a/src/System.ComponentModel.TypeConverter/tests/System.ComponentModel.TypeConverter.Tests.csproj b/src/System.ComponentModel.TypeConverter/tests/System.ComponentModel.TypeConverter.Tests.csproj
index e312d949de..52416c8856 100644
--- a/src/System.ComponentModel.TypeConverter/tests/System.ComponentModel.TypeConverter.Tests.csproj
+++ b/src/System.ComponentModel.TypeConverter/tests/System.ComponentModel.TypeConverter.Tests.csproj
@@ -12,7 +12,7 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Release|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Release|AnyCPU'" />
- <ItemGroup Condition="'$(TargetGroup)' != 'netcoreapp' And '$(TargetGroup)' != 'netstandard'">
+ <ItemGroup Condition="'$(TargetGroup)' != 'netstandard'">
<Compile Include="Drawing\ColorConverterTests.cs" />
<Compile Include="Drawing\PointConverterTests.cs" />
<Compile Include="Drawing\RectangleConverterTests.cs" />
diff --git a/src/System.Configuration.ConfigurationManager/tests/System.Configuration.ConfigurationManager.Tests.csproj b/src/System.Configuration.ConfigurationManager/tests/System.Configuration.ConfigurationManager.Tests.csproj
index 08148ce1bb..c4e8f30ad7 100644
--- a/src/System.Configuration.ConfigurationManager/tests/System.Configuration.ConfigurationManager.Tests.csproj
+++ b/src/System.Configuration.ConfigurationManager/tests/System.Configuration.ConfigurationManager.Tests.csproj
@@ -92,10 +92,11 @@
<Compile Include="System\Configuration\StringUtilTests.cs" />
<Compile Include="System\Configuration\TempConfig.cs" />
<Compile Include="System\Configuration\TestData.cs" />
+ <Compile Include="System\Configuration\SubclassTypeValidatorAttributeTests.cs" />
<Compile Include="System\Configuration\TimeSpanValidatorAttributeTests.cs" />
<Compile Include="System\Configuration\TypeUtilTests.cs" />
<Compile Include="System\Configuration\UriSectionTests.cs" />
- <Compile Include="System\Configuration\UrlPathTests.cs" />
+ <Compile Include="System\Configuration\UrlPathTests.cs" />
<Compile Include="System\Configuration\ValidatiorUtilsTests.cs" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
diff --git a/src/System.Configuration.ConfigurationManager/tests/System/Configuration/SubclassTypeValidatorAttributeTests.cs b/src/System.Configuration.ConfigurationManager/tests/System/Configuration/SubclassTypeValidatorAttributeTests.cs
new file mode 100644
index 0000000000..d88085b762
--- /dev/null
+++ b/src/System.Configuration.ConfigurationManager/tests/System/Configuration/SubclassTypeValidatorAttributeTests.cs
@@ -0,0 +1,21 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Configuration;
+using Xunit;
+
+namespace System.ConfigurationTests
+{
+ public class SubclassTypeValidatorAttributeTests
+ {
+ [Theory]
+ [InlineData(null)]
+ [InlineData(typeof(string))]
+ public void GetBaseClass_FlowFromConstructor_Equals(Type expected)
+ {
+ SubclassTypeValidatorAttribute attr = new SubclassTypeValidatorAttribute(expected);
+ Assert.Equal(expected, attr.BaseClass);
+ }
+ }
+} \ No newline at end of file
diff --git a/src/System.Console/System.Console.sln b/src/System.Console/System.Console.sln
index e6ebc4f834..eb56e13dea 100644
--- a/src/System.Console/System.Console.sln
+++ b/src/System.Console/System.Console.sln
@@ -36,10 +36,10 @@ Global
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {3ED7BCF1-34B9-49B7-9C25-0BC3304C0858}.Debug|Any CPU.ActiveCfg = netstandard-Debug|Any CPU
- {3ED7BCF1-34B9-49B7-9C25-0BC3304C0858}.Debug|Any CPU.Build.0 = netstandard-Debug|Any CPU
- {3ED7BCF1-34B9-49B7-9C25-0BC3304C0858}.Release|Any CPU.ActiveCfg = netstandard-Release|Any CPU
- {3ED7BCF1-34B9-49B7-9C25-0BC3304C0858}.Release|Any CPU.Build.0 = netstandard-Release|Any CPU
+ {3ED7BCF1-34B9-49B7-9C25-0BC3304C0858}.Debug|Any CPU.ActiveCfg = netstandard-Windows_NT-Debug|Any CPU
+ {3ED7BCF1-34B9-49B7-9C25-0BC3304C0858}.Debug|Any CPU.Build.0 = netstandard-Windows_NT-Debug|Any CPU
+ {3ED7BCF1-34B9-49B7-9C25-0BC3304C0858}.Release|Any CPU.ActiveCfg = netstandard-Windows_NT-Release|Any CPU
+ {3ED7BCF1-34B9-49B7-9C25-0BC3304C0858}.Release|Any CPU.Build.0 = netstandard-Windows_NT-Release|Any CPU
{99E5069D-241F-48A6-8F29-404B4AED72BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{99E5069D-241F-48A6-8F29-404B4AED72BF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{99E5069D-241F-48A6-8F29-404B4AED72BF}.Release|Any CPU.ActiveCfg = Release|Any CPU
diff --git a/src/System.Console/tests/CancelKeyPress.Unix.cs b/src/System.Console/tests/CancelKeyPress.Unix.cs
new file mode 100644
index 0000000000..3283e38656
--- /dev/null
+++ b/src/System.Console/tests/CancelKeyPress.Unix.cs
@@ -0,0 +1,69 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.Diagnostics;
+using System.Runtime.InteropServices;
+using System.Threading.Tasks;
+using Xunit;
+
+public partial class CancelKeyPressTests : RemoteExecutorTestBase
+{
+ [PlatformSpecific(TestPlatforms.AnyUnix)] // Uses P/Invokes
+ public void HandlerInvokedForSigInt()
+ {
+ HandlerInvokedForSignal(SIGINT);
+ }
+
+ [PlatformSpecific(TestPlatforms.AnyUnix & ~TestPlatforms.OSX)] // Jenkins blocks SIGQUIT on OS X, causing the test to fail in CI
+ public void HandlerInvokedForSigQuit()
+ {
+ HandlerInvokedForSignal(SIGQUIT);
+ }
+
+ private void HandlerInvokedForSignal(int signalOuter)
+ {
+ // On Windows we could use GenerateConsoleCtrlEvent to send a ctrl-C to the process,
+ // however that'll apply to all processes associated with the same group, which will
+ // include processes like the code coverage tool when doing code coverage runs, causing
+ // those other processes to exit. As such, we test this only on Unix, where we can
+ // send a SIGINT signal to this specific process only.
+
+ // This test sends a SIGINT back to itself... if run in the xunit process, this would end
+ // up canceling the rest of xunit's tests. So we run the test itself in a separate process.
+ RemoteInvoke(signalStr =>
+ {
+ var tcs = new TaskCompletionSource<ConsoleSpecialKey>();
+
+ ConsoleCancelEventHandler handler = (sender, e) =>
+ {
+ e.Cancel = true;
+ tcs.SetResult(e.SpecialKey);
+ };
+
+ Console.CancelKeyPress += handler;
+ try
+ {
+ int signalInner = int.Parse(signalStr);
+ Assert.Equal(0, kill(Process.GetCurrentProcess().Id, signalInner));
+ Assert.True(tcs.Task.Wait(WaitFailTestTimeoutSeconds * 1000));
+ Assert.Equal(
+ signalInner == SIGINT ? ConsoleSpecialKey.ControlC : ConsoleSpecialKey.ControlBreak,
+ tcs.Task.Result);
+ }
+ finally
+ {
+ Console.CancelKeyPress -= handler;
+ }
+
+ return SuccessExitCode;
+ }, signalOuter.ToString()).Dispose();
+ }
+
+ [DllImport("libc", SetLastError = true)]
+ private static extern int kill(int pid, int sig);
+
+ private const int SIGINT = 2;
+ private const int SIGQUIT = 3;
+}
diff --git a/src/System.Console/tests/CancelKeyPress.cs b/src/System.Console/tests/CancelKeyPress.cs
index f48e7c8910..a4197bf6a5 100644
--- a/src/System.Console/tests/CancelKeyPress.cs
+++ b/src/System.Console/tests/CancelKeyPress.cs
@@ -8,7 +8,7 @@ using System.Runtime.InteropServices;
using System.Threading.Tasks;
using Xunit;
-public class CancelKeyPressTests : RemoteExecutorTestBase
+public partial class CancelKeyPressTests : RemoteExecutorTestBase
{
private const int WaitFailTestTimeoutSeconds = 30;
@@ -37,61 +37,4 @@ public class CancelKeyPressTests : RemoteExecutorTestBase
return SuccessExitCode;
}).Dispose();
}
-
- [PlatformSpecific(TestPlatforms.AnyUnix)] // Uses P/Invokes
- public void HandlerInvokedForSigInt()
- {
- HandlerInvokedForSignal(SIGINT);
- }
-
- [PlatformSpecific(TestPlatforms.AnyUnix & ~TestPlatforms.OSX)] // Jenkins blocks SIGQUIT on OS X, causing the test to fail in CI
- public void HandlerInvokedForSigQuit()
- {
- HandlerInvokedForSignal(SIGQUIT);
- }
-
- private void HandlerInvokedForSignal(int signalOuter)
- {
- // On Windows we could use GenerateConsoleCtrlEvent to send a ctrl-C to the process,
- // however that'll apply to all processes associated with the same group, which will
- // include processes like the code coverage tool when doing code coverage runs, causing
- // those other processes to exit. As such, we test this only on Unix, where we can
- // send a SIGINT signal to this specific process only.
-
- // This test sends a SIGINT back to itself... if run in the xunit process, this would end
- // up canceling the rest of xunit's tests. So we run the test itself in a separate process.
- RemoteInvoke(signalStr =>
- {
- var tcs = new TaskCompletionSource<ConsoleSpecialKey>();
-
- ConsoleCancelEventHandler handler = (sender, e) =>
- {
- e.Cancel = true;
- tcs.SetResult(e.SpecialKey);
- };
-
- Console.CancelKeyPress += handler;
- try
- {
- int signalInner = int.Parse(signalStr);
- Assert.Equal(0, kill(Process.GetCurrentProcess().Id, signalInner));
- Assert.True(tcs.Task.Wait(WaitFailTestTimeoutSeconds * 1000));
- Assert.Equal(
- signalInner == SIGINT ? ConsoleSpecialKey.ControlC : ConsoleSpecialKey.ControlBreak,
- tcs.Task.Result);
- }
- finally
- {
- Console.CancelKeyPress -= handler;
- }
-
- return SuccessExitCode;
- }, signalOuter.ToString()).Dispose();
- }
-
- [DllImport("libc", SetLastError = true)]
- private static extern int kill(int pid, int sig);
-
- private const int SIGINT = 2;
- private const int SIGQUIT = 3;
}
diff --git a/src/System.Console/tests/Configurations.props b/src/System.Console/tests/Configurations.props
index c398e42e89..7d8424e071 100644
--- a/src/System.Console/tests/Configurations.props
+++ b/src/System.Console/tests/Configurations.props
@@ -3,6 +3,7 @@
<PropertyGroup>
<BuildConfigurations>
netstandard;
+ netstandard-Windows_NT;
</BuildConfigurations>
</PropertyGroup>
</Project> \ No newline at end of file
diff --git a/src/System.Console/tests/System.Console.Tests.csproj b/src/System.Console/tests/System.Console.Tests.csproj
index ee2aa1f850..73b02987f9 100644
--- a/src/System.Console/tests/System.Console.Tests.csproj
+++ b/src/System.Console/tests/System.Console.Tests.csproj
@@ -8,11 +8,14 @@
<!-- Default configurations to help VS understand the configurations -->
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Release|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Windows_NT-Debug|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Windows_NT-Release|AnyCPU'" />
<ItemGroup>
<Compile Include="$(CommonTestPath)\System\PlatformDetection.cs">
<Link>Common\tests\System\PlatformDetection.cs</Link>
</Compile>
<Compile Include="CancelKeyPress.cs" />
+ <Compile Include="CancelKeyPress.Unix.cs" Condition="'$(TargetsWindows)' != 'true'" />
<Compile Include="Helpers.cs" />
<Compile Include="ReadAndWrite.cs" />
<Compile Include="ConsoleKeyInfoTests.cs" />
diff --git a/src/System.Data.SqlClient/ref/System.Data.SqlClient.cs b/src/System.Data.SqlClient/ref/System.Data.SqlClient.cs
index e02d84c80c..a9fc94e84e 100644
--- a/src/System.Data.SqlClient/ref/System.Data.SqlClient.cs
+++ b/src/System.Data.SqlClient/ref/System.Data.SqlClient.cs
@@ -32,7 +32,7 @@
namespace Microsoft.SqlServer.Server
{
- public partial class SqlDataRecord
+ public partial class SqlDataRecord : System.Data.IDataRecord
{
public SqlDataRecord(params Microsoft.SqlServer.Server.SqlMetaData[] metaData) { }
public virtual int FieldCount { get { throw null; } }
@@ -43,6 +43,7 @@ namespace Microsoft.SqlServer.Server
public virtual long GetBytes(int ordinal, long fieldOffset, byte[] buffer, int bufferOffset, int length) { throw null; }
public virtual char GetChar(int ordinal) { throw null; }
public virtual long GetChars(int ordinal, long fieldOffset, char[] buffer, int bufferOffset, int length) { throw null; }
+ System.Data.IDataReader System.Data.IDataRecord.GetData(int ordinal) { throw null; }
public virtual string GetDataTypeName(int ordinal) { throw null; }
public virtual System.DateTime GetDateTime(int ordinal) { throw null; }
public virtual System.DateTimeOffset GetDateTimeOffset(int ordinal) { throw null; }
diff --git a/src/System.Data.SqlClient/src/Microsoft/SqlServer/Server/SqlDataRecord.cs b/src/System.Data.SqlClient/src/Microsoft/SqlServer/Server/SqlDataRecord.cs
index 22221c7320..4b128f2add 100644
--- a/src/System.Data.SqlClient/src/Microsoft/SqlServer/Server/SqlDataRecord.cs
+++ b/src/System.Data.SqlClient/src/Microsoft/SqlServer/Server/SqlDataRecord.cs
@@ -18,7 +18,7 @@ using System.Diagnostics;
namespace Microsoft.SqlServer.Server
{
- public class SqlDataRecord
+ public class SqlDataRecord : IDataRecord
{
private SmiRecordBuffer _recordBuffer;
private SmiExtendedMetaData[] _columnSmiMetaData;
@@ -731,6 +731,11 @@ namespace Microsoft.SqlServer.Server
throw SQL.SubclassMustOverride();
}
}
+
+ public IDataReader GetData(int i)
+ {
+ throw ADP.NotSupported();
+ }
}
}
diff --git a/src/System.Data.SqlClient/src/System/Data/SqlClient/SqlBulkCopy.cs b/src/System.Data.SqlClient/src/System/Data/SqlClient/SqlBulkCopy.cs
index c09e4471cb..75cc51100c 100644
--- a/src/System.Data.SqlClient/src/System/Data/SqlClient/SqlBulkCopy.cs
+++ b/src/System.Data.SqlClient/src/System/Data/SqlClient/SqlBulkCopy.cs
@@ -2802,6 +2802,7 @@ namespace System.Data.SqlClient
{
_stateObj = _parser.GetSession(this);
_stateObj._bulkCopyOpperationInProgress = true;
+ _stateObj.StartSession(this);
}
finally
{
diff --git a/src/System.Data.SqlClient/src/System/Data/SqlClient/SqlCommand.cs b/src/System.Data.SqlClient/src/System/Data/SqlClient/SqlCommand.cs
index 9573d37a64..5b3da6c75a 100644
--- a/src/System.Data.SqlClient/src/System/Data/SqlClient/SqlCommand.cs
+++ b/src/System.Data.SqlClient/src/System/Data/SqlClient/SqlCommand.cs
@@ -2422,6 +2422,7 @@ namespace System.Data.SqlClient
}
TdsParserStateObject stateObj = parser.GetSession(this);
+ stateObj.StartSession(this);
_stateObj = stateObj;
diff --git a/src/System.Data.SqlClient/src/System/Data/SqlClient/SqlDataReader.cs b/src/System.Data.SqlClient/src/System/Data/SqlClient/SqlDataReader.cs
index 2131a21ba2..2d52d442e2 100644
--- a/src/System.Data.SqlClient/src/System/Data/SqlClient/SqlDataReader.cs
+++ b/src/System.Data.SqlClient/src/System/Data/SqlClient/SqlDataReader.cs
@@ -2,10 +2,6 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
-
-
-//------------------------------------------------------------------------------
-
using System.Collections;
using System.Collections.ObjectModel;
using System.Data.Common;
@@ -406,7 +402,7 @@ namespace System.Data.SqlClient
TdsParserStateObject stateObj = _stateObj;
if (null != stateObj)
{
- stateObj.Cancel(this);
+ stateObj.Cancel(command);
}
}
diff --git a/src/System.Data.SqlClient/src/System/Data/SqlClient/TdsParserStateObject.cs b/src/System.Data.SqlClient/src/System/Data/SqlClient/TdsParserStateObject.cs
index b70b113008..157df9ce5a 100644
--- a/src/System.Data.SqlClient/src/System/Data/SqlClient/TdsParserStateObject.cs
+++ b/src/System.Data.SqlClient/src/System/Data/SqlClient/TdsParserStateObject.cs
@@ -105,7 +105,7 @@ namespace System.Data.SqlClient
// 3) post session close - no attention is allowed
private bool _cancelled;
private const int _waitForCancellationLockPollTimeout = 100;
-
+ private WeakReference _cancellationOwner = new WeakReference(null);
internal bool _hasOpenResult = false;
// Cache the transaction for which this command was executed so upon completion we can
@@ -578,7 +578,9 @@ namespace System.Data.SqlClient
// cancel request.
internal void Cancel(object caller)
{
- Debug.Assert(!(caller is int), "Incorrectly calling this API using the caller's objectID");
+ Debug.Assert(caller != null, "Null caller for Cancel!");
+ Debug.Assert(caller is SqlCommand || caller is SqlDataReader, "Calling API with invalid caller type: " + caller.GetType());
+
bool hasLock = false;
try
{
@@ -591,7 +593,7 @@ namespace System.Data.SqlClient
// This lock is also protecting against concurrent close and async continuations
// Ensure that, once we have the lock, that we are still the owner
- if ((!_cancelled) && (_owner.Target == caller))
+ if ((!_cancelled) && (_cancellationOwner.Target == caller))
{
_cancelled = true;
@@ -721,6 +723,7 @@ namespace System.Data.SqlClient
{
// Reset cancel state.
_cancelled = false;
+ _cancellationOwner.Target = null;
if (_attentionSent)
{
@@ -919,6 +922,10 @@ namespace System.Data.SqlClient
}
}
+ internal void StartSession(object cancellationOwner)
+ {
+ _cancellationOwner.Target = cancellationOwner;
+ }
internal void ThrowExceptionAndWarning(bool callerHasConnectionLock = false, bool asyncClose = false)
{
diff --git a/src/System.Data.SqlClient/tests/ManualTests/SQL/CommandCancelTest/CommandCancelTest.cs b/src/System.Data.SqlClient/tests/ManualTests/SQL/CommandCancelTest/CommandCancelTest.cs
index acb612e1dc..17a28e53ee 100644
--- a/src/System.Data.SqlClient/tests/ManualTests/SQL/CommandCancelTest/CommandCancelTest.cs
+++ b/src/System.Data.SqlClient/tests/ManualTests/SQL/CommandCancelTest/CommandCancelTest.cs
@@ -3,6 +3,7 @@
// See the LICENSE file in the project root for more information.
using System.Threading;
+using System.Threading.Tasks;
using Xunit;
namespace System.Data.SqlClient.ManualTesting.Tests
@@ -13,12 +14,92 @@ namespace System.Data.SqlClient.ManualTesting.Tests
private static readonly string s_connStr = (new SqlConnectionStringBuilder(DataTestUtility.TcpConnStr) { PacketSize = 512 }).ConnectionString;
[CheckConnStrSetupFact]
+ public static void PlainCancelTest()
+ {
+ PlainCancel(s_connStr);
+ }
+
+ [CheckConnStrSetupFact]
+ public static void PlainMARSCancelTest()
+ {
+ PlainCancel((new SqlConnectionStringBuilder(s_connStr) { MultipleActiveResultSets = true }).ConnectionString);
+ }
+
+ [CheckConnStrSetupFact]
+ public static void PlainCancelTestAsync()
+ {
+ PlainCancelAsync(s_connStr);
+ }
+
+ [CheckConnStrSetupFact]
+ public static void PlainMARSCancelTestAsync()
+ {
+ PlainCancelAsync((new SqlConnectionStringBuilder(s_connStr) { MultipleActiveResultSets = true }).ConnectionString);
+ }
+
+ private static void PlainCancel(string connString)
+ {
+ using (SqlConnection conn = new SqlConnection(connString))
+ using (SqlCommand cmd = new SqlCommand("select * from dbo.Orders; waitfor delay '00:00:10'; select * from dbo.Orders", conn))
+ {
+ conn.Open();
+ using (SqlDataReader reader = cmd.ExecuteReader())
+ {
+ cmd.Cancel();
+ DataTestUtility.AssertThrowsWrapper<SqlException>(
+ () =>
+ {
+ do
+ {
+ while (reader.Read())
+ {
+ }
+ }
+ while (reader.NextResult());
+ },
+ "A severe error occurred on the current command. The results, if any, should be discarded.");
+ }
+ }
+ }
+
+ private static void PlainCancelAsync(string connString)
+ {
+ using (SqlConnection conn = new SqlConnection(connString))
+ using (SqlCommand cmd = new SqlCommand("select * from dbo.Orders; waitfor delay '00:00:10'; select * from dbo.Orders", conn))
+ {
+ conn.Open();
+ Task<SqlDataReader> readerTask = cmd.ExecuteReaderAsync();
+ DataTestUtility.AssertThrowsWrapper<SqlException>(
+ () =>
+ {
+ readerTask.Wait(2000);
+ SqlDataReader reader = readerTask.Result;
+ cmd.Cancel();
+ do
+ {
+ while (reader.Read())
+ {
+ }
+ }
+ while (reader.NextResult());
+ },
+ "A severe error occurred on the current command. The results, if any, should be discarded.");
+ }
+ }
+
+ [CheckConnStrSetupFact]
public static void MultiThreadedCancel_NonAsync()
{
MultiThreadedCancel(s_connStr, false);
}
[CheckConnStrSetupFact]
+ public static void MultiThreadedCancel_Async()
+ {
+ MultiThreadedCancel(s_connStr, true);
+ }
+
+ [CheckConnStrSetupFact]
public static void TimeoutCancel()
{
TimeoutCancel(s_connStr);
@@ -74,7 +155,7 @@ namespace System.Data.SqlClient.ManualTesting.Tests
}
}
- //InvalidOperationException from conenction.Dispose if that connection has prepared command cancelled during reading of data
+ //InvalidOperationException from connection.Dispose if that connection has prepared command cancelled during reading of data
private static void CancelAndDisposePreparedCommand(string constr)
{
int expectedValue = 1;
@@ -83,8 +164,7 @@ namespace System.Data.SqlClient.ManualTesting.Tests
try
{
// Generate a query with a large number of results.
- using (var command = new SqlCommand("select @P from sysobjects a cross join sysobjects b cross join sysobjects c cross join sysobjects d cross join sysobjects e cross join sysobjects f"
- , connection))
+ using (var command = new SqlCommand("select @P from sysobjects a cross join sysobjects b cross join sysobjects c cross join sysobjects d cross join sysobjects e cross join sysobjects f", connection))
{
command.Parameters.Add(new SqlParameter("@P", SqlDbType.Int) { Value = expectedValue });
connection.Open();
@@ -111,7 +191,6 @@ namespace System.Data.SqlClient.ManualTesting.Tests
}
}
-
private static void VerifyConnection(SqlCommand cmd)
{
Assert.True(cmd.Connection.State == ConnectionState.Open, "FAILURE: - unexpected non-open state after Execute!");
diff --git a/src/System.Data.SqlClient/tests/Tools/TDS/TDS/TDSPacketTokenType.cs b/src/System.Data.SqlClient/tests/Tools/TDS/TDS/TDSPacketTokenType.cs
deleted file mode 100644
index 7f002157e7..0000000000
--- a/src/System.Data.SqlClient/tests/Tools/TDS/TDS/TDSPacketTokenType.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-
-namespace Microsoft.SqlServer.TDS
-{
- /// <summary>
- /// Types of the tokens in data buffer of the packet
- /// </summary>
- public enum TDSPacketTokenType
- {
- AlternativeMetadata = 088,
- AlternativeRow = 0xD3,
- ColumnMetadata = 0x81,
- ColumnInfo = 0xA5,
- Done = 0xFD,
- DoneProcedure = 0xFE,
- DoneInProc = 0xFF,
- EnvironmentChange = 0xE3,
- Error = 0xAA,
- Info = 0xAB,
- LoginAcknowledgement = 0xAD,
- NBCRow = 0xD2,
- Offset = 0x78,
- Order = 0xA9,
- ReturnStatus = 0x79,
- ReturnValue = 0xAC,
- Row = 0xD1,
- SSPI = 0xED,
- TabbleName = 0xA4
- }
-}
diff --git a/src/System.Data.SqlClient/tests/Tools/TDS/TDS/TDSPacketType.cs b/src/System.Data.SqlClient/tests/Tools/TDS/TDS/TDSPacketType.cs
deleted file mode 100644
index 7e0cfe8f0a..0000000000
--- a/src/System.Data.SqlClient/tests/Tools/TDS/TDS/TDSPacketType.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-
-namespace Microsoft.SqlServer.TDS
-{
- /// <summary>
- /// Type of TDS packet
- /// </summary>
- public enum TDSPacketType: byte
- {
- SQLBatch = 1,
- PreTDS7Login = 2,
- RPC = 3,
- Response = 4,
- Attention = 6,
- BulkLoad = 7,
- TransactionManager = 14,
- TDS7Login = 16,
- SSPI = 17,
- PreLogin = 18
- }
-}
diff --git a/src/System.Diagnostics.DiagnosticSource/src/ILLinkTrim.xml b/src/System.Diagnostics.DiagnosticSource/src/ILLinkTrim.xml
new file mode 100644
index 0000000000..42a497a802
--- /dev/null
+++ b/src/System.Diagnostics.DiagnosticSource/src/ILLinkTrim.xml
@@ -0,0 +1,13 @@
+<linker>
+ <assembly fullname="System.Diagnostics.DiagnosticSource">
+ <type fullname="System.Diagnostics.DiagnosticSourceEventSource">
+ <!-- DiagnosticSourceEventSource calls these methods through reflection based on strings passed from user code -->
+ <method name="Activity1Start" />
+ <method name="Activity1Stop" />
+ <method name="Activity2Start" />
+ <method name="Activity2Stop" />
+ <method name="RecursiveActivity1Start" />
+ <method name="RecursiveActivity1Stop" />
+ </type>
+ </assembly>
+</linker> \ No newline at end of file
diff --git a/src/System.Diagnostics.PerformanceCounter/ref/System.Diagnostics.PerformanceCounter.cs b/src/System.Diagnostics.PerformanceCounter/ref/System.Diagnostics.PerformanceCounter.cs
index 51de719ca2..378c25acd5 100644
--- a/src/System.Diagnostics.PerformanceCounter/ref/System.Diagnostics.PerformanceCounter.cs
+++ b/src/System.Diagnostics.PerformanceCounter/ref/System.Diagnostics.PerformanceCounter.cs
@@ -30,7 +30,7 @@ namespace System.Diagnostics
public static bool operator ==(System.Diagnostics.CounterSample a, System.Diagnostics.CounterSample b) { throw null; }
public static bool operator !=(System.Diagnostics.CounterSample a, System.Diagnostics.CounterSample b) { throw null; }
}
- public sealed partial class PerformanceCounter
+ public sealed partial class PerformanceCounter : System.ComponentModel.Component, System.ComponentModel.ISupportInitialize
{
[System.ObsoleteAttribute("This field has been deprecated and is not used. Use machine.config or an application configuration file to set the size of the PerformanceCounter file mapping.")]
public static int DefaultFileMappingSize;
@@ -57,6 +57,8 @@ namespace System.Diagnostics
public bool ReadOnly { get { throw null; } set { } }
public void BeginInit() { }
public void Close() { }
+ public static void CloseSharedResources() { }
+ public long Decrement() { return default(long); }
public void EndInit() { }
public long Increment() { throw null; }
public long IncrementBy(long value) { throw null; }
diff --git a/src/System.Diagnostics.PerformanceCounter/ref/System.Diagnostics.PerformanceCounter.csproj b/src/System.Diagnostics.PerformanceCounter/ref/System.Diagnostics.PerformanceCounter.csproj
index 4a2d2c1d0f..e5cf52151c 100644
--- a/src/System.Diagnostics.PerformanceCounter/ref/System.Diagnostics.PerformanceCounter.csproj
+++ b/src/System.Diagnostics.PerformanceCounter/ref/System.Diagnostics.PerformanceCounter.csproj
@@ -7,10 +7,13 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Release|AnyCPU'" />
<ItemGroup>
- <Compile Include="System.Diagnostics.PerformanceCounter.cs" />
+ <Compile Include="System.Diagnostics.PerformanceCounter.cs">
+ <SubType>Component</SubType>
+ </Compile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\System.Runtime\ref\System.Runtime.csproj" />
+ <ProjectReference Include="..\..\System.ComponentModel.Primitives\ref\System.ComponentModel.Primitives.csproj" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
</Project> \ No newline at end of file
diff --git a/src/System.DirectoryServices.AccountManagement/System.DirectoryServices.AccountManagement.sln b/src/System.DirectoryServices.AccountManagement/System.DirectoryServices.AccountManagement.sln
index 4573e2f56a..6cc3f502e7 100644
--- a/src/System.DirectoryServices.AccountManagement/System.DirectoryServices.AccountManagement.sln
+++ b/src/System.DirectoryServices.AccountManagement/System.DirectoryServices.AccountManagement.sln
@@ -34,10 +34,10 @@ Global
{879C23DC-D828-4DFB-8E92-ABBC11B71035}.Debug|Any CPU.Build.0 = netstandard-Windows_NT-Debug|Any CPU
{879C23DC-D828-4DFB-8E92-ABBC11B71035}.Release|Any CPU.ActiveCfg = netstandard-Windows_NT-Release|Any CPU
{879C23DC-D828-4DFB-8E92-ABBC11B71035}.Release|Any CPU.Build.0 = netstandard-Windows_NT-Release|Any CPU
- {404455B6-466C-4F78-9DCC-C37DCC0B75DA}.Debug|Any CPU.ActiveCfg = netstandard-Windows_NT-Debug|Any CPU
- {404455B6-466C-4F78-9DCC-C37DCC0B75DA}.Debug|Any CPU.Build.0 = netstandard-Windows_NT-Debug|Any CPU
- {404455B6-466C-4F78-9DCC-C37DCC0B75DA}.Release|Any CPU.ActiveCfg = netstandard-Windows_NT-Release|Any CPU
- {404455B6-466C-4F78-9DCC-C37DCC0B75DA}.Release|Any CPU.Build.0 = netstandard-Windows_NT-Release|Any CPU
+ {404455B6-466C-4F78-9DCC-C37DCC0B75DA}.Debug|Any CPU.ActiveCfg = netstandard-Debug|Any CPU
+ {404455B6-466C-4F78-9DCC-C37DCC0B75DA}.Debug|Any CPU.Build.0 = netstandard-Debug|Any CPU
+ {404455B6-466C-4F78-9DCC-C37DCC0B75DA}.Release|Any CPU.ActiveCfg = netstandard-Release|Any CPU
+ {404455B6-466C-4F78-9DCC-C37DCC0B75DA}.Release|Any CPU.Build.0 = netstandard-Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/src/System.DirectoryServices.AccountManagement/ref/Configurations.props b/src/System.DirectoryServices.AccountManagement/ref/Configurations.props
index 249c8c18b4..c398e42e89 100644
--- a/src/System.DirectoryServices.AccountManagement/ref/Configurations.props
+++ b/src/System.DirectoryServices.AccountManagement/ref/Configurations.props
@@ -2,7 +2,7 @@
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<BuildConfigurations>
- netstandard-Windows_NT;
+ netstandard;
</BuildConfigurations>
</PropertyGroup>
</Project> \ No newline at end of file
diff --git a/src/System.DirectoryServices.AccountManagement/ref/System.DirectoryServices.AccountManagement.csproj b/src/System.DirectoryServices.AccountManagement/ref/System.DirectoryServices.AccountManagement.csproj
index 23fa9bd523..0bfe080660 100644
--- a/src/System.DirectoryServices.AccountManagement/ref/System.DirectoryServices.AccountManagement.csproj
+++ b/src/System.DirectoryServices.AccountManagement/ref/System.DirectoryServices.AccountManagement.csproj
@@ -4,14 +4,13 @@
<PropertyGroup>
<ProjectGuid>{404455B6-466C-4F78-9DCC-C37DCC0B75DA}</ProjectGuid>
</PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Windows_NT-Debug|AnyCPU'" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Windows_NT-Release|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Debug|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Release|AnyCPU'" />
<ItemGroup>
<Compile Include="System.DirectoryServices.AccountManagement.cs" />
</ItemGroup>
<ItemGroup>
- <Reference Include="System.Runtime" />
- <Reference Include="System.Security.Principal.Windows" />
+ <ProjectReference Include="..\..\System.Security.Principal.Windows\ref\System.Security.Principal.Windows.csproj" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
</Project> \ No newline at end of file
diff --git a/src/System.DirectoryServices.Protocols/System.DirectoryServices.Protocols.sln b/src/System.DirectoryServices.Protocols/System.DirectoryServices.Protocols.sln
index 16745bc9b6..78def5ce28 100644
--- a/src/System.DirectoryServices.Protocols/System.DirectoryServices.Protocols.sln
+++ b/src/System.DirectoryServices.Protocols/System.DirectoryServices.Protocols.sln
@@ -23,10 +23,10 @@ Global
{135980AC-4583-44EC-894E-CB3B1A481920}.Debug|Any CPU.Build.0 = netstandard-Windows_NT-Debug|Any CPU
{135980AC-4583-44EC-894E-CB3B1A481920}.Release|Any CPU.ActiveCfg = netstandard-Windows_NT-Release|Any CPU
{135980AC-4583-44EC-894E-CB3B1A481920}.Release|Any CPU.Build.0 = netstandard-Windows_NT-Release|Any CPU
- {7DEA4539-9A0D-4801-B229-3824710EBCEE}.Debug|Any CPU.ActiveCfg = netstandard-Windows_NT-Debug|Any CPU
- {7DEA4539-9A0D-4801-B229-3824710EBCEE}.Debug|Any CPU.Build.0 = netstandard-Windows_NT-Debug|Any CPU
- {7DEA4539-9A0D-4801-B229-3824710EBCEE}.Release|Any CPU.ActiveCfg = netstandard-Windows_NT-Release|Any CPU
- {7DEA4539-9A0D-4801-B229-3824710EBCEE}.Release|Any CPU.Build.0 = netstandard-Windows_NT-Release|Any CPU
+ {7DEA4539-9A0D-4801-B229-3824710EBCEE}.Debug|Any CPU.ActiveCfg = netstandard-Debug|Any CPU
+ {7DEA4539-9A0D-4801-B229-3824710EBCEE}.Debug|Any CPU.Build.0 = netstandard-Debug|Any CPU
+ {7DEA4539-9A0D-4801-B229-3824710EBCEE}.Release|Any CPU.ActiveCfg = netstandard-Release|Any CPU
+ {7DEA4539-9A0D-4801-B229-3824710EBCEE}.Release|Any CPU.Build.0 = netstandard-Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/src/System.DirectoryServices.Protocols/ref/Configurations.props b/src/System.DirectoryServices.Protocols/ref/Configurations.props
index 249c8c18b4..c398e42e89 100644
--- a/src/System.DirectoryServices.Protocols/ref/Configurations.props
+++ b/src/System.DirectoryServices.Protocols/ref/Configurations.props
@@ -2,7 +2,7 @@
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<BuildConfigurations>
- netstandard-Windows_NT;
+ netstandard;
</BuildConfigurations>
</PropertyGroup>
</Project> \ No newline at end of file
diff --git a/src/System.DirectoryServices.Protocols/ref/System.DirectoryServices.Protocols.csproj b/src/System.DirectoryServices.Protocols/ref/System.DirectoryServices.Protocols.csproj
index 774fae00c8..92afc4ee66 100644
--- a/src/System.DirectoryServices.Protocols/ref/System.DirectoryServices.Protocols.csproj
+++ b/src/System.DirectoryServices.Protocols/ref/System.DirectoryServices.Protocols.csproj
@@ -4,23 +4,14 @@
<PropertyGroup>
<ProjectGuid>{7DEA4539-9A0D-4801-B229-3824710EBCEE}</ProjectGuid>
</PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Windows_NT-Debug|AnyCPU'" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Windows_NT-Release|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Debug|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Release|AnyCPU'" />
<ItemGroup>
<Compile Include="System.DirectoryServices.Protocols.cs" />
- <ProjectReference Include="..\..\System.DirectoryServices\ref\System.DirectoryServices.csproj" />
</ItemGroup>
<ItemGroup>
- <Reference Include="System.Collections" />
- <Reference Include="System.Collections.NonGeneric" />
- <Reference Include="System.ComponentModel" />
- <Reference Include="System.IO.FileSystem.AccessControl" />
- <Reference Include="System.Runtime" />
- <Reference Include="System.Runtime.Extensions" />
- <Reference Include="System.Runtime.InteropServices" />
- <Reference Include="System.Security.AccessControl" />
- <Reference Include="System.Security.Permissions" />
- <Reference Include="System.Security.Principal.Windows" />
+ <ProjectReference Include="..\..\System.DirectoryServices\ref\System.DirectoryServices.csproj" />
+ <ProjectReference Include="..\..\System.Security.Principal.Windows\ref\System.Security.Principal.Windows.csproj" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
</Project> \ No newline at end of file
diff --git a/src/System.DirectoryServices/System.DirectoryServices.sln b/src/System.DirectoryServices/System.DirectoryServices.sln
index 5c64c91747..430c87fff1 100644
--- a/src/System.DirectoryServices/System.DirectoryServices.sln
+++ b/src/System.DirectoryServices/System.DirectoryServices.sln
@@ -23,10 +23,10 @@ Global
{EC9B0FBC-C3A2-44E6-BFC6-51E565061C28}.Debug|Any CPU.Build.0 = netstandard-Windows_NT-Debug|Any CPU
{EC9B0FBC-C3A2-44E6-BFC6-51E565061C28}.Release|Any CPU.ActiveCfg = netstandard-Windows_NT-Release|Any CPU
{EC9B0FBC-C3A2-44E6-BFC6-51E565061C28}.Release|Any CPU.Build.0 = netstandard-Windows_NT-Release|Any CPU
- {CBCDA53B-4C01-4267-B08C-413205FE4D8D}.Debug|Any CPU.ActiveCfg = netstandard-Windows_NT-Debug|Any CPU
- {CBCDA53B-4C01-4267-B08C-413205FE4D8D}.Debug|Any CPU.Build.0 = netstandard-Windows_NT-Debug|Any CPU
- {CBCDA53B-4C01-4267-B08C-413205FE4D8D}.Release|Any CPU.ActiveCfg = netstandard-Windows_NT-Release|Any CPU
- {CBCDA53B-4C01-4267-B08C-413205FE4D8D}.Release|Any CPU.Build.0 = netstandard-Windows_NT-Release|Any CPU
+ {CBCDA53B-4C01-4267-B08C-413205FE4D8D}.Debug|Any CPU.ActiveCfg = netstandard-Debug|Any CPU
+ {CBCDA53B-4C01-4267-B08C-413205FE4D8D}.Debug|Any CPU.Build.0 = netstandard-Debug|Any CPU
+ {CBCDA53B-4C01-4267-B08C-413205FE4D8D}.Release|Any CPU.ActiveCfg = netstandard-Release|Any CPU
+ {CBCDA53B-4C01-4267-B08C-413205FE4D8D}.Release|Any CPU.Build.0 = netstandard-Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/src/System.DirectoryServices/ref/Configurations.props b/src/System.DirectoryServices/ref/Configurations.props
index 249c8c18b4..c398e42e89 100644
--- a/src/System.DirectoryServices/ref/Configurations.props
+++ b/src/System.DirectoryServices/ref/Configurations.props
@@ -2,7 +2,7 @@
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<BuildConfigurations>
- netstandard-Windows_NT;
+ netstandard;
</BuildConfigurations>
</PropertyGroup>
</Project> \ No newline at end of file
diff --git a/src/System.DirectoryServices/ref/System.DirectoryServices.csproj b/src/System.DirectoryServices/ref/System.DirectoryServices.csproj
index 1d2846b80b..fe862affa0 100644
--- a/src/System.DirectoryServices/ref/System.DirectoryServices.csproj
+++ b/src/System.DirectoryServices/ref/System.DirectoryServices.csproj
@@ -4,19 +4,16 @@
<PropertyGroup>
<ProjectGuid>{CBCDA53B-4C01-4267-B08C-413205FE4D8D}</ProjectGuid>
</PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Windows_NT-Debug|AnyCPU'" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Windows_NT-Release|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Debug|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Release|AnyCPU'" />
<ItemGroup>
<Compile Include="System.DirectoryServices.cs" />
</ItemGroup>
<ItemGroup>
- <Reference Include="System.IO.FileSystem.AccessControl" />
- <Reference Include="System.Runtime" />
- <Reference Include="System.Runtime.Extensions" />
- <Reference Include="System.Runtime.InteropServices" />
- <Reference Include="System.Security.AccessControl" />
- <Reference Include="System.Security.Permissions" />
- <Reference Include="System.Security.Principal.Windows" />
+ <ProjectReference Include="..\..\System.IO.FileSystem.AccessControl\ref\System.IO.FileSystem.AccessControl.csproj" />
+ <ProjectReference Include="..\..\System.Security.AccessControl\ref\System.Security.AccessControl.csproj" />
+ <ProjectReference Include="..\..\System.Security.Permissions\ref\System.Security.Permissions.csproj" />
+ <ProjectReference Include="..\..\System.Security.Principal.Windows\ref\System.Security.Principal.Windows.csproj" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
</Project> \ No newline at end of file
diff --git a/src/System.Drawing.Primitives/ref/System.Drawing.Primitives.cs b/src/System.Drawing.Primitives/ref/System.Drawing.Primitives.cs
index 9e7d3c63a9..e28d6de3f0 100644
--- a/src/System.Drawing.Primitives/ref/System.Drawing.Primitives.cs
+++ b/src/System.Drawing.Primitives/ref/System.Drawing.Primitives.cs
@@ -72,9 +72,7 @@ namespace System.Drawing
public static System.Drawing.Color IndianRed { get { throw null; } }
public static System.Drawing.Color Indigo { get { throw null; } }
public bool IsEmpty { get { throw null; } }
- public bool IsKnownColor { get { throw null; } }
public bool IsNamedColor { get { throw null; } }
- public bool IsSystemColor { get { throw null; } }
public static System.Drawing.Color Ivory { get { throw null; } }
public static System.Drawing.Color Khaki { get { throw null; } }
public static System.Drawing.Color Lavender { get { throw null; } }
@@ -167,7 +165,6 @@ namespace System.Drawing
public static System.Drawing.Color FromArgb(int alpha, System.Drawing.Color baseColor) { throw null; }
public static System.Drawing.Color FromArgb(int red, int green, int blue) { throw null; }
public static System.Drawing.Color FromArgb(int alpha, int red, int green, int blue) { throw null; }
- public static System.Drawing.Color FromKnownColor(System.Drawing.KnownColor color) { throw null; }
public static System.Drawing.Color FromName(string name) { throw null; }
public float GetBrightness() { throw null; }
public override int GetHashCode() { throw null; }
@@ -176,186 +173,8 @@ namespace System.Drawing
public static bool operator ==(System.Drawing.Color left, System.Drawing.Color right) { throw null; }
public static bool operator !=(System.Drawing.Color left, System.Drawing.Color right) { throw null; }
public int ToArgb() { throw null; }
- public System.Drawing.KnownColor ToKnownColor() { throw null; }
public override string ToString() { throw null; }
}
- public enum KnownColor
- {
- ActiveBorder = 1,
- ActiveCaption = 2,
- ActiveCaptionText = 3,
- AliceBlue = 28,
- AntiqueWhite = 29,
- AppWorkspace = 4,
- Aqua = 30,
- Aquamarine = 31,
- Azure = 32,
- Beige = 33,
- Bisque = 34,
- Black = 35,
- BlanchedAlmond = 36,
- Blue = 37,
- BlueViolet = 38,
- Brown = 39,
- BurlyWood = 40,
- ButtonFace = 168,
- ButtonHighlight = 169,
- ButtonShadow = 170,
- CadetBlue = 41,
- Chartreuse = 42,
- Chocolate = 43,
- Control = 5,
- ControlDark = 6,
- ControlDarkDark = 7,
- ControlLight = 8,
- ControlLightLight = 9,
- ControlText = 10,
- Coral = 44,
- CornflowerBlue = 45,
- Cornsilk = 46,
- Crimson = 47,
- Cyan = 48,
- DarkBlue = 49,
- DarkCyan = 50,
- DarkGoldenrod = 51,
- DarkGray = 52,
- DarkGreen = 53,
- DarkKhaki = 54,
- DarkMagenta = 55,
- DarkOliveGreen = 56,
- DarkOrange = 57,
- DarkOrchid = 58,
- DarkRed = 59,
- DarkSalmon = 60,
- DarkSeaGreen = 61,
- DarkSlateBlue = 62,
- DarkSlateGray = 63,
- DarkTurquoise = 64,
- DarkViolet = 65,
- DeepPink = 66,
- DeepSkyBlue = 67,
- Desktop = 11,
- DimGray = 68,
- DodgerBlue = 69,
- Firebrick = 70,
- FloralWhite = 71,
- ForestGreen = 72,
- Fuchsia = 73,
- Gainsboro = 74,
- GhostWhite = 75,
- Gold = 76,
- Goldenrod = 77,
- GradientActiveCaption = 171,
- GradientInactiveCaption = 172,
- Gray = 78,
- GrayText = 12,
- Green = 79,
- GreenYellow = 80,
- Highlight = 13,
- HighlightText = 14,
- Honeydew = 81,
- HotPink = 82,
- HotTrack = 15,
- InactiveBorder = 16,
- InactiveCaption = 17,
- InactiveCaptionText = 18,
- IndianRed = 83,
- Indigo = 84,
- Info = 19,
- InfoText = 20,
- Ivory = 85,
- Khaki = 86,
- Lavender = 87,
- LavenderBlush = 88,
- LawnGreen = 89,
- LemonChiffon = 90,
- LightBlue = 91,
- LightCoral = 92,
- LightCyan = 93,
- LightGoldenrodYellow = 94,
- LightGray = 95,
- LightGreen = 96,
- LightPink = 97,
- LightSalmon = 98,
- LightSeaGreen = 99,
- LightSkyBlue = 100,
- LightSlateGray = 101,
- LightSteelBlue = 102,
- LightYellow = 103,
- Lime = 104,
- LimeGreen = 105,
- Linen = 106,
- Magenta = 107,
- Maroon = 108,
- MediumAquamarine = 109,
- MediumBlue = 110,
- MediumOrchid = 111,
- MediumPurple = 112,
- MediumSeaGreen = 113,
- MediumSlateBlue = 114,
- MediumSpringGreen = 115,
- MediumTurquoise = 116,
- MediumVioletRed = 117,
- Menu = 21,
- MenuBar = 173,
- MenuHighlight = 174,
- MenuText = 22,
- MidnightBlue = 118,
- MintCream = 119,
- MistyRose = 120,
- Moccasin = 121,
- NavajoWhite = 122,
- Navy = 123,
- OldLace = 124,
- Olive = 125,
- OliveDrab = 126,
- Orange = 127,
- OrangeRed = 128,
- Orchid = 129,
- PaleGoldenrod = 130,
- PaleGreen = 131,
- PaleTurquoise = 132,
- PaleVioletRed = 133,
- PapayaWhip = 134,
- PeachPuff = 135,
- Peru = 136,
- Pink = 137,
- Plum = 138,
- PowderBlue = 139,
- Purple = 140,
- Red = 141,
- RosyBrown = 142,
- RoyalBlue = 143,
- SaddleBrown = 144,
- Salmon = 145,
- SandyBrown = 146,
- ScrollBar = 23,
- SeaGreen = 147,
- SeaShell = 148,
- Sienna = 149,
- Silver = 150,
- SkyBlue = 151,
- SlateBlue = 152,
- SlateGray = 153,
- Snow = 154,
- SpringGreen = 155,
- SteelBlue = 156,
- Tan = 157,
- Teal = 158,
- Thistle = 159,
- Tomato = 160,
- Transparent = 27,
- Turquoise = 161,
- Violet = 162,
- Wheat = 163,
- White = 164,
- WhiteSmoke = 165,
- Window = 24,
- WindowFrame = 25,
- WindowText = 26,
- Yellow = 166,
- YellowGreen = 167,
- }
public partial struct Point : System.IEquatable<System.Drawing.Point>
{
public static readonly System.Drawing.Point Empty;
@@ -546,40 +365,4 @@ namespace System.Drawing
public System.Drawing.Size ToSize() { throw null; }
public override string ToString() { throw null; }
}
- public static partial class SystemColors
- {
- public static System.Drawing.Color ActiveBorder { get { throw null; } }
- public static System.Drawing.Color ActiveCaption { get { throw null; } }
- public static System.Drawing.Color ActiveCaptionText { get { throw null; } }
- public static System.Drawing.Color AppWorkspace { get { throw null; } }
- public static System.Drawing.Color ButtonFace { get { throw null; } }
- public static System.Drawing.Color ButtonHighlight { get { throw null; } }
- public static System.Drawing.Color ButtonShadow { get { throw null; } }
- public static System.Drawing.Color Control { get { throw null; } }
- public static System.Drawing.Color ControlDark { get { throw null; } }
- public static System.Drawing.Color ControlDarkDark { get { throw null; } }
- public static System.Drawing.Color ControlLight { get { throw null; } }
- public static System.Drawing.Color ControlLightLight { get { throw null; } }
- public static System.Drawing.Color ControlText { get { throw null; } }
- public static System.Drawing.Color Desktop { get { throw null; } }
- public static System.Drawing.Color GradientActiveCaption { get { throw null; } }
- public static System.Drawing.Color GradientInactiveCaption { get { throw null; } }
- public static System.Drawing.Color GrayText { get { throw null; } }
- public static System.Drawing.Color Highlight { get { throw null; } }
- public static System.Drawing.Color HighlightText { get { throw null; } }
- public static System.Drawing.Color HotTrack { get { throw null; } }
- public static System.Drawing.Color InactiveBorder { get { throw null; } }
- public static System.Drawing.Color InactiveCaption { get { throw null; } }
- public static System.Drawing.Color InactiveCaptionText { get { throw null; } }
- public static System.Drawing.Color Info { get { throw null; } }
- public static System.Drawing.Color InfoText { get { throw null; } }
- public static System.Drawing.Color Menu { get { throw null; } }
- public static System.Drawing.Color MenuBar { get { throw null; } }
- public static System.Drawing.Color MenuHighlight { get { throw null; } }
- public static System.Drawing.Color MenuText { get { throw null; } }
- public static System.Drawing.Color ScrollBar { get { throw null; } }
- public static System.Drawing.Color Window { get { throw null; } }
- public static System.Drawing.Color WindowFrame { get { throw null; } }
- public static System.Drawing.Color WindowText { get { throw null; } }
- }
}
diff --git a/src/System.Drawing.Primitives/src/System.Drawing.Primitives.csproj b/src/System.Drawing.Primitives/src/System.Drawing.Primitives.csproj
index e000d8d2ea..0cd290b3b9 100644
--- a/src/System.Drawing.Primitives/src/System.Drawing.Primitives.csproj
+++ b/src/System.Drawing.Primitives/src/System.Drawing.Primitives.csproj
@@ -37,7 +37,6 @@
</Compile>
<Compile Include="System\Drawing\KnownColor.cs" />
<Compile Include="System\Drawing\KnownColorTable.cs" />
- <Compile Include="System\Drawing\SystemColors.cs" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
</Project> \ No newline at end of file
diff --git a/src/System.Drawing.Primitives/src/System/Drawing/Color.cs b/src/System.Drawing.Primitives/src/System/Drawing/Color.cs
index aa38fd658c..07ff82e444 100644
--- a/src/System.Drawing.Primitives/src/System/Drawing/Color.cs
+++ b/src/System.Drawing.Primitives/src/System/Drawing/Color.cs
@@ -363,14 +363,12 @@ namespace System.Drawing
public byte A => (byte)((Value >> ARGBAlphaShift) & 0xFF);
- public bool IsKnownColor => ((state & StateKnownColorValid) != 0);
+ private bool IsKnownColor => ((state & StateKnownColorValid) != 0);
public bool IsEmpty => state == 0;
public bool IsNamedColor => ((state & StateNameValid) != 0) || IsKnownColor;
- public bool IsSystemColor => IsKnownColor && ((((KnownColor)knownColor) <= KnownColor.WindowText) || (((KnownColor)knownColor) > KnownColor.YellowGreen));
-
// Not localized because it's only used for the DebuggerDisplayAttribute, and the values are
// programmatic items.
// Also, don't inline into the attribute for performance reasons. This way means the debugger
@@ -451,10 +449,10 @@ namespace System.Drawing
public static Color FromArgb(int red, int green, int blue) => FromArgb(255, red, green, blue);
- public static Color FromKnownColor(KnownColor color)
+ private static Color FromKnownColor(KnownColor color)
{
var value = (int)color;
- if (value < (int)KnownColor.ActiveBorder || value > (int)KnownColor.MenuHighlight)
+ if (value < (int)KnownColor.FirstColor || value > (int)KnownColor.LastColor)
{
return FromName(color.ToString());
}
@@ -576,7 +574,7 @@ namespace System.Drawing
public int ToArgb() => unchecked((int)Value);
- public KnownColor ToKnownColor() => (KnownColor)knownColor;
+ private KnownColor ToKnownColor() => (KnownColor)knownColor;
public override string ToString()
{
diff --git a/src/System.Drawing.Primitives/src/System/Drawing/KnownColor.cs b/src/System.Drawing.Primitives/src/System/Drawing/KnownColor.cs
index 2385fa9fdc..450f3bfbf7 100644
--- a/src/System.Drawing.Primitives/src/System/Drawing/KnownColor.cs
+++ b/src/System.Drawing.Primitives/src/System/Drawing/KnownColor.cs
@@ -7,7 +7,7 @@ using System.Diagnostics.CodeAnalysis;
namespace System.Drawing
{
[SuppressMessage("Microsoft.Design", "CA1008:EnumsShouldHaveZeroValue")]
- public enum KnownColor
+ internal enum KnownColor
{
// This enum is order dependant!!!
//
@@ -19,6 +19,7 @@ namespace System.Drawing
// 0 - reserved for "not a known color"
// "System" colors
+ /*
ActiveBorder = 1,
ActiveCaption,
ActiveCaptionText,
@@ -45,9 +46,11 @@ namespace System.Drawing
Window,
WindowFrame,
WindowText,
+ */
// "Web" Colors
- Transparent,
+ FirstColor = 0,
+ Transparent = FirstColor,
AliceBlue,
AntiqueWhite,
Aqua,
@@ -188,9 +191,11 @@ namespace System.Drawing
WhiteSmoke,
Yellow,
YellowGreen,
+ LastColor = YellowGreen
// NEW ADDITIONS IN WHIDBEY - DO NOT MOVE THESE UP OR IT WILL BE A BREAKING CHANGE
+ /*
ButtonFace,
ButtonHighlight,
ButtonShadow,
@@ -198,5 +203,6 @@ namespace System.Drawing
GradientInactiveCaption,
MenuBar,
MenuHighlight,
+ */
}
} \ No newline at end of file
diff --git a/src/System.Drawing.Primitives/src/System/Drawing/KnownColorTable.cs b/src/System.Drawing.Primitives/src/System/Drawing/KnownColorTable.cs
index f24e967849..390e695844 100644
--- a/src/System.Drawing.Primitives/src/System/Drawing/KnownColorTable.cs
+++ b/src/System.Drawing.Primitives/src/System/Drawing/KnownColorTable.cs
@@ -21,11 +21,7 @@ namespace System.Drawing
private static void InitColorTable()
{
- int[] values = new int[(int)KnownColor.MenuHighlight + 1];
-
- // system
- //
- UpdateSystemColors(values);
+ int[] values = new int[KnownColor.LastColor - KnownColor.FirstColor + 1];
// just consts...
//
@@ -185,44 +181,10 @@ namespace System.Drawing
private static void InitColorNameTable()
{
- string[] values = new string[((int)KnownColor.MenuHighlight) + 1];
+ string[] values = new string[KnownColor.LastColor - KnownColor.FirstColor + 1];
// just consts...
//
- values[(int)KnownColor.ActiveBorder] = "ActiveBorder";
- values[(int)KnownColor.ActiveCaption] = "ActiveCaption";
- values[(int)KnownColor.ActiveCaptionText] = "ActiveCaptionText";
- values[(int)KnownColor.AppWorkspace] = "AppWorkspace";
- values[(int)KnownColor.ButtonFace] = "ButtonFace";
- values[(int)KnownColor.ButtonHighlight] = "ButtonHighlight";
- values[(int)KnownColor.ButtonShadow] = "ButtonShadow";
- values[(int)KnownColor.Control] = "Control";
- values[(int)KnownColor.ControlDark] = "ControlDark";
- values[(int)KnownColor.ControlDarkDark] = "ControlDarkDark";
- values[(int)KnownColor.ControlLight] = "ControlLight";
- values[(int)KnownColor.ControlLightLight] = "ControlLightLight";
- values[(int)KnownColor.ControlText] = "ControlText";
- values[(int)KnownColor.Desktop] = "Desktop";
- values[(int)KnownColor.GradientActiveCaption] = "GradientActiveCaption";
- values[(int)KnownColor.GradientInactiveCaption] = "GradientInactiveCaption";
- values[(int)KnownColor.GrayText] = "GrayText";
- values[(int)KnownColor.Highlight] = "Highlight";
- values[(int)KnownColor.HighlightText] = "HighlightText";
- values[(int)KnownColor.HotTrack] = "HotTrack";
- values[(int)KnownColor.InactiveBorder] = "InactiveBorder";
- values[(int)KnownColor.InactiveCaption] = "InactiveCaption";
- values[(int)KnownColor.InactiveCaptionText] = "InactiveCaptionText";
- values[(int)KnownColor.Info] = "Info";
- values[(int)KnownColor.InfoText] = "InfoText";
- values[(int)KnownColor.Menu] = "Menu";
- values[(int)KnownColor.MenuBar] = "MenuBar";
- values[(int)KnownColor.MenuHighlight] = "MenuHighlight";
- values[(int)KnownColor.MenuText] = "MenuText";
- values[(int)KnownColor.ScrollBar] = "ScrollBar";
- values[(int)KnownColor.Window] = "Window";
- values[(int)KnownColor.WindowFrame] = "WindowFrame";
- values[(int)KnownColor.WindowText] = "WindowText";
-
values[(int)KnownColor.Transparent] = "Transparent";
values[(int)KnownColor.AliceBlue] = "AliceBlue";
values[(int)KnownColor.AntiqueWhite] = "AntiqueWhite";
@@ -370,7 +332,7 @@ namespace System.Drawing
public static int KnownColorToArgb(KnownColor color)
{
EnsureColorTable();
- if (color <= KnownColor.MenuHighlight)
+ if (color >= KnownColor.FirstColor && color <= KnownColor.LastColor)
{
return s_colorTable[(int)color];
}
@@ -383,7 +345,7 @@ namespace System.Drawing
public static string KnownColorToName(KnownColor color)
{
EnsureColorNameTable();
- if (color <= KnownColor.MenuHighlight)
+ if (color >= KnownColor.FirstColor && color <= KnownColor.LastColor)
{
return s_colorNameTable[(int)color];
}
@@ -392,43 +354,5 @@ namespace System.Drawing
return null;
}
}
-
- private static void UpdateSystemColors(int[] colorTable)
- {
- // Colors from a default XP desktop for use by UI designers in ASP.NET: <EMAIL>mcartwri</EMAIL>
- colorTable[(int)KnownColor.ActiveBorder] = unchecked((int)0xffd4d0c8);
- colorTable[(int)KnownColor.ActiveCaption] = unchecked((int)0xff0054e3);
- colorTable[(int)KnownColor.ActiveCaptionText] = unchecked((int)0xffffffff);
- colorTable[(int)KnownColor.AppWorkspace] = unchecked((int)0xff808080);
- colorTable[(int)KnownColor.ButtonFace] = unchecked((int)0x0);
- colorTable[(int)KnownColor.ButtonHighlight] = unchecked((int)0x0);
- colorTable[(int)KnownColor.ButtonShadow] = unchecked((int)0x0);
- colorTable[(int)KnownColor.Control] = unchecked((int)0xffece9d8);
- colorTable[(int)KnownColor.ControlDark] = unchecked((int)0xffaca899);
- colorTable[(int)KnownColor.ControlDarkDark] = unchecked((int)0xff716f64);
- colorTable[(int)KnownColor.ControlLight] = unchecked((int)0xfff1efe2);
- colorTable[(int)KnownColor.ControlLightLight] = unchecked((int)0xffffffff);
- colorTable[(int)KnownColor.ControlText] = unchecked((int)0xff000000);
- colorTable[(int)KnownColor.Desktop] = unchecked((int)0xff004e98);
- colorTable[(int)KnownColor.GradientActiveCaption] = unchecked((int)0x0);
- colorTable[(int)KnownColor.GradientInactiveCaption] = unchecked((int)0x0);
- colorTable[(int)KnownColor.GrayText] = unchecked((int)0xffaca899);
- colorTable[(int)KnownColor.Highlight] = unchecked((int)0xff316ac5);
- colorTable[(int)KnownColor.HighlightText] = unchecked((int)0xffffffff);
- colorTable[(int)KnownColor.HotTrack] = unchecked((int)0xff000080);
- colorTable[(int)KnownColor.InactiveBorder] = unchecked((int)0xffd4d0c8);
- colorTable[(int)KnownColor.InactiveCaption] = unchecked((int)0xff7a96df);
- colorTable[(int)KnownColor.InactiveCaptionText] = unchecked((int)0xffd8e4f8);
- colorTable[(int)KnownColor.Info] = unchecked((int)0xffffffe1);
- colorTable[(int)KnownColor.InfoText] = unchecked((int)0xff000000);
- colorTable[(int)KnownColor.Menu] = unchecked((int)0xffffffff);
- colorTable[(int)KnownColor.MenuBar] = unchecked((int)0x0);
- colorTable[(int)KnownColor.MenuHighlight] = unchecked((int)0x0);
- colorTable[(int)KnownColor.MenuText] = unchecked((int)0xff000000);
- colorTable[(int)KnownColor.ScrollBar] = unchecked((int)0xffd4d0c8);
- colorTable[(int)KnownColor.Window] = unchecked((int)0xffffffff);
- colorTable[(int)KnownColor.WindowFrame] = unchecked((int)0xff000000);
- colorTable[(int)KnownColor.WindowText] = unchecked((int)0xff000000);
- }
}
}
diff --git a/src/System.Drawing.Primitives/src/System/Drawing/SystemColors.cs b/src/System.Drawing.Primitives/src/System/Drawing/SystemColors.cs
deleted file mode 100644
index 6f8e4ad98f..0000000000
--- a/src/System.Drawing.Primitives/src/System/Drawing/SystemColors.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Drawing
-{
- public static class SystemColors
- {
- public static Color ActiveBorder => new Color(KnownColor.ActiveBorder);
-
- public static Color ActiveCaption => new Color(KnownColor.ActiveCaption);
-
- public static Color ActiveCaptionText => new Color(KnownColor.ActiveCaptionText);
-
- public static Color AppWorkspace => new Color(KnownColor.AppWorkspace);
-
- public static Color ButtonFace => new Color(KnownColor.ButtonFace);
-
- public static Color ButtonHighlight => new Color(KnownColor.ButtonHighlight);
-
- public static Color ButtonShadow => new Color(KnownColor.ButtonShadow);
-
- public static Color Control => new Color(KnownColor.Control);
-
- public static Color ControlDark => new Color(KnownColor.ControlDark);
-
- public static Color ControlDarkDark => new Color(KnownColor.ControlDarkDark);
-
- public static Color ControlLight => new Color(KnownColor.ControlLight);
-
- public static Color ControlLightLight => new Color(KnownColor.ControlLightLight);
-
- public static Color ControlText => new Color(KnownColor.ControlText);
-
- public static Color Desktop => new Color(KnownColor.Desktop);
-
- public static Color GradientActiveCaption => new Color(KnownColor.GradientActiveCaption);
-
- public static Color GradientInactiveCaption => new Color(KnownColor.GradientInactiveCaption);
-
- public static Color GrayText => new Color(KnownColor.GrayText);
-
- public static Color Highlight => new Color(KnownColor.Highlight);
-
- public static Color HighlightText => new Color(KnownColor.HighlightText);
-
- public static Color HotTrack => new Color(KnownColor.HotTrack);
-
- public static Color InactiveBorder => new Color(KnownColor.InactiveBorder);
-
- public static Color InactiveCaption => new Color(KnownColor.InactiveCaption);
-
- public static Color InactiveCaptionText => new Color(KnownColor.InactiveCaptionText);
-
- public static Color Info => new Color(KnownColor.Info);
-
- public static Color InfoText => new Color(KnownColor.InfoText);
-
- public static Color Menu => new Color(KnownColor.Menu);
-
- public static Color MenuBar => new Color(KnownColor.MenuBar);
-
- public static Color MenuHighlight => new Color(KnownColor.MenuHighlight);
-
- public static Color MenuText => new Color(KnownColor.MenuText);
-
- public static Color ScrollBar => new Color(KnownColor.ScrollBar);
-
- public static Color Window => new Color(KnownColor.Window);
-
- public static Color WindowFrame => new Color(KnownColor.WindowFrame);
-
- public static Color WindowText => new Color(KnownColor.WindowText);
- }
-} \ No newline at end of file
diff --git a/src/System.Drawing.Primitives/tests/ColorTests.cs b/src/System.Drawing.Primitives/tests/ColorTests.cs
index 3798160347..a80796a587 100644
--- a/src/System.Drawing.Primitives/tests/ColorTests.cs
+++ b/src/System.Drawing.Primitives/tests/ColorTests.cs
@@ -157,7 +157,9 @@ namespace System.Drawing.Primitives.Tests
new object[] {"YellowGreen", 255, 154, 205, 50},
};
- public static IEnumerable<object[]> ColorNames => Enum.GetNames(typeof(KnownColor)).Select(n => new object[] { n });
+ public static IEnumerable<object[]> ColorNames => typeof(Color).GetProperties()
+ .Where(p => p.PropertyType == typeof(Color))
+ .Select(p => new object[] { p.Name} );
private Color? GetColorByProperty(string name)
{
@@ -215,37 +217,13 @@ namespace System.Drawing.Primitives.Tests
}
[Fact]
- public void IsKnownColor()
- {
- Assert.True(Color.FromKnownColor(KnownColor.AliceBlue).IsKnownColor);
- Assert.True(Color.FromName("AliceBlue").IsKnownColor);
-
- Assert.False(Color.FromKnownColor((KnownColor)(-1)).IsKnownColor);
- Assert.False(Color.FromKnownColor((KnownColor)(12345)).IsKnownColor);
- Assert.False(Color.FromName("SomethingNotAColor").IsKnownColor);
- Assert.False(Color.FromArgb(Color.AliceBlue.A, Color.AliceBlue.R, Color.AliceBlue.G, Color.AliceBlue.B).IsKnownColor);
- }
-
- [Fact]
public void IsNamedColor()
{
Assert.True(Color.AliceBlue.IsNamedColor);
- Assert.True(Color.FromKnownColor(KnownColor.AliceBlue).IsNamedColor);
Assert.True(Color.FromName("AliceBlue").IsNamedColor);
Assert.False(Color.FromArgb(Color.AliceBlue.A, Color.AliceBlue.R, Color.AliceBlue.G, Color.AliceBlue.B).IsNamedColor);
}
- [Fact]
- public void IsSystemColor()
- {
- Color c = Color.FromKnownColor(KnownColor.ActiveBorder);
- Assert.True(c.IsSystemColor);
- Assert.True(Color.FromName("ActiveBorder").IsSystemColor);
- Assert.False(Color.FromArgb(c.A, c.R, c.G, c.B).IsSystemColor);
- Assert.False(Color.FromKnownColor(KnownColor.AliceBlue).IsSystemColor);
- Assert.False(Color.FromName("AliceBlue").IsSystemColor);
- }
-
[Theory]
[MemberData(nameof(ColorNames))]
public void KnownNames(string name)
@@ -285,19 +263,6 @@ namespace System.Drawing.Primitives.Tests
Assert.Equal(argb, Color.FromArgb(alpha, red, green, blue).ToArgb());
}
- [Theory]
- [MemberData(nameof(ColorNames))]
- public void ToKnownColor(string name)
- {
- var knownColor = (KnownColor)Enum.Parse(typeof(KnownColor), name);
- var colorByProperty = GetColorByProperty(name);
- if (colorByProperty.HasValue)
- {
- Assert.Equal(knownColor, colorByProperty.Value.ToKnownColor());
- }
- Assert.Equal(knownColor, Color.FromName(name).ToKnownColor());
- }
-
[Fact]
public void ToStringEmpty()
{
@@ -384,7 +349,7 @@ namespace System.Drawing.Primitives.Tests
Color.FromArgb(0, 0, 0, blue);
});
}
-
+
[Fact]
public void FromName_Invalid()
{
@@ -393,7 +358,7 @@ namespace System.Drawing.Primitives.Tests
Assert.Equal(0, c.ToArgb());
Assert.Equal("OingoBoingo", c.Name);
}
-
+
private void CheckRed(Color color)
{
Assert.Equal(255, color.A);
@@ -402,9 +367,7 @@ namespace System.Drawing.Primitives.Tests
Assert.Equal(0, color.B);
Assert.Equal("Red", color.Name);
Assert.False(color.IsEmpty, "IsEmpty");
- Assert.True(color.IsKnownColor, "IsKnownColor");
Assert.True(color.IsNamedColor, "IsNamedColor");
- Assert.False(color.IsSystemColor, "IsSystemColor");
}
[Theory]
@@ -472,9 +435,6 @@ namespace System.Drawing.Primitives.Tests
public static IEnumerable<object[]> Equality_MemberData()
{
- yield return new object[] { Color.FromKnownColor(KnownColor.AliceBlue), Color.FromKnownColor(KnownColor.AliceBlue), true };
- yield return new object[] { Color.FromKnownColor(KnownColor.AliceBlue), Color.FromKnownColor(KnownColor.Aquamarine), false };
-
yield return new object[] { Color.AliceBlue, Color.AliceBlue, true };
yield return new object[] { Color.AliceBlue, Color.White, false};
yield return new object[] { Color.AliceBlue, Color.Black, false };
diff --git a/src/System.Drawing.Primitives/tests/PointFTests.cs b/src/System.Drawing.Primitives/tests/PointFTests.cs
index ea44508779..4abd31ba7d 100644
--- a/src/System.Drawing.Primitives/tests/PointFTests.cs
+++ b/src/System.Drawing.Primitives/tests/PointFTests.cs
@@ -3,7 +3,7 @@
// See the LICENSE file in the project root for more information.
using System.Globalization;
-
+using System.Reflection;
using Xunit;
namespace System.Drawing.PrimitivesTests
@@ -132,7 +132,13 @@ namespace System.Drawing.PrimitivesTests
var point = new PointF(0, 0);
Assert.False(point.Equals(null));
Assert.False(point.Equals(0));
- Assert.True(point.Equals(new Point(0, 0))); // Implicit cast
+
+ // If PointF implements IEquatable<PointF> (e.g. in .NET Core), then classes that are implicitly
+ // convertible to PointF can potentially be equal.
+ // See https://github.com/dotnet/corefx/issues/5255.
+ bool expectsImplicitCastToPointF = typeof(IEquatable<PointF>).IsAssignableFrom(point.GetType());
+ Assert.Equal(expectsImplicitCastToPointF, point.Equals(new Point(0, 0)));
+
Assert.False(point.Equals((object)new Point(0, 0))); // No implicit cast
}
diff --git a/src/System.Drawing.Primitives/tests/RectangleFTests.cs b/src/System.Drawing.Primitives/tests/RectangleFTests.cs
index 9d0c472d33..ff5b592034 100644
--- a/src/System.Drawing.Primitives/tests/RectangleFTests.cs
+++ b/src/System.Drawing.Primitives/tests/RectangleFTests.cs
@@ -126,7 +126,13 @@ namespace System.Drawing.PrimitivesTest
var rectangle = new RectangleF(0, 0, 0, 0);
Assert.False(rectangle.Equals(null));
Assert.False(rectangle.Equals(0));
- Assert.True(rectangle.Equals(new Rectangle(0, 0, 0, 0))); // Implicit cast
+
+ // If RectangleF implements IEquatable<RectangleF> (e.g. in .NET Core), then classes that are implicitly
+ // convertible to RectangleF can potentially be equal.
+ // See https://github.com/dotnet/corefx/issues/5255.
+ bool expectsImplicitCastToRectangleF = typeof(IEquatable<RectangleF>).IsAssignableFrom(rectangle.GetType());
+ Assert.Equal(expectsImplicitCastToRectangleF, rectangle.Equals(new Rectangle(0, 0, 0, 0)));
+
Assert.False(rectangle.Equals((object)new Rectangle(0, 0, 0, 0))); // No implicit cast
}
diff --git a/src/System.Drawing.Primitives/tests/SerializationTests.cs b/src/System.Drawing.Primitives/tests/SerializationTests.cs
index acd62b1064..30cc4d5ec8 100644
--- a/src/System.Drawing.Primitives/tests/SerializationTests.cs
+++ b/src/System.Drawing.Primitives/tests/SerializationTests.cs
@@ -13,7 +13,7 @@ namespace System.Drawing.Primitives.Tests
public static IEnumerable<object[]> Color_Roundtrip_MemberData()
{
yield return new object[] { default(Color) };
- yield return new object[] { Color.FromKnownColor(KnownColor.AliceBlue) };
+ yield return new object[] { Color.FromName("AliceBlue") };
yield return new object[] { Color.AliceBlue };
yield return new object[] { Color.FromArgb(255, 1, 2, 3) };
yield return new object[] { Color.FromArgb(0, 1, 2, 3) };
diff --git a/src/System.Drawing.Primitives/tests/SizeFTests.cs b/src/System.Drawing.Primitives/tests/SizeFTests.cs
index 0caa768e26..84b9de65b2 100644
--- a/src/System.Drawing.Primitives/tests/SizeFTests.cs
+++ b/src/System.Drawing.Primitives/tests/SizeFTests.cs
@@ -108,7 +108,13 @@ namespace System.Drawing.PrimitivesTest
var size = new SizeF(0, 0);
Assert.False(size.Equals(null));
Assert.False(size.Equals(0));
- Assert.True(size.Equals(new Size(0, 0))); // Implicit cast
+
+ // If SizeF implements IEquatable<SizeF> (e.g in .NET Core), then classes that are implicitly
+ // convertible to SizeF can potentially be equal.
+ // See https://github.com/dotnet/corefx/issues/5255.
+ bool expectsImplicitCastToSizeF = typeof(IEquatable<SizeF>).IsAssignableFrom(size.GetType());
+ Assert.Equal(expectsImplicitCastToSizeF, size.Equals(new Size(0, 0)));
+
Assert.False(size.Equals((object)new Size(0, 0))); // No implicit cast
}
diff --git a/src/System.Globalization/System.Globalization.sln b/src/System.Globalization/System.Globalization.sln
index 505fd4d2b3..689edaa14b 100644
--- a/src/System.Globalization/System.Globalization.sln
+++ b/src/System.Globalization/System.Globalization.sln
@@ -2,7 +2,12 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "System.Globalization.Tests", "tests\System.Globalization.Tests.csproj", "{9A8926D9-1D4C-4069-8965-A626F6CA8C29}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "System.Globalization.Tests", "tests\System.Globalization.Tests.csproj", "{484C92C6-6D2C-45BC-A5E2-4A12BA228E1E}"
+ ProjectSection(ProjectDependencies) = postProject
+ {2395E8CA-73CB-40DF-BE40-A60BC189B737} = {2395E8CA-73CB-40DF-BE40-A60BC189B737}
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Invariant.Tests", "tests\Invariant\Invariant.Tests.csproj", "{9A8926D9-1D4C-4069-8965-A626F6CA8C29}"
ProjectSection(ProjectDependencies) = postProject
{2395E8CA-73CB-40DF-BE40-A60BC189B737} = {2395E8CA-73CB-40DF-BE40-A60BC189B737}
EndProjectSection
@@ -31,10 +36,14 @@ Global
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {9A8926D9-1D4C-4069-8965-A626F6CA8C29}.Debug|Any CPU.ActiveCfg = netstandard-Debug|Any CPU
- {9A8926D9-1D4C-4069-8965-A626F6CA8C29}.Debug|Any CPU.Build.0 = netstandard-Debug|Any CPU
- {9A8926D9-1D4C-4069-8965-A626F6CA8C29}.Release|Any CPU.ActiveCfg = netstandard-Release|Any CPU
- {9A8926D9-1D4C-4069-8965-A626F6CA8C29}.Release|Any CPU.Build.0 = netstandard-Release|Any CPU
+ {484C92C6-6D2C-45BC-A5E2-4A12BA228E1E}.Debug|Any CPU.ActiveCfg = netstandard-Debug|Any CPU
+ {484C92C6-6D2C-45BC-A5E2-4A12BA228E1E}.Debug|Any CPU.Build.0 = netstandard-Debug|Any CPU
+ {484C92C6-6D2C-45BC-A5E2-4A12BA228E1E}.Release|Any CPU.ActiveCfg = netstandard-Release|Any CPU
+ {484C92C6-6D2C-45BC-A5E2-4A12BA228E1E}.Release|Any CPU.Build.0 = netstandard-Release|Any CPU
+ {9A8926D9-1D4C-4069-8965-A626F6CA8C29}.Debug|Any CPU.ActiveCfg = netcoreapp-Debug|Any CPU
+ {9A8926D9-1D4C-4069-8965-A626F6CA8C29}.Debug|Any CPU.Build.0 = netcoreapp-Debug|Any CPU
+ {9A8926D9-1D4C-4069-8965-A626F6CA8C29}.Release|Any CPU.ActiveCfg = netcoreapp-Release|Any CPU
+ {9A8926D9-1D4C-4069-8965-A626F6CA8C29}.Release|Any CPU.Build.0 = netcoreapp-Release|Any CPU
{0BA6851E-0E75-453D-9D2A-CEB94E4DE975}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0BA6851E-0E75-453D-9D2A-CEB94E4DE975}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0BA6851E-0E75-453D-9D2A-CEB94E4DE975}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -52,6 +61,7 @@ Global
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
+ {484C92C6-6D2C-45BC-A5E2-4A12BA228E1E} = {1A2F9F4A-A032-433E-B914-ADD5992BB178}
{9A8926D9-1D4C-4069-8965-A626F6CA8C29} = {1A2F9F4A-A032-433E-B914-ADD5992BB178}
{0BA6851E-0E75-453D-9D2A-CEB94E4DE975} = {1A2F9F4A-A032-433E-B914-ADD5992BB178}
{2395E8CA-73CB-40DF-BE40-A60BC189B737} = {E107E9C1-E893-4E87-987E-04EF0DCEAEFD}
diff --git a/src/System.Globalization/tests/CultureInfo/CultureInfoNumberFormat.cs b/src/System.Globalization/tests/CultureInfo/CultureInfoNumberFormat.cs
index 460ec12c31..291bfaf268 100644
--- a/src/System.Globalization/tests/CultureInfo/CultureInfoNumberFormat.cs
+++ b/src/System.Globalization/tests/CultureInfo/CultureInfoNumberFormat.cs
@@ -30,17 +30,6 @@ namespace System.Globalization.Tests
}
[Fact]
- public void NumberFormatInfo_Set_Properties()
- {
- CultureInfo culture = new CultureInfo("fr");
- culture.NumberFormat.PositiveSign = "a";
- Assert.Equal("a", culture.NumberFormat.PositiveSign);
-
- culture.NumberFormat.PercentPositivePattern = 4;
- Assert.Equal(4, culture.NumberFormat.PercentPositivePattern);
- }
-
- [Fact]
public void NumberFormat_Set_Invalid()
{
Assert.Throws<ArgumentNullException>("value", () => new CultureInfo("en-US").NumberFormat = null);
diff --git a/src/System.Globalization/tests/RegionInfo/RegionInfoTests.Methods.cs b/src/System.Globalization/tests/RegionInfo/RegionInfoTests.Methods.cs
index 144f9c47f0..1c0f489825 100644
--- a/src/System.Globalization/tests/RegionInfo/RegionInfoTests.Methods.cs
+++ b/src/System.Globalization/tests/RegionInfo/RegionInfoTests.Methods.cs
@@ -29,13 +29,23 @@ namespace System.Globalization.Tests
}
[Fact]
- public void Ctor_Invalid()
+ public void Ctor_NullName_ThrowsArgumentNullException()
{
- Assert.Throws<ArgumentNullException>("name", () => new RegionInfo(null)); // Culture is null
- // TODO: include param name once dotnet/coreclr#3915 is merged and the CI updates
- Assert.Throws<ArgumentException>(() => new RegionInfo("")); // Culture is invariant
- Assert.Throws<ArgumentException>("name", () => new RegionInfo("no-such-culture")); // Culture is non-existent
- Assert.Throws<ArgumentException>("name", () => new RegionInfo("en")); // Culture is neutral
+ Assert.Throws<ArgumentNullException>("name", () => new RegionInfo(null));
+ }
+
+ [Fact]
+ public void Ctor_EmptyName_ThrowsArgumentException()
+ {
+ AssertExtensions.Throws<ArgumentException>("name", null, () => new RegionInfo(""));
+ }
+
+ [Theory]
+ [InlineData("no-such-culture")]
+ [InlineData("en")]
+ public void Ctor_InvalidName_ThrowsArgumentException(string name)
+ {
+ Assert.Throws<ArgumentException>("name", () => new RegionInfo(name));
}
public static IEnumerable<object[]> Equals_TestData()
diff --git a/src/System.Globalization/tests/RegionInfo/RegionInfoTests.Properties.cs b/src/System.Globalization/tests/RegionInfo/RegionInfoTests.Properties.cs
index dfe0774f8d..bba87ca74b 100644
--- a/src/System.Globalization/tests/RegionInfo/RegionInfoTests.Properties.cs
+++ b/src/System.Globalization/tests/RegionInfo/RegionInfoTests.Properties.cs
@@ -119,11 +119,5 @@ namespace System.Globalization.Tests
Assert.Equal(threeLetterISORegionName, ri.ThreeLetterISORegionName);
Assert.Equal(threeLetterWindowsRegionName, ri.ThreeLetterWindowsRegionName);
}
-
- [Fact]
- public void NegativeTest()
- {
- Assert.Throws<System.ArgumentException>("name", () => new RegionInfo(""));
- }
}
}
diff --git a/src/System.Globalization/tests/System.Globalization.Tests.csproj b/src/System.Globalization/tests/System.Globalization.Tests.csproj
index fc2fe496e9..4da2ba6e2f 100644
--- a/src/System.Globalization/tests/System.Globalization.Tests.csproj
+++ b/src/System.Globalization/tests/System.Globalization.Tests.csproj
@@ -2,7 +2,7 @@
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
<PropertyGroup>
- <ProjectGuid>{9A8926D9-1D4C-4069-8965-A626F6CA8C29}</ProjectGuid>
+ <ProjectGuid>{484C92C6-6D2C-45BC-A5E2-4A12BA228E1E}</ProjectGuid>
<DefineConstants Condition="'$(TargetGroup)' == 'uap'">$(DefineConstants);uap</DefineConstants>
</PropertyGroup>
<!-- Default configurations to help VS understand the configurations -->
@@ -56,6 +56,7 @@
<Compile Include="CultureInfo\CultureInfoGetHashCode.cs" />
<Compile Include="CultureInfo\CultureInfoIsNeutralCulture.cs" />
<Compile Include="CultureInfo\CultureInfoNativeName.cs" />
+ <Compile Include="CultureInfo\CultureInfoNumberFormat.cs" />
<Compile Include="CultureInfo\CultureInfoParent.cs" />
<Compile Include="CultureInfo\CultureInfoReadOnly.cs" />
<Compile Include="CultureInfo\CultureInfoTwoLetterISOLanguageName.cs" />
@@ -129,6 +130,9 @@
<Compile Include="TextInfo\TextInfoToUpper.cs" />
<Compile Include="UnicodeCategory\UnicodeCategoryTests.cs" />
<!-- Helpers -->
+ <Compile Include="$(CommonTestPath)\System\AssertExtensions.cs">
+ <Link>Common\System\AssertExtensions.cs</Link>
+ </Compile>
<Compile Include="$(CommonTestPath)\System\PlatformDetection.cs">
<Link>Common\System\PlatformDetection.cs</Link>
</Compile>
@@ -160,4 +164,4 @@
</EmbeddedResource>
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
-</Project>
+</Project> \ No newline at end of file
diff --git a/src/System.IO.FileSystem.AccessControl/src/System/IO/FileSystemAclExtensions.net46.cs b/src/System.IO.FileSystem.AccessControl/src/System/IO/FileSystemAclExtensions.net46.cs
index 0830230377..5ecaa15af1 100644
--- a/src/System.IO.FileSystem.AccessControl/src/System/IO/FileSystemAclExtensions.net46.cs
+++ b/src/System.IO.FileSystem.AccessControl/src/System/IO/FileSystemAclExtensions.net46.cs
@@ -8,17 +8,17 @@ namespace System.IO
{
public static class FileSystemAclExtensions
{
- public static DirectorySecurity GetAccessControl(DirectoryInfo directoryInfo)
+ public static DirectorySecurity GetAccessControl(this DirectoryInfo directoryInfo)
{
return directoryInfo.GetAccessControl();
}
- public static DirectorySecurity GetAccessControl(DirectoryInfo directoryInfo, AccessControlSections includeSections)
+ public static DirectorySecurity GetAccessControl(this DirectoryInfo directoryInfo, AccessControlSections includeSections)
{
return directoryInfo.GetAccessControl(includeSections);
}
- public static void SetAccessControl(DirectoryInfo directoryInfo, DirectorySecurity directorySecurity)
+ public static void SetAccessControl(this DirectoryInfo directoryInfo, DirectorySecurity directorySecurity)
{
directoryInfo.SetAccessControl(directorySecurity);
}
@@ -28,22 +28,22 @@ namespace System.IO
return fileInfo.GetAccessControl();
}
- public static FileSecurity GetAccessControl(FileInfo fileInfo, AccessControlSections includeSections)
+ public static FileSecurity GetAccessControl(this FileInfo fileInfo, AccessControlSections includeSections)
{
return fileInfo.GetAccessControl(includeSections);
}
- public static void SetAccessControl(FileInfo fileInfo, FileSecurity fileSecurity)
+ public static void SetAccessControl(this FileInfo fileInfo, FileSecurity fileSecurity)
{
fileInfo.SetAccessControl(fileSecurity);
}
- public static FileSecurity GetAccessControl(FileStream fileStream)
+ public static FileSecurity GetAccessControl(this FileStream fileStream)
{
return fileStream.GetAccessControl();
}
- public static void SetAccessControl(FileStream fileStream, FileSecurity fileSecurity)
+ public static void SetAccessControl(this FileStream fileStream, FileSecurity fileSecurity)
{
fileStream.SetAccessControl(fileSecurity);
}
diff --git a/src/System.IO.FileSystem/src/Microsoft/Win32/SafeHandles/SafeFileHandle.Windows.cs b/src/System.IO.FileSystem/src/Microsoft/Win32/SafeHandles/SafeFileHandle.Windows.cs
deleted file mode 100644
index 3f484c4c6b..0000000000
--- a/src/System.IO.FileSystem/src/Microsoft/Win32/SafeHandles/SafeFileHandle.Windows.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-using System.Security;
-using System.Runtime.InteropServices;
-using System.Threading;
-using Microsoft.Win32;
-
-namespace Microsoft.Win32.SafeHandles
-{
- [System.Security.SecurityCritical] // auto-generated_required
- public sealed class SafeFileHandle : SafeHandleZeroOrMinusOneIsInvalid
- {
- private bool? _isAsync;
-
- private SafeFileHandle() : base(true)
- {
- _isAsync = null;
- }
-
- public SafeFileHandle(IntPtr preexistingHandle, bool ownsHandle) : base(ownsHandle)
- {
- SetHandle(preexistingHandle);
-
- _isAsync = null;
- }
-
- internal bool? IsAsync
- {
- get
- {
- return _isAsync;
- }
-
- set
- {
- _isAsync = value;
- }
- }
-
- internal ThreadPoolBoundHandle ThreadPoolBinding { get; set; }
-
- [System.Security.SecurityCritical]
- override protected bool ReleaseHandle()
- {
- return Interop.Kernel32.CloseHandle(handle);
- }
- }
-}
-
diff --git a/src/System.IO.FileSystem/src/Microsoft/Win32/SafeHandles/SafeFileHandle.Windows.netstandard1.3.cs b/src/System.IO.FileSystem/src/Microsoft/Win32/SafeHandles/SafeFileHandle.Windows.netstandard1.3.cs
deleted file mode 100644
index 99adb1dddb..0000000000
--- a/src/System.IO.FileSystem/src/Microsoft/Win32/SafeHandles/SafeFileHandle.Windows.netstandard1.3.cs
+++ /dev/null
@@ -1,61 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-using System.Security;
-using System.Runtime.InteropServices;
-using System.Threading;
-using Microsoft.Win32;
-
-namespace Microsoft.Win32.SafeHandles
-{
- [System.Security.SecurityCritical] // auto-generated_required
- public sealed class SafeFileHandle : SafeHandle
- {
- private bool? _isAsync;
-
- private SafeFileHandle() : base(IntPtr.Zero, true)
- {
- _isAsync = null;
- }
-
- public SafeFileHandle(IntPtr preexistingHandle, bool ownsHandle) : base(IntPtr.Zero, ownsHandle)
- {
- SetHandle(preexistingHandle);
-
- _isAsync = null;
- }
-
- internal bool? IsAsync
- {
- get
- {
- return _isAsync;
- }
-
- set
- {
- _isAsync = value;
- }
- }
-
- internal ThreadPoolBoundHandle ThreadPoolBinding { get; set; }
-
- [System.Security.SecurityCritical]
- override protected bool ReleaseHandle()
- {
- return Interop.Kernel32.CloseHandle(handle);
- }
-
- public override bool IsInvalid
- {
- [System.Security.SecurityCritical]
- get
- {
- return handle == IntPtr.Zero || handle == new IntPtr(-1);
- }
- }
- }
-}
-
diff --git a/src/System.IO.FileSystem/src/System/IO/Directory.cs b/src/System.IO.FileSystem/src/System/IO/Directory.cs
index 3187d75e36..44271c579b 100644
--- a/src/System.IO.FileSystem/src/System/IO/Directory.cs
+++ b/src/System.IO.FileSystem/src/System/IO/Directory.cs
@@ -563,6 +563,12 @@ namespace System.IO
String destinationRoot = Path.GetPathRoot(destPath);
if (!String.Equals(sourceRoot, destinationRoot, pathComparison))
throw new IOException(SR.IO_SourceDestMustHaveSameRoot);
+
+ if (!FileSystem.Current.DirectoryExists(fullsourceDirName))
+ throw new DirectoryNotFoundException(SR.Format(SR.IO_PathNotFound_Path, fullsourceDirName));
+
+ if (FileSystem.Current.DirectoryExists(fulldestDirName))
+ throw new IOException(SR.Format(SR.IO_AlreadyExists_Name, fulldestDirName));
FileSystem.Current.MoveDirectory(fullsourceDirName, fulldestDirName);
}
diff --git a/src/System.IO.FileSystem/src/System/IO/DirectoryInfo.cs b/src/System.IO.FileSystem/src/System/IO/DirectoryInfo.cs
index 95b448412c..177177d9c4 100644
--- a/src/System.IO.FileSystem/src/System/IO/DirectoryInfo.cs
+++ b/src/System.IO.FileSystem/src/System/IO/DirectoryInfo.cs
@@ -413,6 +413,12 @@ namespace System.IO
if (!String.Equals(sourceRoot, destinationRoot, pathComparison))
throw new IOException(SR.IO_SourceDestMustHaveSameRoot);
+ if (!Exists)
+ throw new DirectoryNotFoundException(SR.Format(SR.IO_PathNotFound_Path, FullPath));
+
+ if (FileSystem.Current.DirectoryExists(fullDestDirName))
+ throw new IOException(SR.Format(SR.IO_AlreadyExists_Name, fullDestDirName));
+
FileSystem.Current.MoveDirectory(FullPath, fullDestDirName);
FullPath = fullDestDirName;
diff --git a/src/System.IO.FileSystem/src/System/IO/FileOptions.cs b/src/System.IO.FileSystem/src/System/IO/FileOptions.cs
deleted file mode 100644
index 6b1399914c..0000000000
--- a/src/System.IO.FileSystem/src/System/IO/FileOptions.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-using System.Runtime.InteropServices;
-
-namespace System.IO
-{
- // Maps to FILE_FLAG_DELETE_ON_CLOSE and similar values from winbase.h.
- // We didn't expose a number of these values because we didn't believe
- // a number of them made sense in managed code, at least not yet.
-
- /// <devdoc>
- /// Additional options to how to create a FileStream.
- /// </devdoc>
- [Serializable]
- [Flags]
- public enum FileOptions
- {
- // NOTE: any change to FileOptions enum needs to be
- // matched in the FileStream ctor for error validation
- None = 0,
- WriteThrough = unchecked((int)0x80000000),
- Asynchronous = unchecked((int)0x40000000), // FILE_FLAG_OVERLAPPED
- // NoBuffering = 0x20000000,
- RandomAccess = 0x10000000,
- DeleteOnClose = 0x04000000,
- SequentialScan = 0x08000000,
- // AllowPosix = 0x01000000, // FILE_FLAG_POSIX_SEMANTICS
- // BackupOrRestore,
- // DisallowReparsePoint = 0x00200000, // FILE_FLAG_OPEN_REPARSE_POINT
- // NoRemoteRecall = 0x00100000, // FILE_FLAG_OPEN_NO_RECALL
- // FirstPipeInstance = 0x00080000, // FILE_FLAG_FIRST_PIPE_INSTANCE
- Encrypted = 0x00004000, // FILE_ATTRIBUTE_ENCRYPTED
- }
-}
-
diff --git a/src/System.IO.FileSystem/tests/Directory/CreateDirectory.cs b/src/System.IO.FileSystem/tests/Directory/CreateDirectory.cs
index e13b784cea..2edcd3f720 100644
--- a/src/System.IO.FileSystem/tests/Directory/CreateDirectory.cs
+++ b/src/System.IO.FileSystem/tests/Directory/CreateDirectory.cs
@@ -222,7 +222,8 @@ namespace System.IO.Tests
[Theory, MemberData(nameof(PathsWithInvalidColons))]
[PlatformSpecific(TestPlatforms.Windows)] // invalid colons throws ArgumentException
- public void PathWithInvalidColons_ThrowsArgumentException(string invalidPath)
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "Versions of netfx older than 4.6.2 throw an ArgumentException instead of NotSupportedException. Until all of our machines run netfx against the actual latest version, these will fail.")]
+ public void PathWithInvalidColons_ThrowsNotSupportedException(string invalidPath)
{
Assert.Throws<NotSupportedException>(() => Create(invalidPath));
}
diff --git a/src/System.IO.FileSystem/tests/Directory/GetFileSystemEntries_str_str.cs b/src/System.IO.FileSystem/tests/Directory/GetFileSystemEntries_str_str.cs
index ee8d2fdbdd..c56eb99486 100644
--- a/src/System.IO.FileSystem/tests/Directory/GetFileSystemEntries_str_str.cs
+++ b/src/System.IO.FileSystem/tests/Directory/GetFileSystemEntries_str_str.cs
@@ -4,6 +4,7 @@
using System.Runtime.InteropServices;
using Xunit;
+using System.Linq;
namespace System.IO.Tests
{
@@ -251,6 +252,9 @@ namespace System.IO.Tests
Assert.Throws<ArgumentException>(() => GetEntries(TestDirectory, @".." + Path.DirectorySeparatorChar));
}
+ private static char[] OldWildcards = new char[] { '*', '?' };
+ private static char[] NewWildcards = new char[] { '<', '>', '\"' };
+
[Fact]
[PlatformSpecific(TestPlatforms.Windows)] // Windows-invalid search patterns throw
public void WindowsSearchPatternInvalid()
@@ -258,7 +262,7 @@ namespace System.IO.Tests
Assert.Throws<ArgumentException>(() => GetEntries(TestDirectory, "\0"));
Assert.Throws<ArgumentException>(() => GetEntries(TestDirectory, "|"));
- Assert.All(Path.GetInvalidFileNameChars(), invalidChar =>
+ Assert.All(Path.GetInvalidFileNameChars().Except(OldWildcards).Except(NewWildcards), invalidChar =>
{
switch (invalidChar)
{
@@ -282,14 +286,6 @@ namespace System.IO.Tests
GetEntries(Directory.GetCurrentDirectory(), string.Format("te{0}st", invalidChar.ToString()));
}
break;
- // Wildcard chars
- case '*':
- case '?':
- case '<':
- case '>':
- case '\"':
- GetEntries(Directory.GetCurrentDirectory(), string.Format("te{0}st", invalidChar.ToString()));
- break;
default:
Assert.Throws<ArgumentException>(() => GetEntries(Directory.GetCurrentDirectory(), string.Format("te{0}st", invalidChar.ToString())));
break;
@@ -298,6 +294,36 @@ namespace System.IO.Tests
}
[Fact]
+ [PlatformSpecific(TestPlatforms.Windows)] // Windows-invalid search patterns throw
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "In netcoreapp we made three new characters be treated as valid wildcards instead of invalid characters. NetFX still treats them as InvalidChars.")]
+ public void WindowsSearchPatternInvalid_Wildcards_netcoreapp()
+ {
+ Assert.All(OldWildcards, invalidChar =>
+ {
+ GetEntries(Directory.GetCurrentDirectory(), string.Format("te{0}st", invalidChar.ToString()));
+ });
+ Assert.All(NewWildcards, invalidChar =>
+ {
+ GetEntries(Directory.GetCurrentDirectory(), string.Format("te{0}st", invalidChar.ToString()));
+ });
+ }
+
+ [Fact]
+ [PlatformSpecific(TestPlatforms.Windows)] // Windows-invalid search patterns throw
+ [SkipOnTargetFramework(~TargetFrameworkMonikers.NetFramework, "In netcoreapp we made three new characters be treated as valid wildcards instead of invalid characters. NetFX still treats them as InvalidChars.")]
+ public void WindowsSearchPatternInvalid_Wildcards_netfx()
+ {
+ Assert.All(OldWildcards, invalidChar =>
+ {
+ GetEntries(Directory.GetCurrentDirectory(), string.Format("te{0}st", invalidChar.ToString()));
+ });
+ Assert.All(NewWildcards, invalidChar =>
+ {
+ Assert.Throws<ArgumentException>(() => GetEntries(Directory.GetCurrentDirectory(), string.Format("te{0}st", invalidChar.ToString())));
+ });
+ }
+
+ [Fact]
[PlatformSpecific(TestPlatforms.AnyUnix)] // Unix-invalid sarch patterns throw ArgumentException
public void UnixSearchPatternInvalid()
{
diff --git a/src/System.IO.FileSystem/tests/Directory/Move.cs b/src/System.IO.FileSystem/tests/Directory/Move.cs
index 63588f5cce..586e1e4db0 100644
--- a/src/System.IO.FileSystem/tests/Directory/Move.cs
+++ b/src/System.IO.FileSystem/tests/Directory/Move.cs
@@ -42,13 +42,30 @@ namespace System.IO.Tests
}
[Fact]
- public void MoveOntoExistingDirectory()
+ public void MoveOntoSameDirectory()
{
DirectoryInfo testDir = Directory.CreateDirectory(GetTestFilePath());
Assert.Throws<IOException>(() => Move(testDir.FullName, testDir.FullName));
}
[Fact]
+ public void MoveOntoExistingDirectory()
+ {
+ DirectoryInfo testDir = Directory.CreateDirectory(GetTestFilePath());
+ DirectoryInfo secondDir = Directory.CreateDirectory(GetTestFilePath());
+ Assert.Throws<IOException>(() => Move(testDir.FullName, secondDir.FullName));
+ }
+
+ [Fact]
+ public void MoveOntoFile()
+ {
+ DirectoryInfo testDir = Directory.CreateDirectory(GetTestFilePath());
+ string testFile = GetTestFilePath();
+ File.WriteAllText(testFile, "");
+ Assert.Throws<IOException>(() => Move(testDir.FullName, testFile));
+ }
+
+ [Fact]
public void MoveIntoCurrentDirectory()
{
DirectoryInfo testDir = Directory.CreateDirectory(GetTestFilePath());
@@ -261,31 +278,6 @@ namespace System.IO.Tests
Assert.Throws<IOException>(() => Move(path, "D:\\DoesntExist"));
}
- [ConditionalFact(nameof(PlatformDetection) + "." + nameof(PlatformDetection.IsNotWindowsSubsystemForLinux))] // https://github.com/Microsoft/BashOnWindows/issues/1008
- [PlatformSpecific(TestPlatforms.AnyUnix)] // Moving to existing directory allowed for empty directory, but causes IOException for non-empty directory
- public void UnixExistingDirectory()
- {
- // Moving to an-empty directory is supported on Unix, but moving to a non-empty directory is not
- string testDirSource = GetTestFilePath();
- string testDirDestEmpty = GetTestFilePath();
- string testDirDestNonEmpty = GetTestFilePath();
-
- Directory.CreateDirectory(testDirSource);
- Directory.CreateDirectory(testDirDestEmpty);
- Directory.CreateDirectory(testDirDestNonEmpty);
-
- using (File.Create(Path.Combine(testDirDestNonEmpty, GetTestFileName())))
- {
- Assert.Throws<IOException>(() => Move(testDirSource, testDirDestNonEmpty));
- Assert.True(Directory.Exists(testDirDestNonEmpty));
- Assert.True(Directory.Exists(testDirSource));
- }
-
- Move(testDirSource, testDirDestEmpty);
- Assert.True(Directory.Exists(testDirDestEmpty));
- Assert.False(Directory.Exists(testDirSource));
- }
-
#endregion
}
}
diff --git a/src/System.IO.FileSystem/tests/File/Move.cs b/src/System.IO.FileSystem/tests/File/Move.cs
index 58138687c8..eeb4c914b7 100644
--- a/src/System.IO.FileSystem/tests/File/Move.cs
+++ b/src/System.IO.FileSystem/tests/File/Move.cs
@@ -199,6 +199,7 @@ namespace System.IO.Tests
[Theory MemberData(nameof(PathsWithInvalidColons))]
[PlatformSpecific(TestPlatforms.Windows)]
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "Versions of netfx older than 4.6.2 throw an ArgumentException instead of NotSupportedException. Until all of our machines run netfx against the actual latest version, these will fail.")]
public void WindowsPathWithIllegalColons(string invalidPath)
{
FileInfo testFile = new FileInfo(GetTestFilePath());
diff --git a/src/System.IO.FileSystem/tests/FileInfo/Open.cs b/src/System.IO.FileSystem/tests/FileInfo/Open.cs
index 8e83d0d4c9..2aa678c005 100644
--- a/src/System.IO.FileSystem/tests/FileInfo/Open.cs
+++ b/src/System.IO.FileSystem/tests/FileInfo/Open.cs
@@ -12,6 +12,40 @@ namespace System.IO.Tests
{
return new FileInfo(path).Open(mode);
}
+
+ [Fact]
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "FileInfo.Open(string, filemode) on netfx always uses FileAccess.ReadWrite instead of choosing a FileAccess based on the FileMode. This bug was fixed in netcoreapp.")]
+ public override void FileModeAppend()
+ {
+ using (FileStream fs = CreateFileStream(GetTestFilePath(), FileMode.Append))
+ {
+ Assert.Equal(false, fs.CanRead);
+ Assert.Equal(true, fs.CanWrite);
+ }
+ }
+
+ [Fact]
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "FileInfo.Open(string, filemode) on netfx always uses FileAccess.ReadWrite instead of choosing a FileAccess based on the FileMode. This bug was fixed in netcoreapp.")]
+ public override void FileModeAppendExisting()
+ {
+ string fileName = GetTestFilePath();
+ using (FileStream fs = CreateFileStream(fileName, FileMode.Create))
+ {
+ fs.WriteByte(0);
+ }
+
+ using (FileStream fs = CreateFileStream(fileName, FileMode.Append))
+ {
+ // Ensure that the file was re-opened and position set to end
+ Assert.Equal(1L, fs.Length);
+ Assert.Equal(1L, fs.Position);
+ Assert.False(fs.CanRead);
+ Assert.True(fs.CanSeek);
+ Assert.True(fs.CanWrite);
+ Assert.Throws<IOException>(() => fs.Seek(-1, SeekOrigin.Current));
+ Assert.Throws<NotSupportedException>(() => fs.ReadByte());
+ }
+ }
}
public class FileInfo_Open_fm_fa : FileStream_ctor_str_fm_fa
diff --git a/src/System.IO.FileSystem/tests/FileStream/CopyToAsync.cs b/src/System.IO.FileSystem/tests/FileStream/CopyToAsync.cs
index 0b3cfbbc8d..53367fcdda 100644
--- a/src/System.IO.FileSystem/tests/FileStream/CopyToAsync.cs
+++ b/src/System.IO.FileSystem/tests/FileStream/CopyToAsync.cs
@@ -27,11 +27,6 @@ namespace System.IO.Tests
fs.Dispose();
Assert.Throws<ObjectDisposedException>(() => { fs.CopyToAsync(new MemoryStream()); });
}
- using (FileStream fs = new FileStream(GetTestFilePath(), FileMode.Create, FileAccess.ReadWrite, FileShare.None, 0x100, useAsync))
- {
- fs.SafeFileHandle.Dispose();
- Assert.Throws<ObjectDisposedException>(() => { fs.CopyToAsync(new MemoryStream()); });
- }
using (FileStream fs = new FileStream(GetTestFilePath(), FileMode.Create, FileAccess.Write))
{
Assert.Throws<NotSupportedException>(() => { fs.CopyToAsync(new MemoryStream()); });
@@ -47,6 +42,53 @@ namespace System.IO.Tests
[Theory]
[InlineData(false)]
[InlineData(true)]
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "The Stream CopyToAsync fails on netcoreapp because it calls Length which checks the validity of the underlying handle. On NetFX the operation no-ops for no input or delays failure to execution for input. See /dotnet/coreclr/pull/4540.")]
+ public void DisposeHandleThenUseFileStream_CopyToAsync(bool useAsync)
+ {
+ using (FileStream fs = new FileStream(GetTestFilePath(), FileMode.Create, FileAccess.ReadWrite, FileShare.None, 0x100, useAsync))
+ {
+ fs.SafeFileHandle.Dispose();
+ Assert.Throws<ObjectDisposedException>(() => { fs.CopyToAsync(new MemoryStream()); });
+ }
+
+ using (FileStream fs = new FileStream(GetTestFilePath(), FileMode.Create, FileAccess.ReadWrite, FileShare.None, 0x100, useAsync))
+ {
+ fs.Write(TestBuffer, 0, TestBuffer.Length);
+ fs.SafeFileHandle.Dispose();
+ Assert.Throws<ObjectDisposedException>(() => { fs.CopyToAsync(new MemoryStream()).Wait(); });
+ }
+ }
+
+ [Theory]
+ [InlineData(false)]
+ [InlineData(true)]
+ [SkipOnTargetFramework(~TargetFrameworkMonikers.NetFramework, "The Stream CopyToAsync fails on netcoreapp because it calls Length which checks the validity of the underlying handle. On NetFX the operation no-ops for no input or delays failure to execution for input. See /dotnet/coreclr/pull/4540.")]
+ public void DisposeHandleThenUseFileStream_CopyToAsync_netfx(bool useAsync)
+ {
+ using (FileStream fs = new FileStream(GetTestFilePath(), FileMode.Create, FileAccess.ReadWrite, FileShare.None, 0x100, useAsync))
+ {
+ fs.SafeFileHandle.Dispose();
+ fs.CopyToAsync(new MemoryStream());
+ }
+
+ using (FileStream fs = new FileStream(GetTestFilePath(), FileMode.Create, FileAccess.ReadWrite, FileShare.None, 0x100, useAsync))
+ {
+ fs.Write(TestBuffer, 0, TestBuffer.Length);
+ fs.SafeFileHandle.Dispose();
+ try
+ {
+ fs.CopyToAsync(new MemoryStream()).Wait();
+ }
+ catch (AggregateException e)
+ {
+ Assert.Equal(typeof(ObjectDisposedException), e.InnerException.GetType());
+ }
+ }
+ }
+
+ [Theory]
+ [InlineData(false)]
+ [InlineData(true)]
public async Task AlreadyCanceled_ReturnsCanceledTask(bool useAsync)
{
using (FileStream fs = new FileStream(GetTestFilePath(), FileMode.Create, FileAccess.ReadWrite, FileShare.None, 0x100, useAsync))
diff --git a/src/System.IO.FileSystem/tests/FileStream/IsAsync.cs b/src/System.IO.FileSystem/tests/FileStream/IsAsync.cs
index bbdf4fef48..06c6b5d376 100644
--- a/src/System.IO.FileSystem/tests/FileStream/IsAsync.cs
+++ b/src/System.IO.FileSystem/tests/FileStream/IsAsync.cs
@@ -40,6 +40,7 @@ namespace System.IO.Tests
}
[Fact]
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "NetFX defaults useAsync to false for the SafeFileHandle/FileAccess constructor which leads to an ArgumentException for an async handle. In netcoreapp this constructor was fixed to check the async status of the handle and use that for the useAsync value.")]
public void AsyncDiscoveredFromHandle()
{
using (FileStream fs = new FileStream(GetTestFilePath(), FileMode.Create, FileAccess.ReadWrite, FileShare.Read, 4096, true))
diff --git a/src/System.IO.FileSystem/tests/FileStream/ReadAsync.cs b/src/System.IO.FileSystem/tests/FileStream/ReadAsync.cs
index 7691f5433d..5ec7bb37f9 100644
--- a/src/System.IO.FileSystem/tests/FileStream/ReadAsync.cs
+++ b/src/System.IO.FileSystem/tests/FileStream/ReadAsync.cs
@@ -226,6 +226,7 @@ namespace System.IO.Tests
}
[Fact]
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "In netcoreapp we modified ReadAsync/WriteAsync to complete synchronously here, but that change was not backported to netfx.")]
public async Task ReadAsyncBufferedCompletesSynchronously()
{
string fileName = GetTestFilePath();
diff --git a/src/System.IO.FileSystem/tests/FileStream/SafeFileHandle.cs b/src/System.IO.FileSystem/tests/FileStream/SafeFileHandle.cs
index fa3add525a..e95e561389 100644
--- a/src/System.IO.FileSystem/tests/FileStream/SafeFileHandle.cs
+++ b/src/System.IO.FileSystem/tests/FileStream/SafeFileHandle.cs
@@ -59,10 +59,20 @@ namespace System.IO.Tests
}
}
- [Theory]
- [InlineData(true)]
- [InlineData(false)]
- public async Task ThrowWhenHandlePositionIsChanged(bool useAsync)
+ [Fact]
+ public async Task ThrowWhenHandlePositionIsChanged_sync()
+ {
+ await ThrowWhenHandlePositionIsChanged(useAsync: false);
+ }
+
+ [Fact]
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "NetFX doesn't allow concurrent FileStream access when using overlapped IO.")]
+ public async Task ThrowWhenHandlePositionIsChanged_async()
+ {
+ await ThrowWhenHandlePositionIsChanged(useAsync: true);
+ }
+
+ private async Task ThrowWhenHandlePositionIsChanged(bool useAsync)
{
string fileName = GetTestFilePath();
diff --git a/src/System.IO.FileSystem/tests/FileStream/Seek.cs b/src/System.IO.FileSystem/tests/FileStream/Seek.cs
index bf7bef20b7..89de963e27 100644
--- a/src/System.IO.FileSystem/tests/FileStream/Seek.cs
+++ b/src/System.IO.FileSystem/tests/FileStream/Seek.cs
@@ -15,7 +15,7 @@ namespace System.IO.Tests
{
using (FileStream fs = new FileStream(GetTestFilePath(), FileMode.Create))
{
- Assert.Throws<ArgumentException>("origin", () => fs.Seek(0, ~SeekOrigin.Begin));
+ AssertExtensions.Throws<ArgumentException>("origin", null, () => fs.Seek(0, ~SeekOrigin.Begin));
}
}
@@ -48,7 +48,7 @@ namespace System.IO.Tests
// no fast path
Assert.Throws<ObjectDisposedException>(() => fs.Seek(fs.Position, SeekOrigin.Begin));
// parameter checking happens first
- Assert.Throws<ArgumentException>("origin", () => fs.Seek(0, ~SeekOrigin.Begin));
+ AssertExtensions.Throws<ArgumentException>("origin", null, () => fs.Seek(0, ~SeekOrigin.Begin));
}
}
@@ -61,7 +61,7 @@ namespace System.IO.Tests
// no fast path
Assert.Throws<NotSupportedException>(() => fs.Seek(fs.Position, SeekOrigin.Begin));
// parameter checking happens first
- Assert.Throws<ArgumentException>("origin", () => fs.Seek(0, ~SeekOrigin.Begin));
+ AssertExtensions.Throws<ArgumentException>("origin", null, () => fs.Seek(0, ~SeekOrigin.Begin));
// dispose checking happens first
fs.Dispose();
Assert.Throws<ObjectDisposedException>(() => fs.Seek(fs.Position, SeekOrigin.Begin));
diff --git a/src/System.IO.FileSystem/tests/FileStream/SetLength.cs b/src/System.IO.FileSystem/tests/FileStream/SetLength.cs
index 6d68531edf..323c34185f 100644
--- a/src/System.IO.FileSystem/tests/FileStream/SetLength.cs
+++ b/src/System.IO.FileSystem/tests/FileStream/SetLength.cs
@@ -65,7 +65,7 @@ namespace System.IO.Tests
// no fast path
Assert.Throws<NotSupportedException>(() => fs.Seek(fs.Position, SeekOrigin.Begin));
// parameter checking happens first
- Assert.Throws<ArgumentException>("origin", () => fs.Seek(0, ~SeekOrigin.Begin));
+ AssertExtensions.Throws<ArgumentException>("origin", null, () => fs.Seek(0, ~SeekOrigin.Begin));
// dispose checking happens first
fs.Dispose();
Assert.Throws<ObjectDisposedException>(() => fs.Seek(fs.Position, SeekOrigin.Begin));
diff --git a/src/System.IO.FileSystem/tests/FileStream/WriteAsync.cs b/src/System.IO.FileSystem/tests/FileStream/WriteAsync.cs
index 768d80578d..ac15d198c1 100644
--- a/src/System.IO.FileSystem/tests/FileStream/WriteAsync.cs
+++ b/src/System.IO.FileSystem/tests/FileStream/WriteAsync.cs
@@ -207,6 +207,7 @@ namespace System.IO.Tests
}
[Fact]
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "In netcoreapp we modified ReadAsync/WriteAsync to complete synchronously here, but that change was not backported to netfx.")]
public void WriteAsyncBufferedCompletesSynchronously()
{
using (FileStream fs = new FileStream(
diff --git a/src/System.IO.FileSystem/tests/FileStream/ctor_sfh_fa.cs b/src/System.IO.FileSystem/tests/FileStream/ctor_sfh_fa.cs
index 28e19d64bb..75870ab9ac 100644
--- a/src/System.IO.FileSystem/tests/FileStream/ctor_sfh_fa.cs
+++ b/src/System.IO.FileSystem/tests/FileStream/ctor_sfh_fa.cs
@@ -134,6 +134,7 @@ namespace System.IO.Tests
public class DerivedFileStream_ctor_sfh_fa : FileSystemTest
{
[Fact]
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "The NetFX FileStream Handle constructor calls the virtual Can*. This has been fixed in netcoreapp to instead directly check for write/read FileAccess.")]
public void VirtualCanReadWrite_ShouldNotBeCalledDuringCtor()
{
using (var fs = File.Create(GetTestFilePath()))
diff --git a/src/System.IO.FileSystem/tests/FileStream/ctor_sfh_fa_buffer_async.cs b/src/System.IO.FileSystem/tests/FileStream/ctor_sfh_fa_buffer_async.cs
index b80090578a..6e07a0a19f 100644
--- a/src/System.IO.FileSystem/tests/FileStream/ctor_sfh_fa_buffer_async.cs
+++ b/src/System.IO.FileSystem/tests/FileStream/ctor_sfh_fa_buffer_async.cs
@@ -22,6 +22,7 @@ namespace System.IO.Tests
}
[Fact]
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "NetFX doesn't allow concurrent FileStream access when using overlapped IO.")]
public void MatchedAsync()
{
using (FileStream fs = new FileStream(GetTestFilePath(), FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite | FileShare.Delete, 4096, true))
diff --git a/src/System.IO.FileSystem/tests/FileStream/ctor_str_fm.cs b/src/System.IO.FileSystem/tests/FileStream/ctor_str_fm.cs
index e5e19fa2d6..631da2a73a 100644
--- a/src/System.IO.FileSystem/tests/FileStream/ctor_str_fm.cs
+++ b/src/System.IO.FileSystem/tests/FileStream/ctor_str_fm.cs
@@ -167,7 +167,7 @@ namespace System.IO.Tests
}
[Fact]
- public void FileModeAppend()
+ public virtual void FileModeAppend()
{
using (FileStream fs = CreateFileStream(GetTestFilePath(), FileMode.Append))
{
@@ -177,7 +177,7 @@ namespace System.IO.Tests
}
[Fact]
- public void FileModeAppendExisting()
+ public virtual void FileModeAppendExisting()
{
string fileName = GetTestFilePath();
using (FileStream fs = CreateFileStream(fileName, FileMode.Create))
diff --git a/src/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj b/src/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj
index 1b8d33c4b9..f69a7df2bc 100644
--- a/src/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj
+++ b/src/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj
@@ -162,6 +162,9 @@
<Compile Include="$(CommonTestPath)\System\Diagnostics\RemoteExecutorTestBase.cs">
<Link>Common\System\Diagnostics\RemoteExecutorTestBase.cs</Link>
</Compile>
+ <Compile Include="$(CommonTestPath)\System\AssertExtensions.cs">
+ <Link>Common\System\AssertExtensions.cs</Link>
+ </Compile>
<ProjectReference Include="$(CommonTestPath)\System\Diagnostics\RemoteExecutorConsoleApp\RemoteExecutorConsoleApp.csproj">
<Project>{69e46a6f-9966-45a5-8945-2559fe337827}</Project>
<Name>RemoteExecutorConsoleApp</Name>
diff --git a/src/System.IO.IsolatedStorage/src/Resources/Strings.resx b/src/System.IO.IsolatedStorage/src/Resources/Strings.resx
index 83201ce519..2e068cc163 100644
--- a/src/System.IO.IsolatedStorage/src/Resources/Strings.resx
+++ b/src/System.IO.IsolatedStorage/src/Resources/Strings.resx
@@ -142,4 +142,4 @@
<data name="PlatformNotSupported_CAS" xml:space="preserve">
<value>Code Access Security is not supported on this platform.</value>
</data>
-</root> \ No newline at end of file
+</root>
diff --git a/src/System.IO.IsolatedStorage/src/System/IO/IsolatedStorage/IsolatedStorageFile.cs b/src/System.IO.IsolatedStorage/src/System/IO/IsolatedStorage/IsolatedStorageFile.cs
index 76d7531686..d35c9d065e 100644
--- a/src/System.IO.IsolatedStorage/src/System/IO/IsolatedStorage/IsolatedStorageFile.cs
+++ b/src/System.IO.IsolatedStorage/src/System/IO/IsolatedStorage/IsolatedStorageFile.cs
@@ -504,6 +504,50 @@ namespace System.IO.IsolatedStorage
}
}
+ public override long AvailableFreeSpace
+ {
+ get
+ {
+ return Quota - UsedSize;
+ }
+ }
+
+ [CLSCompliant(false)]
+ [Obsolete("IsolatedStorage.MaximumSize has been deprecated because it is not CLS Compliant. To get the maximum size use IsolatedStorage.Quota")]
+ public override ulong MaximumSize
+ {
+ get
+ {
+ return long.MaxValue;
+ }
+ }
+
+ public override long Quota
+ {
+ get
+ {
+ return long.MaxValue;
+ }
+ }
+
+ public override long UsedSize
+ {
+ get
+ {
+ return 0; // We do not have a mechanism for tracking usage.
+ }
+ }
+
+ [CLSCompliant(false)]
+ [Obsolete("IsolatedStorage.CurrentSize has been deprecated because it is not CLS Compliant. To get the current size use IsolatedStorage.UsedSize")]
+ public override ulong CurrentSize
+ {
+ get
+ {
+ return 0; // We do not have a mechanism for tracking usage.
+ }
+ }
+
public static IsolatedStorageFile GetUserStoreForApplication()
{
return GetStore(IsolatedStorageScope.Application | IsolatedStorageScope.User);
diff --git a/src/System.IO.IsolatedStorage/src/System/IO/IsolatedStorage/IsolatedStorageFileStream.cs b/src/System.IO.IsolatedStorage/src/System/IO/IsolatedStorage/IsolatedStorageFileStream.cs
index 79e327c7a9..f68a2273b1 100644
--- a/src/System.IO.IsolatedStorage/src/System/IO/IsolatedStorage/IsolatedStorageFileStream.cs
+++ b/src/System.IO.IsolatedStorage/src/System/IO/IsolatedStorage/IsolatedStorageFileStream.cs
@@ -193,6 +193,14 @@ namespace System.IO.IsolatedStorage
}
}
+ public override bool IsAsync
+ {
+ get
+ {
+ return _fs.IsAsync;
+ }
+ }
+
protected override void Dispose(bool disposing)
{
try
@@ -214,6 +222,11 @@ namespace System.IO.IsolatedStorage
_fs.Flush();
}
+ public override void Flush(bool flushToDisk)
+ {
+ _fs.Flush(flushToDisk);
+ }
+
public override Task FlushAsync(CancellationToken cancellationToken)
{
return _fs.FlushAsync();
@@ -296,5 +309,13 @@ namespace System.IO.IsolatedStorage
{
_fs.Lock(position, length);
}
+
+ public override SafeFileHandle SafeFileHandle
+ {
+ get
+ {
+ throw new IsolatedStorageException(SR.IsolatedStorage_Operation_ISFS);
+ }
+ }
}
}
diff --git a/src/System.IO.MemoryMappedFiles/src/Resources/Strings.resx b/src/System.IO.MemoryMappedFiles/src/Resources/Strings.resx
index 3d950a123f..6bbc4472ff 100644
--- a/src/System.IO.MemoryMappedFiles/src/Resources/Strings.resx
+++ b/src/System.IO.MemoryMappedFiles/src/Resources/Strings.resx
@@ -109,6 +109,9 @@
<data name="Argument_NewMMFAppendModeNotAllowed" xml:space="preserve">
<value>FileMode.Append is not permitted when creating new memory mapped files. Instead, use MemoryMappedFileView to ensure write-only access within a specified region.</value>
</data>
+ <data name="Argument_NewMMFTruncateModeNotAllowed" xml:space="preserve">
+ <value>FileMode.Truncate is not permitted when creating new memory mapped files.</value>
+ </data>
<data name="ArgumentNull_MapName" xml:space="preserve">
<value>Map name cannot be null.</value>
</data>
diff --git a/src/System.IO.MemoryMappedFiles/src/System/IO/MemoryMappedFiles/MemoryMappedFile.cs b/src/System.IO.MemoryMappedFiles/src/System/IO/MemoryMappedFiles/MemoryMappedFile.cs
index cd4ef0e61f..db2c678f71 100644
--- a/src/System.IO.MemoryMappedFiles/src/System/IO/MemoryMappedFiles/MemoryMappedFile.cs
+++ b/src/System.IO.MemoryMappedFiles/src/System/IO/MemoryMappedFiles/MemoryMappedFile.cs
@@ -141,6 +141,10 @@ namespace System.IO.MemoryMappedFiles
{
throw new ArgumentException(SR.Argument_NewMMFAppendModeNotAllowed, nameof(mode));
}
+ if (mode == FileMode.Truncate)
+ {
+ throw new ArgumentException(SR.Argument_NewMMFTruncateModeNotAllowed, nameof(mode));
+ }
if (access == MemoryMappedFileAccess.Write)
{
throw new ArgumentException(SR.Argument_NewMMFWriteAccessNotAllowed, nameof(access));
diff --git a/src/System.IO.MemoryMappedFiles/tests/MemoryMappedFile.CreateFromFile.Tests.cs b/src/System.IO.MemoryMappedFiles/tests/MemoryMappedFile.CreateFromFile.Tests.cs
index 2c63bcbe7d..48569e5e07 100644
--- a/src/System.IO.MemoryMappedFiles/tests/MemoryMappedFile.CreateFromFile.Tests.cs
+++ b/src/System.IO.MemoryMappedFiles/tests/MemoryMappedFile.CreateFromFile.Tests.cs
@@ -68,6 +68,16 @@ namespace System.IO.MemoryMappedFiles.Tests
}
}
+ [Fact]
+ public void InvalidArguments_Mode_Truncate()
+ {
+ // FileMode.Truncate never allowed
+ AssertExtensions.Throws<ArgumentException>("mode", null, () => MemoryMappedFile.CreateFromFile(GetTestFilePath(), FileMode.Truncate));
+ AssertExtensions.Throws<ArgumentException>("mode", null, () => MemoryMappedFile.CreateFromFile(GetTestFilePath(), FileMode.Truncate, null));
+ AssertExtensions.Throws<ArgumentException>("mode", null, () => MemoryMappedFile.CreateFromFile(GetTestFilePath(), FileMode.Truncate, null, 4096));
+ AssertExtensions.Throws<ArgumentException>("mode", null, () => MemoryMappedFile.CreateFromFile(GetTestFilePath(), FileMode.Truncate, null, 4096, MemoryMappedFileAccess.ReadWrite));
+ }
+
/// <summary>
/// Tests invalid arguments to the CreateFromFile access parameter.
/// </summary>
@@ -349,40 +359,30 @@ namespace System.IO.MemoryMappedFiles.Tests
}
/// <summary>
- /// Test various combinations of arguments to CreateFromFile, focusing on the Create and Truncate modes,
+ /// Test various combinations of arguments to CreateFromFile, focusing on the Create mode,
/// and validating the creating maps each time they're created.
/// </summary>
[Theory]
- [MemberData(nameof(MemberData_ValidArgumentCombinationsWithPath),
- new FileMode[] { FileMode.Create, FileMode.Truncate },
+ [MemberData(nameof(MemberData_ValidNameCapacityCombinationsWithPath),
new string[] { null, "CreateUniqueMapName()" },
- new long[] { 1, 256, -1 /*pagesize*/, 10000 },
- new MemoryMappedFileAccess[] { MemoryMappedFileAccess.Read, MemoryMappedFileAccess.ReadWrite, MemoryMappedFileAccess.CopyOnWrite })]
- public void ValidArgumentCombinationsWithPath_ModesCreateOrTruncate(
- FileMode mode, string mapName, long capacity, MemoryMappedFileAccess access)
+ new long[] { 1, 256, -1 /*pagesize*/, 10000 })]
+ public void ValidArgumentCombinationsWithPath_ModeCreate(string mapName, long capacity)
{
- // For FileMode.Create/Truncate, try existing files. Only the overloads that take a capacity are valid because
- // both of these modes will cause the input file to be made empty, and an empty file doesn't work with the default capacity.
-
using (TempFile file = new TempFile(GetTestFilePath(), capacity))
- using (MemoryMappedFile mmf = MemoryMappedFile.CreateFromFile(file.Path, mode, mapName, capacity))
+ using (MemoryMappedFile mmf = MemoryMappedFile.CreateFromFile(file.Path, FileMode.Create, mapName, capacity))
{
ValidateMemoryMappedFile(mmf, capacity);
}
using (TempFile file = new TempFile(GetTestFilePath(), capacity))
- using (MemoryMappedFile mmf = MemoryMappedFile.CreateFromFile(file.Path, mode, mapName, capacity, access))
+ using (MemoryMappedFile mmf = MemoryMappedFile.CreateFromFile(file.Path, FileMode.Create, mapName, capacity, MemoryMappedFileAccess.ReadWrite))
{
- ValidateMemoryMappedFile(mmf, capacity, access);
+ ValidateMemoryMappedFile(mmf, capacity, MemoryMappedFileAccess.ReadWrite);
}
- // For FileMode.Create, also try letting it create a new file (Truncate needs the file to have existed)
- if (mode == FileMode.Create)
+ using (MemoryMappedFile mmf = MemoryMappedFile.CreateFromFile(GetTestFilePath(), FileMode.Create, mapName, capacity))
{
- using (MemoryMappedFile mmf = MemoryMappedFile.CreateFromFile(GetTestFilePath(), mode, mapName, capacity))
- {
- ValidateMemoryMappedFile(mmf, capacity);
- }
+ ValidateMemoryMappedFile(mmf, capacity);
}
}
@@ -405,35 +405,43 @@ namespace System.IO.MemoryMappedFiles.Tests
public static IEnumerable<object[]> MemberData_ValidArgumentCombinationsWithPath(
FileMode[] modes, string[] mapNames, long[] capacities, MemoryMappedFileAccess[] accesses)
{
- foreach (FileMode mode in modes)
+ foreach (object[] namesCaps in MemberData_ValidNameCapacityCombinationsWithPath(mapNames, capacities))
{
- foreach (string tmpMapName in mapNames)
+ foreach (FileMode mode in modes)
{
- if (tmpMapName != null && !MapNamesSupported)
- {
- continue;
- }
-
- foreach (long tmpCapacity in capacities)
+ foreach (MemoryMappedFileAccess access in accesses)
{
- long capacity = tmpCapacity == -1 ? s_pageSize.Value : tmpCapacity;
-
- foreach (MemoryMappedFileAccess access in accesses)
+ if ((mode == FileMode.Create || mode == FileMode.CreateNew || mode == FileMode.Truncate) &&
+ !IsWritable(access))
{
- if ((mode == FileMode.Create || mode == FileMode.CreateNew || mode == FileMode.Truncate) &&
- !IsWritable(access))
- {
- continue;
- }
-
- string mapName = tmpMapName == "CreateUniqueMapName()" ? CreateUniqueMapName() : tmpMapName;
- yield return new object[] { mode, mapName, capacity, access };
+ continue;
}
+
+ yield return new object[] { mode, namesCaps[0], namesCaps[1], access };
}
}
}
}
+ public static IEnumerable<object[]> MemberData_ValidNameCapacityCombinationsWithPath(
+ string[] mapNames, long[] capacities)
+ {
+ foreach (string tmpMapName in mapNames)
+ {
+ if (tmpMapName != null && !MapNamesSupported)
+ {
+ continue;
+ }
+
+ foreach (long tmpCapacity in capacities)
+ {
+ long capacity = tmpCapacity == -1 ? s_pageSize.Value : tmpCapacity;
+ string mapName = tmpMapName == "CreateUniqueMapName()" ? CreateUniqueMapName() : tmpMapName;
+ yield return new object[] { mapName, capacity, };
+ }
+ }
+ }
+
/// <summary>
/// Test various combinations of arguments to CreateFromFile that accepts a FileStream.
/// </summary>
@@ -495,8 +503,8 @@ namespace System.IO.MemoryMappedFiles.Tests
foreach (long tmpCapacity in capacities)
{
- long capacity = tmpCapacity == -1 ?
- s_pageSize.Value :
+ long capacity = tmpCapacity == -1 ?
+ s_pageSize.Value :
tmpCapacity;
foreach (MemoryMappedFileAccess access in accesses)
@@ -543,16 +551,14 @@ namespace System.IO.MemoryMappedFiles.Tests
/// Test that appropriate exceptions are thrown creating a map with a non-existent file and a mode
/// that requires the file to exist.
/// </summary>
- [Theory]
- [InlineData(FileMode.Truncate)]
- [InlineData(FileMode.Open)]
- public void FileDoesNotExist(FileMode mode)
+ [Fact]
+ public void FileDoesNotExist_OpenFileMode()
{
Assert.Throws<FileNotFoundException>(() => MemoryMappedFile.CreateFromFile(GetTestFilePath()));
- Assert.Throws<FileNotFoundException>(() => MemoryMappedFile.CreateFromFile(GetTestFilePath(), mode));
- Assert.Throws<FileNotFoundException>(() => MemoryMappedFile.CreateFromFile(GetTestFilePath(), mode, null));
- Assert.Throws<FileNotFoundException>(() => MemoryMappedFile.CreateFromFile(GetTestFilePath(), mode, null, 4096));
- Assert.Throws<FileNotFoundException>(() => MemoryMappedFile.CreateFromFile(GetTestFilePath(), mode, null, 4096, MemoryMappedFileAccess.ReadWrite));
+ Assert.Throws<FileNotFoundException>(() => MemoryMappedFile.CreateFromFile(GetTestFilePath(), FileMode.Open));
+ Assert.Throws<FileNotFoundException>(() => MemoryMappedFile.CreateFromFile(GetTestFilePath(), FileMode.Open, null));
+ Assert.Throws<FileNotFoundException>(() => MemoryMappedFile.CreateFromFile(GetTestFilePath(), FileMode.Open, null, 4096));
+ Assert.Throws<FileNotFoundException>(() => MemoryMappedFile.CreateFromFile(GetTestFilePath(), FileMode.Open, null, 4096, MemoryMappedFileAccess.ReadWrite));
}
/// <summary>
diff --git a/src/System.IO.MemoryMappedFiles/tests/System.IO.MemoryMappedFiles.Tests.csproj b/src/System.IO.MemoryMappedFiles/tests/System.IO.MemoryMappedFiles.Tests.csproj
index e65e4075ac..b58c723ead 100644
--- a/src/System.IO.MemoryMappedFiles/tests/System.IO.MemoryMappedFiles.Tests.csproj
+++ b/src/System.IO.MemoryMappedFiles/tests/System.IO.MemoryMappedFiles.Tests.csproj
@@ -30,6 +30,9 @@
<Compile Include="$(CommonTestPath)\System\IO\FileCleanupTestBase.cs">
<Link>Common\System\IO\FileCleanupTestBase.cs</Link>
</Compile>
+ <Compile Include="$(CommonTestPath)\System\AssertExtensions.cs">
+ <Link>Common\System\AssertExtensions.cs</Link>
+ </Compile>
<Compile Include="XunitAssemblyAttributes.cs" />
</ItemGroup>
<ItemGroup>
diff --git a/src/System.IO.Ports/tests/Legacy/Manual/Regression_142639.cs b/src/System.IO.Ports/tests/Legacy/Manual/Regression_142639.cs
deleted file mode 100644
index bbe733192d..0000000000
--- a/src/System.IO.Ports/tests/Legacy/Manual/Regression_142639.cs
+++ /dev/null
@@ -1,101 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-// This is a regression test for a crashing bug in Serial Port.
-// The original bug is DevDiv Bugs #142639, fixed with a QFE in WhidbeyQFE. It only repros in 64-bit.
-// BWadswor later reported the bug again using essentially the following code. See Dev10 #619306.
-
-using System;
-using System.Threading;
-using System.IO.Ports;
-using System.Diagnostics;
-using Legacy.Support;
-
-internal class Test_CLRS
-{
- private static bool s_done;
-
- public static void gc_food()
- {
- object[] bah = new object[100];
- Random r = new Random(-55);
- while (!s_done)
- {
- int i = r.Next(100);
- bah[i] = new object[r.Next(1000)];
- GC.Collect(2, GCCollectionMode.Forced);
- }
- }
-
- private static int Main()
- {
- try
- {
- String[] portNames = PortHelper.GetPorts();
- if (portNames.Length == 0)
- {
- Debug.WriteLine("No serial ports available. Not running test.");
- }
- else
- {
- s_done = false;
- Thread food = null;
- food = new Thread(new ThreadStart(gc_food));
- food.Start();
-
- foreach (String portName in portNames)
- {
- Debug.WriteLine(portName);
- OpenClose(portName);
- LeaveOpen(portName);
- }
- }
- // if neither of these crashed, then pass.
- s_done = true; // stop the gc thread
- return 100;
- }
- catch (Exception ex)
- {
- Debug.WriteLine("Unexpected exception! " + ex.ToString());
- return 99;
- }
- }
-
- private static void OpenClose(String portName)
- {
- Debug.WriteLine("OpenClose (should finish quickly)");
- Stopwatch stopwatch = new Stopwatch();
- stopwatch.Start();
- SerialPort Port = new SerialPort(portName);
- Port.Open();
- Port.Close();
- Port.Open();
- Port.Close();
- Port.Open();
- Port.Close();
- Port.Open();
- Port.Close();
- Port.Open();
- Port.Close();
- stopwatch.Stop();
- Debug.WriteLine("Elapsed time: {0:mm'm'ss'.'fff's'}", stopwatch.Elapsed);
- }
-
- private static void LeaveOpen(String portName)
- {
- Debug.WriteLine("LeaveOpen (runs for 1 minute)");
- Stopwatch stopwatch = new Stopwatch();
- stopwatch.Start();
- Thread.Sleep(100);
- SerialPort Port = new SerialPort(portName);
- Port.Open();
- while (Port.IsOpen && stopwatch.ElapsedMilliseconds < 60000) // 1 minute
- {
- Thread.Sleep(10);
- }
- Port.Close();
- stopwatch.Stop();
- Debug.WriteLine("Elapsed time: {0:mm'm'ss'.'fff's'}", stopwatch.Elapsed);
- }
-}
diff --git a/src/System.IO.Ports/tests/Legacy/Manual/USB_Serial_Regression.cs b/src/System.IO.Ports/tests/Legacy/Manual/USB_Serial_Regression.cs
deleted file mode 100644
index 6a7c3590c7..0000000000
--- a/src/System.IO.Ports/tests/Legacy/Manual/USB_Serial_Regression.cs
+++ /dev/null
@@ -1,90 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-// This is a regression test for Dev10 #511456, DevDiv Bugs #186131, and DevDiv Bugs #191753.
-// Unplugged USB virtual serial port causes SerialPort object to crash application in finalizer thread.
-//
-// For this manual test, you will need a USB Serial adapater, probably one like this:
-// Keyspan (keyspan.com) model USA-19HS
-// http://www.tripplite.com/en/products/model.cfm?txtSeriesID=518&txtModelID=3914
-// There should be one around here somewhere.
-// This site should have a driver if you need one.
-//
-// Connect the serial end to loopback (connect pins 3 and 4).
-//
-// Plug the adapter into a USB port on the machine, and run this test.
-// By default it runs using COM3. If you need a different port name, pass it as an argument.
-// Unplug the adapter from the USB port when prompted.
-// Look for no exception and a passing exit code.
-//
-// Before the fix, an unhandled exception would be seen:
-// Unhandled Exception: System.UnauthorizedAccessException: Access to the port is denied.
-// at System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str)
-// at System.IO.Ports.SerialStream.Dispose(Boolean disposing)
-// at System.IO.Ports.SerialStream.Finalize()
-
-using System;
-using System.Diagnostics;
-using System.IO.Ports;
-
-public class Test
-{
- public static void UnhandledExceptionHandler(Object sender, UnhandledExceptionEventArgs eventArgs)
- {
- Debug.WriteLine("Exception caught in UnhandledExceptionHandler: {0}", eventArgs.ExceptionObject);
- Environment.ExitCode = 97;
- }
-
- public static void Main(String[] args)
- {
- System.AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionHandler;
-
- try
- {
- Debug.WriteLine("Connect the USB/serial adapter to a USB port and press Enter to continue...");
- Console.ReadLine();
-
- // Get the port name, if one is passed in.
- String portName = "COM3";
- if (args.Length > 0)
- portName = args[0];
- SerialPort port = new SerialPort(portName);
- Debug.WriteLine("Using {0}", portName);
-
- try
- {
- port.Open();
- }
- catch (System.IO.IOException)
- {
- Debug.WriteLine("Error opening serial port. This can happen if the adapter was just connected. Sleeping 5 seconds before trying again...");
- System.Threading.Thread.Sleep(5000);
- try
- {
- port.Open();
- }
- catch (System.IO.IOException ex)
- {
- Debug.WriteLine("Error opening serial port. Make sure the USB serial adapter is plugged into a USB port and that the port name is correct.");
- Debug.WriteLine(ex);
-
- Environment.ExitCode = 98;
- }
- }
-
- Debug.WriteLine("{0} opened.", port.PortName);
- Debug.WriteLine("Disconnect USB serial adapter and press Enter to continue...");
- Console.ReadLine();
- // Calling port.Close() after the adapter is disconnected will still get an
- // UnauthorizedAccessException, so don't do it.
- Debug.WriteLine("Pass if no exception and exitcode==100.");
- Environment.ExitCode = 100;
- }
- catch (Exception ex)
- {
- Debug.WriteLine("Exception caught in Main() - {0}", ex);
- Environment.ExitCode = 99;
- }
- }
-}
diff --git a/src/System.IO.Ports/tests/Support/Sleep.cs b/src/System.IO.Ports/tests/Support/Sleep.cs
deleted file mode 100644
index cd87130e5f..0000000000
--- a/src/System.IO.Ports/tests/Support/Sleep.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-using System.Threading;
-
-//Takes a command line parameter to sleep a specified time in milliseconds
-public class Sleep
-{
- public static void Main(string[] args)
- {
- try
- {
- if (args.Length == 1)
- {
- int sleeptime = Int32.Parse(args[0]);
- Thread.Sleep(sleeptime);
- }
- else
- {
- throw new ArgumentException();
- }
- }
- catch (Exception e)
- {
- Console.WriteLine("Usage: sleep.exe [timeout] where [timeout] is in milliseconds");
- Console.WriteLine(e.Message);
- }
- }
-}
diff --git a/src/System.Linq.Expressions/src/ILLinkTrim.xml b/src/System.Linq.Expressions/src/ILLinkTrim.xml
new file mode 100644
index 0000000000..4f96aaae42
--- /dev/null
+++ b/src/System.Linq.Expressions/src/ILLinkTrim.xml
@@ -0,0 +1,8 @@
+<linker>
+ <assembly fullname="System.Linq.Expressions">
+ <type fullname="System.Linq.Expressions.Interpreter.LightLambda">
+ <!-- required by debugger -->
+ <method name="get_DebugView" />
+ </type>
+ </assembly>
+</linker> \ No newline at end of file
diff --git a/src/System.Linq.Expressions/src/Resources/System.Linq.Expressions.rd.xml b/src/System.Linq.Expressions/src/Resources/System.Linq.Expressions.rd.xml
index fc65996839..be9d803961 100644
--- a/src/System.Linq.Expressions/src/Resources/System.Linq.Expressions.rd.xml
+++ b/src/System.Linq.Expressions/src/Resources/System.Linq.Expressions.rd.xml
@@ -2,14 +2,14 @@
<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
<Library Name="*System.Linq.Expressions*">
<Assembly Name="System.Linq.Expressions">
+ <Type Name="Microsoft.CSharp.RuntimeBinder.RuntimeBinderException" Dynamic="Required All" />
+ <TypeInstantiation Name="System.Linq.Expressions.ExpressionCreator" Arguments="System.Func{System.Boolean}" Dynamic="Required All" />
+ <TypeInstantiation Name="System.Runtime.CompilerServices.CallSite" Arguments="System.Func{System.Runtime.CompilerServices.CallSite, System.Object, System.Int32}" Dynamic="Required All" />
+ <Type Name="System.Runtime.CompilerServices.CallSiteOps" Dynamic="Required All" />
<Namespace Name="System.Linq.Expressions">
<Type Name="Expression&lt;TDelegate&gt;">
<GenericParameter Name="TDelegate" Dynamic="Public"/>
</Type>
- <Type Name="Microsoft.CSharp.RuntimeBinder.RuntimeBinderException" Dynamic="Required All" />
- <TypeInstantiation Name="System.Linq.Expressions.ExpressionCreator" Arguments="System.Func{System.Boolean}" Dynamic="Required All" />
- <TypeInstantiation Name="System.Runtime.CompilerServices.CallSite" Arguments="System.Func{System.Runtime.CompilerServices.CallSite, System.Object, System.Int32}" Dynamic="Required All" />
- <Type Name="System.Runtime.CompilerServices.CallSiteOps" Dynamic="Required All" />
<Type Name="Expression">
<Method Name ="Block">
<TypeParameter Name="type" Dynamic="Public"/>
diff --git a/src/System.Linq/src/ILLinkTrim.xml b/src/System.Linq/src/ILLinkTrim.xml
new file mode 100644
index 0000000000..a2e3201c32
--- /dev/null
+++ b/src/System.Linq/src/ILLinkTrim.xml
@@ -0,0 +1,8 @@
+<linker>
+ <assembly fullname="System.Linq">
+ <!-- required by debugger, see comment in System/Linq/DebugView.cs -->
+ <type fullname="System.Linq.SystemCore_EnumerableDebugView" />
+ <type fullname="System.Linq.SystemCore_EnumerableDebugView`1" />
+ <type fullname="System.Linq.SystemCore_EnumerableDebugViewEmptyException" />
+ </assembly>
+</linker> \ No newline at end of file
diff --git a/src/System.Linq/tests/ConcatTests.cs b/src/System.Linq/tests/ConcatTests.cs
index c758cc416e..68394debe7 100644
--- a/src/System.Linq/tests/ConcatTests.cs
+++ b/src/System.Linq/tests/ConcatTests.cs
@@ -251,20 +251,34 @@ namespace System.Linq.Tests
var supposedlyLargeCollection = new DelegateBasedCollection<int> { CountWorker = () => int.MaxValue };
var tinyCollection = new DelegateBasedCollection<int> { CountWorker = () => 1 };
+ Action<Action> assertThrows = (testCode) =>
+ {
+ // The full .NET Framework uses unsigned arithmetic summing up collection counts.
+ // See https://github.com/dotnet/corefx/pull/11492.
+ if (PlatformDetection.IsFullFramework)
+ {
+ testCode();
+ }
+ else
+ {
+ Assert.Throws<OverflowException>(testCode);
+ }
+ };
+
// We need to use checked arithmetic summing up the collections' counts.
- Assert.Throws<OverflowException>(() => supposedlyLargeCollection.Concat(tinyCollection).Count());
- Assert.Throws<OverflowException>(() => tinyCollection.Concat(tinyCollection).Concat(supposedlyLargeCollection).Count());
- Assert.Throws<OverflowException>(() => tinyCollection.Concat(tinyCollection).Concat(tinyCollection).Concat(supposedlyLargeCollection).Count());
+ assertThrows(() => supposedlyLargeCollection.Concat(tinyCollection).Count());
+ assertThrows(() => tinyCollection.Concat(tinyCollection).Concat(supposedlyLargeCollection).Count());
+ assertThrows(() => tinyCollection.Concat(tinyCollection).Concat(tinyCollection).Concat(supposedlyLargeCollection).Count());
// This applies to ToArray() and ToList() as well, which try to preallocate the exact size
// needed if all inputs are ICollections.
- Assert.Throws<OverflowException>(() => supposedlyLargeCollection.Concat(tinyCollection).ToArray());
- Assert.Throws<OverflowException>(() => tinyCollection.Concat(tinyCollection).Concat(supposedlyLargeCollection).ToArray());
- Assert.Throws<OverflowException>(() => tinyCollection.Concat(tinyCollection).Concat(tinyCollection).Concat(supposedlyLargeCollection).ToArray());
+ assertThrows(() => supposedlyLargeCollection.Concat(tinyCollection).ToArray());
+ assertThrows(() => tinyCollection.Concat(tinyCollection).Concat(supposedlyLargeCollection).ToArray());
+ assertThrows(() => tinyCollection.Concat(tinyCollection).Concat(tinyCollection).Concat(supposedlyLargeCollection).ToArray());
- Assert.Throws<OverflowException>(() => supposedlyLargeCollection.Concat(tinyCollection).ToList());
- Assert.Throws<OverflowException>(() => tinyCollection.Concat(tinyCollection).Concat(supposedlyLargeCollection).ToList());
- Assert.Throws<OverflowException>(() => tinyCollection.Concat(tinyCollection).Concat(tinyCollection).Concat(supposedlyLargeCollection).ToList());
+ assertThrows(() => supposedlyLargeCollection.Concat(tinyCollection).ToList());
+ assertThrows(() => tinyCollection.Concat(tinyCollection).Concat(supposedlyLargeCollection).ToList());
+ assertThrows(() => tinyCollection.Concat(tinyCollection).Concat(tinyCollection).Concat(supposedlyLargeCollection).ToList());
}
[Fact]
diff --git a/src/System.Linq/tests/EmptyPartitionTests.cs b/src/System.Linq/tests/EmptyPartitionTests.cs
index be5020a354..1559fe7299 100644
--- a/src/System.Linq/tests/EmptyPartitionTests.cs
+++ b/src/System.Linq/tests/EmptyPartitionTests.cs
@@ -25,21 +25,27 @@ namespace System.Linq.Tests
[Fact]
public void SingleInstance()
{
- Assert.Same(GetEmptyPartition<int>(), GetEmptyPartition<int>());
+ // .NET Core returns the instance as an optimization.
+ // see https://github.com/dotnet/corefx/pull/2401.
+ Assert.Equal(!PlatformDetection.IsFullFramework, ReferenceEquals(GetEmptyPartition<int>(), GetEmptyPartition<int>()));
}
[Fact]
public void SkipSame()
{
- var empty = GetEmptyPartition<int>();
- Assert.Same(empty, empty.Skip(2));
+ IEnumerable<int> empty = GetEmptyPartition<int>();
+ // .NET Core returns the instance as an optimization.
+ // see https://github.com/dotnet/corefx/pull/2401.
+ Assert.Equal(!PlatformDetection.IsFullFramework, ReferenceEquals(empty, empty.Skip(2)));
}
[Fact]
public void TakeSame()
{
- var empty = GetEmptyPartition<int>();
- Assert.Same(empty, empty.Take(2));
+ IEnumerable<int> empty = GetEmptyPartition<int>();
+ // .NET Core returns the instance as an optimization.
+ // see https://github.com/dotnet/corefx/pull/2401.
+ Assert.Equal(!PlatformDetection.IsFullFramework, ReferenceEquals(empty, empty.Take(2)));
}
[Fact]
diff --git a/src/System.Linq/tests/GroupByTests.cs b/src/System.Linq/tests/GroupByTests.cs
index 906665b5c3..6a218eb6c5 100644
--- a/src/System.Linq/tests/GroupByTests.cs
+++ b/src/System.Linq/tests/GroupByTests.cs
@@ -867,6 +867,7 @@ namespace System.Linq.Tests
[Theory]
[MemberData(nameof(DebuggerAttributesValid_Data))]
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "Grouping<TKey, TValue> doesn't have a Debugger proxy in the full .NET Framework. See https://github.com/dotnet/corefx/issues/14790.")]
public void DebuggerAttributesValid<TKey, TElement>(IGrouping<TKey, TElement> grouping, string keyString, TKey dummy1, TElement dummy2)
{
// The dummy parameters can be removed once https://github.com/dotnet/buildtools/pull/1300 is brought in.
diff --git a/src/System.Linq/tests/MinTests.cs b/src/System.Linq/tests/MinTests.cs
index abd7e31184..c75eaa2a89 100644
--- a/src/System.Linq/tests/MinTests.cs
+++ b/src/System.Linq/tests/MinTests.cs
@@ -122,7 +122,16 @@ namespace System.Linq.Tests
yield return new object[] { new float[] { 6.8f, 9.4f, 10f, 0, -5.6f, float.NaN }, float.NaN };
yield return new object[] { new float[] { float.NaN, float.NegativeInfinity }, float.NaN };
yield return new object[] { new float[] { float.NegativeInfinity, float.NaN }, float.NaN };
- yield return new object[] { Enumerable.Repeat(float.NaN, int.MaxValue), float.NaN };
+
+ // In .NET Core, Enumerable.Min shortcircuits if it finds any float.NaN in the array,
+ // as nothing can be less than float.NaN. See https://github.com/dotnet/corefx/pull/2426.
+ // Without this optimization, we would iterate through int.MaxValue elements, which takes
+ // a long time.
+ if (!PlatformDetection.IsFullFramework)
+ {
+ yield return new object[] { Enumerable.Repeat(float.NaN, int.MaxValue), float.NaN };
+ }
+ yield return new object[] { Enumerable.Repeat(float.NaN, 3), float.NaN };
// Normally NaN < anything is false, as is anything < NaN
// However, this leads to some irksome outcomes in Min and Max.
@@ -166,11 +175,20 @@ namespace System.Linq.Tests
yield return new object[] { new double[] { 3000, 100, 200, 1000 }.Concat(Enumerable.Repeat(double.MinValue, 1)), double.MinValue };
yield return new object[] { Enumerable.Repeat(5.5, 1), 5.5 };
- yield return new object[] { Enumerable.Repeat(double.NaN, int.MaxValue), double.NaN };
yield return new object[] { new double[] { -2.5, 4.9, 130, 4.7, 28 }, -2.5 };
yield return new object[] { new double[] { 6.8, 9.4, 10, 0, -5.6 }, -5.6 };
yield return new object[] { new double[] { -5.5, double.NegativeInfinity, 9.9, double.NegativeInfinity }, double.NegativeInfinity };
+ // In .NET Core, Enumerable.Min shortcircuits if it finds any double.NaN in the array,
+ // as nothing can be less than double.NaN. See https://github.com/dotnet/corefx/pull/2426.
+ // Without this optimization, we would iterate through int.MaxValue elements, which takes
+ // a long time.
+ if (!PlatformDetection.IsFullFramework)
+ {
+ yield return new object[] { Enumerable.Repeat(double.NaN, int.MaxValue), double.NaN };
+ }
+ yield return new object[] { Enumerable.Repeat(double.NaN, 3), double.NaN };
+
yield return new object[] { new double[] { double.NaN, 6.8, 9.4, 10, 0, -5.6 }, double.NaN };
yield return new object[] { new double[] { 6.8, 9.4, 10, 0, -5.6, double.NaN }, double.NaN };
yield return new object[] { new double[] { double.NaN, double.NegativeInfinity }, double.NaN };
@@ -334,10 +352,19 @@ namespace System.Linq.Tests
yield return new object[] { new float?[] { 6.8f, 9.4f, 10f, 0, null, -5.6f, float.NaN }, float.NaN };
yield return new object[] { new float?[] { float.NaN, float.NegativeInfinity }, float.NaN };
yield return new object[] { new float?[] { float.NegativeInfinity, float.NaN }, float.NaN };
- yield return new object[] { Enumerable.Repeat((float?)float.NaN, int.MaxValue), float.NaN };
yield return new object[] { new float?[] { float.NaN, null, null, null }, float.NaN };
yield return new object[] { new float?[] { null, null, null, float.NaN }, float.NaN };
yield return new object[] { new float?[] { null, float.NaN, null }, float.NaN };
+
+ // In .NET Core, Enumerable.Min shortcircuits if it finds any float.NaN in the array,
+ // as nothing can be less than float.NaN. See https://github.com/dotnet/corefx/pull/2426.
+ // Without this optimization, we would iterate through int.MaxValue elements, which takes
+ // a long time.
+ if (!PlatformDetection.IsFullFramework)
+ {
+ yield return new object[] { Enumerable.Repeat((float?)float.NaN, int.MaxValue), float.NaN };
+ }
+ yield return new object[] { Enumerable.Repeat((float?)float.NaN, 3), float.NaN };
}
[Theory]
@@ -375,10 +402,19 @@ namespace System.Linq.Tests
yield return new object[] { new double?[] { 6.8, 9.4, 10, 0.0, null, -5.6f, double.NaN }, double.NaN };
yield return new object[] { new double?[] { double.NaN, double.NegativeInfinity }, double.NaN };
yield return new object[] { new double?[] { double.NegativeInfinity, double.NaN }, double.NaN };
- yield return new object[] { Enumerable.Repeat((double?)double.NaN, int.MaxValue), double.NaN };
yield return new object[] { new double?[] { double.NaN, null, null, null }, double.NaN };
yield return new object[] { new double?[] { null, null, null, double.NaN }, double.NaN };
yield return new object[] { new double?[] { null, double.NaN, null }, double.NaN };
+
+ // In .NET Core, Enumerable.Min shortcircuits if it finds any double.NaN in the array,
+ // as nothing can be less than double.NaN. See https://github.com/dotnet/corefx/pull/2426.
+ // Without this optimization, we would iterate through int.MaxValue elements, which takes
+ // a long time.
+ if (!PlatformDetection.IsFullFramework)
+ {
+ yield return new object[] { Enumerable.Repeat((double?)double.NaN, int.MaxValue), double.NaN };
+ }
+ yield return new object[] { Enumerable.Repeat((double?)double.NaN, 3), double.NaN };
}
[Theory]
diff --git a/src/System.Linq/tests/OrderByDescendingTests.cs b/src/System.Linq/tests/OrderByDescendingTests.cs
index 4876113983..44352051da 100644
--- a/src/System.Linq/tests/OrderByDescendingTests.cs
+++ b/src/System.Linq/tests/OrderByDescendingTests.cs
@@ -156,8 +156,19 @@ namespace System.Linq.Tests
[Fact]
public void OrderByExtremeComparer()
{
- var outOfOrder = new[] { 7, 1, 0, 9, 3, 5, 4, 2, 8, 6 };
- Assert.Equal(Enumerable.Range(0, 10).Reverse(), outOfOrder.OrderByDescending(i => i, new ExtremeComparer()));
+ int[] outOfOrder = new[] { 7, 1, 0, 9, 3, 5, 4, 2, 8, 6 };
+
+ // The full .NET Framework has a bug where the input is incorrectly ordered if the comparer
+ // returns int.MaxValue or int.MinValue. See https://github.com/dotnet/corefx/pull/2240.
+ IEnumerable<int> ordered = outOfOrder.OrderByDescending(i => i, new ExtremeComparer()).ToArray();
+ if (PlatformDetection.IsFullFramework)
+ {
+ Assert.Equal(new[] { 3, 5, 1, 4, 9, 2, 0, 8, 7, 6 }, ordered);
+ }
+ else
+ {
+ Assert.Equal(Enumerable.Range(0, 10).Reverse(), ordered);
+ }
}
[Fact]
diff --git a/src/System.Linq/tests/OrderedSubsetting.cs b/src/System.Linq/tests/OrderedSubsetting.cs
index 0187e88d5f..544dd14327 100644
--- a/src/System.Linq/tests/OrderedSubsetting.cs
+++ b/src/System.Linq/tests/OrderedSubsetting.cs
@@ -223,7 +223,12 @@ namespace System.Linq.Tests
Assert.Empty(ordered.Skip(100).Take(20));
Assert.Equal(Enumerable.Range(10, 20), ordered.Take(30).Skip(10));
Assert.Equal(Enumerable.Range(10, 1), ordered.Take(11).Skip(10));
+ }
+ [Fact]
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "This fails with an OOM with the full .NET Framework, as it iterates through the large array. See https://github.com/dotnet/corefx/pull/6821.")]
+ public void TakeAndSkip_DoesntIterateRangeUnlessNecessary()
+ {
Assert.Empty(Enumerable.Range(0, int.MaxValue).Take(int.MaxValue).OrderBy(i => i).Skip(int.MaxValue - 4).Skip(15));
}
diff --git a/src/System.Linq/tests/RangeTests.cs b/src/System.Linq/tests/RangeTests.cs
index ee6aee6b2f..1acb731fac 100644
--- a/src/System.Linq/tests/RangeTests.cs
+++ b/src/System.Linq/tests/RangeTests.cs
@@ -213,12 +213,14 @@ namespace System.Linq.Tests
}
[Fact]
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, ".NET Core optimizes Enumerable.Range().Last(). Without this optimization, this test takes a long time. See https://github.com/dotnet/corefx/pull/2401.")]
public void Last()
{
Assert.Equal(1000000056, Enumerable.Range(57, 1000000000).Last());
}
[Fact]
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, ".NET Core optimizes Enumerable.Range().LastOrDefault(). Without this optimization, this test takes a long time. See https://github.com/dotnet/corefx/pull/2401.")]
public void LastOrDefault()
{
Assert.Equal(int.MaxValue - 101, Enumerable.Range(-100, int.MaxValue).LastOrDefault());
diff --git a/src/System.Linq/tests/SelectManyTests.cs b/src/System.Linq/tests/SelectManyTests.cs
index 98350f839d..96218a28f6 100644
--- a/src/System.Linq/tests/SelectManyTests.cs
+++ b/src/System.Linq/tests/SelectManyTests.cs
@@ -452,10 +452,12 @@ namespace System.Linq.Tests
Assert.All(subState, s => Assert.Equal(subLength + 1, s));
Assert.All(subCollectionDisposed, t => Assert.True(t));
- // Make sure the iterator's enumerator has been disposed properly.
- Assert.Equal(0, e.Current); // Default value.
+ // .NET Core fixes an oversight where we wouldn't properly dispose
+ // the SelectMany iterator. See https://github.com/dotnet/corefx/pull/13942.
+ int expectedCurrent = PlatformDetection.IsFullFramework ? subLength : 0;
+ Assert.Equal(expectedCurrent, e.Current);
Assert.False(e.MoveNext());
- Assert.Equal(0, e.Current);
+ Assert.Equal(expectedCurrent, e.Current);
}
public static IEnumerable<object[]> DisposeAfterEnumerationData()
@@ -466,12 +468,13 @@ namespace System.Linq.Tests
}
[Theory]
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, ".NET Core optimizes SelectMany and throws an OverflowException. On the full .NET Framework this takes a long time. See https://github.com/dotnet/corefx/pull/13942.")]
[InlineData(new[] { int.MaxValue, 1 })]
[InlineData(new[] { 2, int.MaxValue - 1 })]
[InlineData(new[] { 123, 456, int.MaxValue - 100000, 123456 })]
public void ThrowOverflowExceptionOnConstituentLargeCounts(int[] counts)
{
- var iterator = counts.SelectMany(c => Enumerable.Range(1, c));
+ IEnumerable<int> iterator = counts.SelectMany(c => Enumerable.Range(1, c));
Assert.Throws<OverflowException>(() => iterator.Count());
}
}
diff --git a/src/System.Linq/tests/SelectTests.cs b/src/System.Linq/tests/SelectTests.cs
index 8bd1e1a0f7..c8ebbe64b5 100644
--- a/src/System.Linq/tests/SelectTests.cs
+++ b/src/System.Linq/tests/SelectTests.cs
@@ -730,15 +730,24 @@ namespace System.Linq.Tests
}
[Fact]
- public void Select_ResetCalledOnEnumerator_ExceptionThrown()
+ public void Select_ResetCalledOnEnumerator_ThrowsException()
{
int[] source = new[] { 1, 2, 3, 4, 5 };
Func<int, int> selector = i => i + 1;
- var result = source.Select(selector);
- var enumerator = result.GetEnumerator();
+ IEnumerable<int> result = source.Select(selector);
+ IEnumerator<int> enumerator = result.GetEnumerator();
- Assert.Throws<NotSupportedException>(() => enumerator.Reset());
+ // The.NET full framework throws a NotImplementedException.
+ // See https://github.com/dotnet/corefx/pull/2959.
+ if (PlatformDetection.IsFullFramework)
+ {
+ Assert.Throws<NotImplementedException>(() => enumerator.Reset());
+ }
+ else
+ {
+ Assert.Throws<NotSupportedException>(() => enumerator.Reset());
+ }
}
[Fact]
diff --git a/src/System.Linq/tests/ShortCircuitingTests.cs b/src/System.Linq/tests/ShortCircuitingTests.cs
index ff9dd12f5b..8c2a374d50 100644
--- a/src/System.Linq/tests/ShortCircuitingTests.cs
+++ b/src/System.Linq/tests/ShortCircuitingTests.cs
@@ -57,7 +57,10 @@ namespace System.Linq.Tests
var source = Enumerable.Range(0, 10).ToList();
var pred = new CountedFunction<int, bool>(i => i < 7);
Assert.Equal(6, source.Last(pred.Func));
- Assert.Equal(4, pred.Calls);
+
+ // .NET Core shortcircuits as an optimization.
+ // See https://github.com/dotnet/corefx/pull/2350.
+ Assert.Equal(PlatformDetection.IsFullFramework ? 10 : 4, pred.Calls);
}
[Fact]
@@ -66,7 +69,10 @@ namespace System.Linq.Tests
var tracker = new TrackingEnumerable(10);
var source = tracker.Select(i => i == 5 ? double.NaN : (double)i);
Assert.True(double.IsNaN(source.Min()));
- Assert.Equal(5, tracker.Moves);
+
+ // .NET Core shortcircuits as an optimization.
+ // See https://github.com/dotnet/corefx/pull/2350.
+ Assert.Equal(PlatformDetection.IsFullFramework ? 10 : 5, tracker.Moves);
}
[Fact]
@@ -75,7 +81,10 @@ namespace System.Linq.Tests
var tracker = new TrackingEnumerable(10);
var source = tracker.Select(i => (double?)(i == 5 ? double.NaN : (double)i));
Assert.True(double.IsNaN(source.Min().GetValueOrDefault()));
- Assert.Equal(5, tracker.Moves);
+
+ // .NET Core shortcircuits as an optimization.
+ // See https://github.com/dotnet/corefx/pull/2350.
+ Assert.Equal(PlatformDetection.IsFullFramework ? 10 : 5, tracker.Moves);
}
[Fact]
@@ -84,7 +93,10 @@ namespace System.Linq.Tests
var tracker = new TrackingEnumerable(10);
var source = tracker.Select(i => i == 5 ? float.NaN : (float)i);
Assert.True(float.IsNaN(source.Min()));
- Assert.Equal(5, tracker.Moves);
+
+ // .NET Core shortcircuits as an optimization.
+ // See https://github.com/dotnet/corefx/pull/2350.
+ Assert.Equal(PlatformDetection.IsFullFramework ? 10 : 5, tracker.Moves);
}
[Fact]
@@ -93,7 +105,10 @@ namespace System.Linq.Tests
var tracker = new TrackingEnumerable(10);
var source = tracker.Select(i => (float?)(i == 5 ? float.NaN : (float)i));
Assert.True(float.IsNaN(source.Min().GetValueOrDefault()));
- Assert.Equal(5, tracker.Moves);
+
+ // .NET Core shortcircuits as an optimization.
+ // See https://github.com/dotnet/corefx/pull/2350.
+ Assert.Equal(PlatformDetection.IsFullFramework ? 10 : 5, tracker.Moves);
}
[Fact]
@@ -102,8 +117,11 @@ namespace System.Linq.Tests
var tracker = new TrackingEnumerable(10);
var pred = new CountedFunction<int, bool>(i => i > 2);
Assert.Throws<InvalidOperationException>(() => tracker.Single(pred.Func));
- Assert.Equal(4, tracker.Moves);
- Assert.Equal(4, pred.Calls);
+
+ // .NET Core shortcircuits as an optimization.
+ // See https://github.com/dotnet/corefx/pull/2350.
+ Assert.Equal(PlatformDetection.IsFullFramework ? 10 : 4, tracker.Moves);
+ Assert.Equal(PlatformDetection.IsFullFramework ? 10 : 4, pred.Calls);
}
[Fact]
@@ -112,8 +130,11 @@ namespace System.Linq.Tests
var tracker = new TrackingEnumerable(10);
var pred = new CountedFunction<int, bool>(i => i > 2);
Assert.Throws<InvalidOperationException>(() => tracker.SingleOrDefault(pred.Func));
- Assert.Equal(4, tracker.Moves);
- Assert.Equal(4, pred.Calls);
+
+ // .NET Core shortcircuits as an optimization.
+ // See https://github.com/dotnet/corefx/pull/2350.
+ Assert.Equal(PlatformDetection.IsFullFramework ? 10 : 4, tracker.Moves);
+ Assert.Equal(PlatformDetection.IsFullFramework ? 10 : 4, pred.Calls);
}
[Fact]
@@ -125,8 +146,11 @@ namespace System.Linq.Tests
var tracker1 = new TrackingEnumerable(10);
var pred1 = new CountedFunction<int, bool>(i => i > 2);
Assert.Throws<InvalidOperationException>(() => tracker1.Where(pred1.Func).Single());
- Assert.Equal(tracker0.Moves, tracker1.Moves);
- Assert.Equal(pred0.Calls, pred1.Calls);
+
+ // .NET Core shortcircuits as an optimization.
+ // See https://github.com/dotnet/corefx/pull/2350.
+ Assert.Equal(PlatformDetection.IsFullFramework ? 4 : tracker0.Moves, tracker1.Moves);
+ Assert.Equal(PlatformDetection.IsFullFramework ? 4 : pred0.Calls, pred1.Calls);
}
[Fact]
@@ -138,8 +162,11 @@ namespace System.Linq.Tests
var tracker1 = new TrackingEnumerable(10);
var pred1 = new CountedFunction<int, bool>(i => i > 2);
Assert.Throws<InvalidOperationException>(() => tracker1.Where(pred1.Func).SingleOrDefault());
- Assert.Equal(tracker0.Moves, tracker1.Moves);
- Assert.Equal(pred0.Calls, pred1.Calls);
+
+ // .NET Core shortcircuits as an optimization.
+ // See https://github.com/dotnet/corefx/pull/2350.
+ Assert.Equal(PlatformDetection.IsFullFramework ? 4 : tracker0.Moves, tracker1.Moves);
+ Assert.Equal(PlatformDetection.IsFullFramework ? 4 : pred0.Calls, pred1.Calls);
}
}
}
diff --git a/src/System.Linq/tests/System.Linq.Tests.csproj b/src/System.Linq/tests/System.Linq.Tests.csproj
index 7aca33fb92..d9376de974 100644
--- a/src/System.Linq/tests/System.Linq.Tests.csproj
+++ b/src/System.Linq/tests/System.Linq.Tests.csproj
@@ -10,6 +10,7 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Release|AnyCPU'" />
<ItemGroup Condition="'$(TargetGroup)'=='netcoreapp'">
+ <Compile Include="AppendPrependTests.cs" />
<Compile Include="SkipLastTests.cs" />
<Compile Include="TakeLastTests.cs" />
<Compile Include="OrderByTests.cs" />
@@ -23,7 +24,6 @@
<Compile Include="AsEnumerableTests.cs" />
<Compile Include="AverageTests.cs" />
<Compile Include="CastTests.cs" />
- <Compile Include="AppendPrependTests.cs" />
<Compile Include="ConcatTests.cs" />
<Compile Include="ConsistencyTests.cs" />
<Compile Include="ContainsTests.cs" />
diff --git a/src/System.Linq/tests/TakeTests.cs b/src/System.Linq/tests/TakeTests.cs
index c72c5fb641..6ceb19e23b 100644
--- a/src/System.Linq/tests/TakeTests.cs
+++ b/src/System.Linq/tests/TakeTests.cs
@@ -464,6 +464,7 @@ namespace System.Linq.Tests
[InlineData(1000)]
[InlineData(1000000)]
[InlineData(int.MaxValue)]
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, ".NET Core optimizes Take(...).Skip(...) on lazy sequences to avoid unecessary allocation. Without this optimization this test takes many minutes. See https://github.com/dotnet/corefx/pull/13628.")]
public void LazySkipAllTakenForLargeNumbers(int largeNumber)
{
Assert.Empty(new FastInfiniteEnumerator<int>().Take(largeNumber).Skip(largeNumber));
diff --git a/src/System.Linq/tests/ToArrayTests.cs b/src/System.Linq/tests/ToArrayTests.cs
index 24940399a3..4ee327cd8a 100644
--- a/src/System.Linq/tests/ToArrayTests.cs
+++ b/src/System.Linq/tests/ToArrayTests.cs
@@ -30,20 +30,27 @@ namespace System.Linq.Tests
public void ToArray_UseArrayEmptyWhenEmpty()
{
int[] emptySourceArray = Array.Empty<int>();
- Assert.Same(emptySourceArray.ToArray(), emptySourceArray.ToArray());
- Assert.Same(emptySourceArray.Select(i => i).ToArray(), emptySourceArray.Select(i => i).ToArray());
- Assert.Same(emptySourceArray.ToList().Select(i => i).ToArray(), emptySourceArray.ToList().Select(i => i).ToArray());
- Assert.Same(new Collection<int>(emptySourceArray).Select(i => i).ToArray(), new Collection<int>(emptySourceArray).Select(i => i).ToArray());
- Assert.Same(emptySourceArray.OrderBy(i => i).ToArray(), emptySourceArray.OrderBy(i => i).ToArray());
+ // .NET Core returns the instance as an optimization.
+ // see https://github.com/dotnet/corefx/pull/2401.
+ Action<object, object> assertSame = (objA, objB) =>
+ Assert.Equal(!PlatformDetection.IsFullFramework, ReferenceEquals(objA, objB));
- Assert.Same(Enumerable.Range(5, 0).ToArray(), Enumerable.Range(3, 0).ToArray());
- Assert.Same(Enumerable.Range(5, 3).Take(0).ToArray(), Enumerable.Range(3, 0).ToArray());
- Assert.Same(Enumerable.Range(5, 3).Skip(3).ToArray(), Enumerable.Range(3, 0).ToArray());
- Assert.Same(Enumerable.Repeat(42, 0).ToArray(), Enumerable.Range(84, 0).ToArray());
- Assert.Same(Enumerable.Repeat(42, 3).Take(0).ToArray(), Enumerable.Range(84, 3).Take(0).ToArray());
- Assert.Same(Enumerable.Repeat(42, 3).Skip(3).ToArray(), Enumerable.Range(84, 3).Skip(3).ToArray());
+ assertSame(emptySourceArray.ToArray(), emptySourceArray.ToArray());
+
+ assertSame(emptySourceArray.Select(i => i).ToArray(), emptySourceArray.Select(i => i).ToArray());
+ assertSame(emptySourceArray.ToList().Select(i => i).ToArray(), emptySourceArray.ToList().Select(i => i).ToArray());
+ assertSame(new Collection<int>(emptySourceArray).Select(i => i).ToArray(), new Collection<int>(emptySourceArray).Select(i => i).ToArray());
+ assertSame(emptySourceArray.OrderBy(i => i).ToArray(), emptySourceArray.OrderBy(i => i).ToArray());
+
+ assertSame(Enumerable.Range(5, 0).ToArray(), Enumerable.Range(3, 0).ToArray());
+ assertSame(Enumerable.Range(5, 3).Take(0).ToArray(), Enumerable.Range(3, 0).ToArray());
+ assertSame(Enumerable.Range(5, 3).Skip(3).ToArray(), Enumerable.Range(3, 0).ToArray());
+
+ assertSame(Enumerable.Repeat(42, 0).ToArray(), Enumerable.Range(84, 0).ToArray());
+ assertSame(Enumerable.Repeat(42, 3).Take(0).ToArray(), Enumerable.Range(84, 3).Take(0).ToArray());
+ assertSame(Enumerable.Repeat(42, 3).Skip(3).ToArray(), Enumerable.Range(84, 3).Skip(3).ToArray());
}
@@ -211,7 +218,9 @@ namespace System.Linq.Tests
[Fact]
public void EmptyArraysSameObject()
{
- Assert.Same(Enumerable.Empty<int>().ToArray(), Enumerable.Empty<int>().ToArray());
+ // .NET Core returns the instance as an optimization.
+ // see https://github.com/dotnet/corefx/pull/2401.
+ Assert.Equal(!PlatformDetection.IsFullFramework, ReferenceEquals(Enumerable.Empty<int>().ToArray(), Enumerable.Empty<int>().ToArray()));
var array = new int[0];
Assert.NotSame(array, array.ToArray());
diff --git a/src/System.Linq/tests/ToLookupTests.cs b/src/System.Linq/tests/ToLookupTests.cs
index 6fec68bfa9..663420df1d 100644
--- a/src/System.Linq/tests/ToLookupTests.cs
+++ b/src/System.Linq/tests/ToLookupTests.cs
@@ -292,6 +292,7 @@ namespace System.Linq.Tests
[Theory]
[MemberData(nameof(DebuggerAttributesValid_Data))]
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "Lookup<T> doesn't have a Debugger proxy in the full .NET framework. See https://github.com/dotnet/corefx/issues/14790.")]
public void DebuggerAttributesValid<TKey, TElement>(ILookup<TKey, TElement> lookup, TKey dummy1, TElement dummy2)
{
// The dummy parameters can be removed once https://github.com/dotnet/buildtools/pull/1300 is brought in.
diff --git a/src/System.Linq/tests/WhereTests.cs b/src/System.Linq/tests/WhereTests.cs
index 18835b7f22..a04444f131 100644
--- a/src/System.Linq/tests/WhereTests.cs
+++ b/src/System.Linq/tests/WhereTests.cs
@@ -814,13 +814,21 @@ namespace System.Linq.Tests
}
[Fact]
- public void Select_SourceThrowsOnReset()
+ public void Select_ResetEnumerator_ThrowsException()
{
int[] source = new[] { 1, 2, 3, 4, 5 };
+ IEnumerator<int> enumerator = source.Where(value => true).GetEnumerator();
- var enumerator = source.Where(value => true).GetEnumerator();
-
- Assert.Throws<NotSupportedException>(() => enumerator.Reset());
+ // The full .NET Framework throws a NotImplementedException.
+ // See https://github.com/dotnet/corefx/pull/2959.
+ if (PlatformDetection.IsFullFramework)
+ {
+ Assert.Throws<NotImplementedException>(() => enumerator.Reset());
+ }
+ else
+ {
+ Assert.Throws<NotSupportedException>(() => enumerator.Reset());
+ }
}
[Fact]
diff --git a/src/System.Net.Http/src/ILLinkTrim.xml b/src/System.Net.Http/src/ILLinkTrim.xml
new file mode 100644
index 0000000000..bfe2004834
--- /dev/null
+++ b/src/System.Net.Http/src/ILLinkTrim.xml
@@ -0,0 +1,6 @@
+<linker>
+ <assembly fullname="System.Net.Http">
+ <!-- Anonymous types are used with DiagnosticSource logging and subscribers reflect over those, calling their public getters. -->
+ <type fullname="*f__AnonymousType*" />
+ </assembly>
+</linker> \ No newline at end of file
diff --git a/src/System.Net.Http/src/System/Net/Http/Headers/ContentDispositionHeaderValue.cs b/src/System.Net.Http/src/System/Net/Http/Headers/ContentDispositionHeaderValue.cs
index 7f3aee4949..0e95a0015d 100644
--- a/src/System.Net.Http/src/System/Net/Http/Headers/ContentDispositionHeaderValue.cs
+++ b/src/System.Net.Http/src/System/Net/Http/Headers/ContentDispositionHeaderValue.cs
@@ -126,7 +126,7 @@ namespace System.Net.Http.Headers
else
{
string sizeString = value.Value.ToString(CultureInfo.InvariantCulture);
- _parameters.Add(new NameValueHeaderValue(size, sizeString));
+ Parameters.Add(new NameValueHeaderValue(size, sizeString));
}
}
}
diff --git a/src/System.Net.Http/tests/FunctionalTests/HttpClientHandlerTest.cs b/src/System.Net.Http/tests/FunctionalTests/HttpClientHandlerTest.cs
index 8bb16724ba..08da3f19b7 100644
--- a/src/System.Net.Http/tests/FunctionalTests/HttpClientHandlerTest.cs
+++ b/src/System.Net.Http/tests/FunctionalTests/HttpClientHandlerTest.cs
@@ -512,9 +512,10 @@ namespace System.Net.Http.Functional.Tests
[InlineData(3, 4)]
public async Task GetAsync_MaxAutomaticRedirectionsNServerHops_ThrowsIfTooMany(int maxHops, int hops)
{
- if (PlatformDetection.IsWindows && !PlatformDetection.IsWindows10VersionInsiderPreviewOrGreater)
+ if (PlatformDetection.IsWindows && !PlatformDetection.IsWindows10Version1703OrGreater)
{
- // Run this test only on windows10 build greater than 14917.
+ // Skip this test if running on Windows but on a release prior to Windows 10 Creators Update.
+ _output.WriteLine("Skipping test due to Windows 10 version prior to Version 1703.");
return;
}
@@ -1700,9 +1701,10 @@ namespace System.Net.Http.Functional.Tests
[MemberData(nameof(Http2Servers))]
public async Task SendAsync_RequestVersion20_ResponseVersion20IfHttp2Supported(Uri server)
{
- if (PlatformDetection.IsWindows && !PlatformDetection.IsWindows10VersionInsiderPreviewOrGreater)
+ if (PlatformDetection.IsWindows && !PlatformDetection.IsWindows10Version1703OrGreater)
{
- // Run this test only on windows10 build greater than 14917.
+ // Skip this test if running on Windows but on a release prior to Windows 10 Creators Update.
+ _output.WriteLine("Skipping test due to Windows 10 version prior to Version 1703.");
return;
}
diff --git a/src/System.Net.Http/tests/UnitTests/Headers/ContentDispositionHeaderValueTest.cs b/src/System.Net.Http/tests/UnitTests/Headers/ContentDispositionHeaderValueTest.cs
index 77127091ca..48e3a22242 100644
--- a/src/System.Net.Http/tests/UnitTests/Headers/ContentDispositionHeaderValueTest.cs
+++ b/src/System.Net.Http/tests/UnitTests/Headers/ContentDispositionHeaderValueTest.cs
@@ -332,6 +332,15 @@ namespace System.Net.Http.Tests
Assert.Null(contentDisposition.Size);
}
+ [Theory]
+ [InlineData(null)]
+ [InlineData(66)]
+ public void Size_ValueSetGet_RoundtripsSuccessfully(int? value)
+ {
+ var contentDisposition = new ContentDispositionHeaderValue("inline") { Size = value };
+ Assert.Equal(value, contentDisposition.Size);
+ }
+
[Fact]
public void ToString_UseDifferentContentDispositions_AllSerializedCorrectly()
{
diff --git a/src/System.Net.HttpListener/ref/Configurations.props b/src/System.Net.HttpListener/ref/Configurations.props
index b7611d75b7..c701755863 100644
--- a/src/System.Net.HttpListener/ref/Configurations.props
+++ b/src/System.Net.HttpListener/ref/Configurations.props
@@ -3,7 +3,7 @@
<PropertyGroup>
<BuildConfigurations>
netcoreapp;
- uap-Windows_NT;
+ uap;
</BuildConfigurations>
</PropertyGroup>
</Project> \ No newline at end of file
diff --git a/src/System.Net.HttpListener/ref/System.Net.HttpListener.csproj b/src/System.Net.HttpListener/ref/System.Net.HttpListener.csproj
index 92df1a17e8..b99bbce325 100644
--- a/src/System.Net.HttpListener/ref/System.Net.HttpListener.csproj
+++ b/src/System.Net.HttpListener/ref/System.Net.HttpListener.csproj
@@ -6,8 +6,8 @@
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Release|AnyCPU'" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'uap-Windows_NT-Debug|AnyCPU'" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'uap-Windows_NT-Release|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'uap-Debug|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'uap-Release|AnyCPU'" />
<ItemGroup>
<Compile Include="System.Net.HttpListener.cs" />
</ItemGroup>
diff --git a/src/System.Net.HttpListener/src/PinvokeAnalyzerExceptionList.analyzerdata b/src/System.Net.HttpListener/src/PinvokeAnalyzerExceptionList.analyzerdata
deleted file mode 100644
index e7bc464f8f..0000000000
--- a/src/System.Net.HttpListener/src/PinvokeAnalyzerExceptionList.analyzerdata
+++ /dev/null
@@ -1,46 +0,0 @@
-httpapi.dll!HttpAddUrlToUrlGroup
-httpapi.dll!HttpCancelHttpRequest
-httpapi.dll!HttpCloseRequestQueue
-httpapi.dll!HttpCloseServerSession
-httpapi.dll!HttpCloseUrlGroup
-httpapi.dll!HttpCreateRequestQueue
-httpapi.dll!HttpCreateServerSession
-httpapi.dll!HttpCreateUrlGroup
-httpapi.dll!HttpInitialize
-httpapi.dll!HttpReceiveClientCertificate
-httpapi.dll!HttpReceiveHttpRequest
-httpapi.dll!HttpReceiveRequestEntityBody
-httpapi.dll!HttpRemoveUrlFromUrlGroup
-httpapi.dll!HttpSendHttpResponse
-httpapi.dll!HttpSendResponseEntityBody
-httpapi.dll!HttpSetUrlGroupProperty
-httpapi.dll!HttpWaitForDisconnect
-kernel32.dll!LoadLibraryExW
-kernel32.dll!SetFileCompletionNotificationModes
-sspicli.dll!AcceptSecurityContext
-sspicli.dll!AcquireCredentialsHandleW
-sspicli.dll!ApplyControlToken
-sspicli.dll!CompleteAuthToken
-sspicli.dll!DecryptMessage
-sspicli.dll!DeleteSecurityContext
-sspicli.dll!EncryptMessage
-sspicli.dll!EnumerateSecurityPackagesW
-sspicli.dll!FreeContextBuffer
-sspicli.dll!FreeCredentialsHandle
-sspicli.dll!InitializeSecurityContextW
-sspicli.dll!QueryContextAttributesW
-sspicli.dll!QuerySecurityContextToken
-sspicli.dll!SetContextAttributesW
-sspicli.dll!SspiEncodeStringsAsAuthIdentity
-sspicli.dll!SspiFreeAuthIdentity
-websocket.dll!WebSocketAbortHandle
-websocket.dll!WebSocketBeginClientHandshake
-websocket.dll!WebSocketBeginServerHandshake
-websocket.dll!WebSocketCompleteAction
-websocket.dll!WebSocketCreateClientHandle
-websocket.dll!WebSocketCreateServerHandle
-websocket.dll!WebSocketDeleteHandle
-websocket.dll!WebSocketEndServerHandshake
-websocket.dll!WebSocketGetAction
-websocket.dll!WebSocketReceive
-websocket.dll!WebSocketSend
diff --git a/src/System.Net.HttpListener/src/System.Net.HttpListener.csproj b/src/System.Net.HttpListener/src/System.Net.HttpListener.csproj
index f9f239f7c3..d4178efd27 100644
--- a/src/System.Net.HttpListener/src/System.Net.HttpListener.csproj
+++ b/src/System.Net.HttpListener/src/System.Net.HttpListener.csproj
@@ -4,6 +4,8 @@
<PropertyGroup>
<ProjectGuid>{31E8D18B-9E7D-4924-AFD8-5BD8D75C31FB}</ProjectGuid>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <!-- Although we have a NS configuration, the actual UWP implementation will be fully managed, so just validate against OneCore -->
+ <UWPCompatible>false</UWPCompatible>
</PropertyGroup>
<!-- Default configurations to help VS understand the options -->
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Unix-Debug|AnyCPU'" />
@@ -30,7 +32,6 @@
<Reference Include="System.Numerics.Vectors" />
<Reference Include="System.Resources.ResourceManager" />
<Reference Include="System.Runtime" />
- <Reference Include="System.Runtime.CompilerServices.Unsafe" />
<Reference Include="System.Runtime.Extensions" />
<Reference Include="System.Runtime.InteropServices" />
<Reference Include="System.Security.Claims" />
diff --git a/src/System.Net.Mail/ref/Configurations.props b/src/System.Net.Mail/ref/Configurations.props
index b7611d75b7..c701755863 100644
--- a/src/System.Net.Mail/ref/Configurations.props
+++ b/src/System.Net.Mail/ref/Configurations.props
@@ -3,7 +3,7 @@
<PropertyGroup>
<BuildConfigurations>
netcoreapp;
- uap-Windows_NT;
+ uap;
</BuildConfigurations>
</PropertyGroup>
</Project> \ No newline at end of file
diff --git a/src/System.Net.Mail/ref/System.Net.Mail.csproj b/src/System.Net.Mail/ref/System.Net.Mail.csproj
index adcc96e12c..d8d0db04d1 100644
--- a/src/System.Net.Mail/ref/System.Net.Mail.csproj
+++ b/src/System.Net.Mail/ref/System.Net.Mail.csproj
@@ -6,8 +6,8 @@
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Release|AnyCPU'" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'uap-Windows_NT-Debug|AnyCPU'" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'uap-Windows_NT-Release|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'uap-Debug|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'uap-Release|AnyCPU'" />
<ItemGroup>
<Compile Include="System.Net.Mime.cs" />
<Compile Include="System.Net.Mail.cs" />
diff --git a/src/System.Net.NetworkInformation/src/ILLinkTrim.xml b/src/System.Net.NetworkInformation/src/ILLinkTrim.xml
new file mode 100644
index 0000000000..8d52a51620
--- /dev/null
+++ b/src/System.Net.NetworkInformation/src/ILLinkTrim.xml
@@ -0,0 +1,6 @@
+<linker>
+ <assembly fullname="System.Net.NetworkInformation">
+ <!-- NetEventSource isn't used by this assembly but tests check for its presence -->
+ <type fullname="System.Net.NetEventSource" />
+ </assembly>
+</linker> \ No newline at end of file
diff --git a/src/System.Net.Ping/src/ILLinkTrim.xml b/src/System.Net.Ping/src/ILLinkTrim.xml
new file mode 100644
index 0000000000..aa0107d4e1
--- /dev/null
+++ b/src/System.Net.Ping/src/ILLinkTrim.xml
@@ -0,0 +1,6 @@
+<linker>
+ <assembly fullname="System.Net.Ping">
+ <!-- NetEventSource isn't used by this assembly but tests check for its presence -->
+ <type fullname="System.Net.NetEventSource" />
+ </assembly>
+</linker> \ No newline at end of file
diff --git a/src/System.Net.Primitives/src/ApiCompatBaseline.uap.txt b/src/System.Net.Primitives/src/ApiCompatBaseline.uap.txt
deleted file mode 100644
index 7208de96d3..0000000000
--- a/src/System.Net.Primitives/src/ApiCompatBaseline.uap.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-Compat issues with assembly System.Net.Primitives:
-TypesMustExist : Type 'System.Net.Cookie' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.Add(System.Net.Cookie)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.CopyTo(System.Net.Cookie[], System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.Item.get(System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.Item.get(System.String)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieContainer.Add(System.Net.Cookie)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieContainer.Add(System.Uri, System.Net.Cookie)' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.Net.CookieException' does not exist in the implementation but it does exist in the contract.
-Total Issues: 8
diff --git a/src/System.Net.Requests/tests/AssemblyInfo.cs b/src/System.Net.Requests/tests/AssemblyInfo.cs
new file mode 100644
index 0000000000..4585f28a32
--- /dev/null
+++ b/src/System.Net.Requests/tests/AssemblyInfo.cs
@@ -0,0 +1,9 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using Xunit;
+
+// We have to run them with no parallelism because ServicePointManager.DefaultConnectionLimit is left as 2 in netfx and when they are running in parallel
+// it leaves too many connections open at once which causes tests to hang since they are not able to get a new HttpWebRequest connection opened.
+[assembly: CollectionBehavior(CollectionBehavior.CollectionPerAssembly, DisableTestParallelization = true, MaxParallelThreads = 1)]
diff --git a/src/System.Net.Requests/tests/HttpWebRequestHeaderTest.cs b/src/System.Net.Requests/tests/HttpWebRequestHeaderTest.cs
index 0239a4568b..3913120573 100644
--- a/src/System.Net.Requests/tests/HttpWebRequestHeaderTest.cs
+++ b/src/System.Net.Requests/tests/HttpWebRequestHeaderTest.cs
@@ -29,12 +29,22 @@ namespace System.Net.Tests
Assert.False(request.HaveResponse);
Assert.NotNull(HttpWebRequest.DefaultCachePolicy);
Assert.Null(request.CookieContainer);
- Assert.Equal(0, HttpWebRequest.DefaultMaximumErrorResponseLength); // NetFX behavior difference (64 on NetFX).
Assert.Equal(64, HttpWebRequest.DefaultMaximumResponseHeadersLength);
Assert.Null(request.CookieContainer);
Assert.True(request.AllowWriteStreamBuffering);
Assert.NotNull(request.ClientCertificates);
- Assert.Throws<NotImplementedException>(() => request.ConnectionGroupName); //NetFX behavior difference.
+
+ // TODO: Issue #17842
+ if (!PlatformDetection.IsFullFramework)
+ {
+ Assert.Equal(0, HttpWebRequest.DefaultMaximumErrorResponseLength);
+ Assert.Throws<NotImplementedException>(() => request.ConnectionGroupName);
+ }
+ else
+ {
+ Assert.Equal(64, HttpWebRequest.DefaultMaximumErrorResponseLength);
+ Assert.Null(request.ConnectionGroupName);
+ }
}
[OuterLoop]
@@ -73,12 +83,13 @@ namespace System.Net.Tests
Assert.Equal(request.CookieContainer.GetCookies(remoteServer).Count, 2);
}
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "dotnet/corefx #17842")] // Difference in behavior
[OuterLoop]
[Theory, MemberData(nameof(EchoServers))]
public void HttpWebRequest_ServicePoint_Throws(Uri remoteServer)
{
HttpWebRequest request = WebRequest.CreateHttp(remoteServer);
- Assert.Throws<PlatformNotSupportedException>(() => request.ServicePoint); // NetFX Behavior difference.
+ Assert.Throws<PlatformNotSupportedException>(() => request.ServicePoint);
}
[OuterLoop]
diff --git a/src/System.Net.Requests/tests/HttpWebResponseHeaderTest.cs b/src/System.Net.Requests/tests/HttpWebResponseHeaderTest.cs
index d8475b61c3..5ec9f547dc 100644
--- a/src/System.Net.Requests/tests/HttpWebResponseHeaderTest.cs
+++ b/src/System.Net.Requests/tests/HttpWebResponseHeaderTest.cs
@@ -75,6 +75,7 @@ namespace System.Net.Tests
});
}
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "dotnet/corefx #17842")] // Difference in behavior
[OuterLoop]
[Fact]
public async Task HttpWebResponse_Close_Success()
@@ -103,6 +104,7 @@ namespace System.Net.Tests
}
[Fact]
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "dotnet/corefx #17842")] // Hangs in Desktop
public async Task HttpWebResponse_Serialize_Fails()
{
await LoopbackServer.CreateServerAsync(async (server, url) =>
diff --git a/src/System.Net.Security/src/ILLinkTrim.xml b/src/System.Net.Security/src/ILLinkTrim.xml
new file mode 100644
index 0000000000..f23ab1ad4b
--- /dev/null
+++ b/src/System.Net.Security/src/ILLinkTrim.xml
@@ -0,0 +1,12 @@
+<linker>
+ <assembly fullname="System.Net.Security">
+ <type fullname="System.Net.NTAuthentication">
+ <!-- Called through reflection by System.Net.Mail tests -->
+ <method name="GetOutgoingBlob" />
+ <method name="MakeSignature" />
+ <method name="VerifySignature" />
+ </type>
+ <!-- required by tests -->
+ <type fullname="System.Net.NetEventSource" />
+ </assembly>
+</linker> \ No newline at end of file
diff --git a/src/System.Net.Sockets/tests/FunctionalTests/SendReceive.cs b/src/System.Net.Sockets/tests/FunctionalTests/SendReceive.cs
index b951287845..554ddfad15 100644
--- a/src/System.Net.Sockets/tests/FunctionalTests/SendReceive.cs
+++ b/src/System.Net.Sockets/tests/FunctionalTests/SendReceive.cs
@@ -719,6 +719,21 @@ namespace System.Net.Sockets.Tests
}
}
}
+
+ [Fact]
+ [PlatformSpecific(TestPlatforms.OSX)]
+ public void SocketSendReceiveBufferSize_SetZero_ThrowsSocketException()
+ {
+ using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
+ {
+ SocketException e;
+ e = Assert.Throws<SocketException>(() => socket.SendBufferSize = 0);
+ Assert.Equal(e.SocketErrorCode, SocketError.InvalidArgument);
+
+ e = Assert.Throws<SocketException>(() => socket.ReceiveBufferSize = 0);
+ Assert.Equal(e.SocketErrorCode, SocketError.InvalidArgument);
+ }
+ }
}
public sealed class SendReceiveUdpClient : MemberDatas
diff --git a/src/System.Net.WebClient/tests/WebClientTest.cs b/src/System.Net.WebClient/tests/WebClientTest.cs
index a8f4043242..4b23396f96 100644
--- a/src/System.Net.WebClient/tests/WebClientTest.cs
+++ b/src/System.Net.WebClient/tests/WebClientTest.cs
@@ -41,6 +41,7 @@ namespace System.Net.Tests
Assert.Throws<ArgumentNullException>("Encoding", () => { wc.Encoding = null; });
}
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "dotnet/corefx #17882")] // Difference in behavior.
[Fact]
public static void DownloadData_InvalidArguments_ThrowExceptions()
{
@@ -56,6 +57,7 @@ namespace System.Net.Tests
Assert.Throws<ArgumentNullException>("address", () => { wc.DownloadDataTaskAsync((Uri)null); });
}
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "dotnet/corefx #17882")] // Difference in behavior.
[Fact]
public static void DownloadFile_InvalidArguments_ThrowExceptions()
{
@@ -80,6 +82,7 @@ namespace System.Net.Tests
Assert.Throws<ArgumentNullException>("fileName", () => { wc.DownloadFileTaskAsync(new Uri("http://localhost"), null); });
}
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "dotnet/corefx #17882")] // Difference in behavior.
[Fact]
public static void DownloadString_InvalidArguments_ThrowExceptions()
{
@@ -95,6 +98,7 @@ namespace System.Net.Tests
Assert.Throws<ArgumentNullException>("address", () => { wc.DownloadStringTaskAsync((Uri)null); });
}
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "dotnet/corefx #17882")] // Difference in behavior.
[Fact]
public static void UploadData_InvalidArguments_ThrowExceptions()
{
@@ -129,6 +133,7 @@ namespace System.Net.Tests
Assert.Throws<ArgumentNullException>("data", () => { wc.UploadDataTaskAsync(new Uri("http://localhost"), null, null); });
}
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "dotnet/corefx #17882")] // Difference in behavior.
[Fact]
public static void UploadFile_InvalidArguments_ThrowExceptions()
{
@@ -163,6 +168,7 @@ namespace System.Net.Tests
Assert.Throws<ArgumentNullException>("fileName", () => { wc.UploadFileTaskAsync(new Uri("http://localhost"), null, null); });
}
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "dotnet/corefx #17882")] // Difference in behavior.
[Fact]
public static void UploadString_InvalidArguments_ThrowExceptions()
{
@@ -197,6 +203,7 @@ namespace System.Net.Tests
Assert.Throws<ArgumentNullException>("data", () => { wc.UploadStringTaskAsync(new Uri("http://localhost"), null, null); });
}
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "dotnet/corefx #17882")] // Difference in behavior.
[Fact]
public static void UploadValues_InvalidArguments_ThrowExceptions()
{
@@ -385,6 +392,7 @@ namespace System.Net.Tests
Assert.Equal("ArbitraryValue", wc.ResponseHeaders["ArbitraryHeader"]);
}
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "dotnet/corefx #17882")] // hangs on NETFX
[Fact]
public static async Task RequestHeaders_SpecialHeaders_RequestSucceeds()
{
@@ -517,7 +525,7 @@ namespace System.Net.Tests
});
}
- [Theory]
+ [Fact]
public async Task DownloadData_LargeData_Success()
{
await LoopbackServer.CreateServerAsync(async (server, url) =>
@@ -658,6 +666,7 @@ namespace System.Net.Tests
Assert.Contains(ExpectedText, result);
}
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "dotnet/corefx #17882")] // Difference in behavior.
[OuterLoop("Networking test talking to remote server: issue #11345")]
[Theory]
[MemberData(nameof(EchoServers))]
diff --git a/src/System.Private.DataContractSerialization/src/ILLinkTrim.xml b/src/System.Private.DataContractSerialization/src/ILLinkTrim.xml
new file mode 100644
index 0000000000..e97b67c559
--- /dev/null
+++ b/src/System.Private.DataContractSerialization/src/ILLinkTrim.xml
@@ -0,0 +1,8 @@
+<linker>
+ <assembly fullname="System.Private.DataContractSerialization">
+ <type fullname="System.Runtime.Serialization.DataContractSerializer">
+ <!-- called through reflection by tests -->
+ <method name="set_Option" />
+ </type>
+ </assembly>
+</linker> \ No newline at end of file
diff --git a/src/System.Private.DataContractSerialization/src/System.Private.DataContractSerialization.csproj b/src/System.Private.DataContractSerialization/src/System.Private.DataContractSerialization.csproj
index 0d99dd4e33..1cd3fb6967 100644
--- a/src/System.Private.DataContractSerialization/src/System.Private.DataContractSerialization.csproj
+++ b/src/System.Private.DataContractSerialization/src/System.Private.DataContractSerialization.csproj
@@ -11,7 +11,7 @@
<DebugSymbols>true</DebugSymbols>
<PlatformTarget>AnyCPU</PlatformTarget>
<DefineConstants>$(DefineConstants);FEATURE_SERIALIZATION</DefineConstants>
- <DefineConstants Condition="'$(TargetGroup)' == 'uapaot'">$(DefineConstants);uapaot</DefineConstants>
+ <DefineConstants Condition="'$(TargetGroup)' == 'uapaot'">$(DefineConstants);uapaot</DefineConstants>
<!-- We do not want to block reflection for this assembly -->
<BlockReflectionAttribute Condition="'$(TargetGroup)'=='uapaot'">false</BlockReflectionAttribute>
</PropertyGroup>
@@ -166,7 +166,6 @@
<EmbeddedResource Include="$(MsBuildThisFileDirectory)Resources\$(AssemblyName).rd.xml" />
</ItemGroup>
<ItemGroup>
- <Reference Include="System.CodeDom" />
<Reference Include="System.Collections" />
<Reference Include="System.Collections.Concurrent" />
<Reference Include="System.Collections.NonGeneric" />
diff --git a/src/System.Private.DataContractSerialization/src/System/Runtime/Serialization/OnDeserializedAttribute.cs b/src/System.Private.DataContractSerialization/src/System/Runtime/Serialization/OnDeserializedAttribute.cs
deleted file mode 100644
index 6e4d4bba16..0000000000
--- a/src/System.Private.DataContractSerialization/src/System/Runtime/Serialization/OnDeserializedAttribute.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//------------------------------------------------------------
-
-namespace System.Runtime.Serialization
-{
- [AttributeUsage(AttributeTargets.Method, Inherited = false)]
- public sealed class OnDeserializedAttribute : Attribute
- {
- }
-}
diff --git a/src/System.Private.DataContractSerialization/src/System/Runtime/Serialization/OnDeserializingAttribute.cs b/src/System.Private.DataContractSerialization/src/System/Runtime/Serialization/OnDeserializingAttribute.cs
deleted file mode 100644
index c68d2120f0..0000000000
--- a/src/System.Private.DataContractSerialization/src/System/Runtime/Serialization/OnDeserializingAttribute.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//------------------------------------------------------------
-
-namespace System.Runtime.Serialization
-{
- [AttributeUsage(AttributeTargets.Method, Inherited = false)]
- public sealed class OnDeserializingAttribute : Attribute
- {
- }
-}
diff --git a/src/System.Private.DataContractSerialization/src/System/Runtime/Serialization/OnSerializedAttribute.cs b/src/System.Private.DataContractSerialization/src/System/Runtime/Serialization/OnSerializedAttribute.cs
deleted file mode 100644
index 16b911bf2d..0000000000
--- a/src/System.Private.DataContractSerialization/src/System/Runtime/Serialization/OnSerializedAttribute.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//------------------------------------------------------------
-
-namespace System.Runtime.Serialization
-{
- [AttributeUsage(AttributeTargets.Method, Inherited = false)]
- public sealed class OnSerializedAttribute : Attribute
- {
- }
-}
diff --git a/src/System.Private.DataContractSerialization/src/System/Runtime/Serialization/OnSerializingAttribute.cs b/src/System.Private.DataContractSerialization/src/System/Runtime/Serialization/OnSerializingAttribute.cs
deleted file mode 100644
index 20fe7bf095..0000000000
--- a/src/System.Private.DataContractSerialization/src/System/Runtime/Serialization/OnSerializingAttribute.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-//------------------------------------------------------------
-
-namespace System.Runtime.Serialization
-{
- [AttributeUsage(AttributeTargets.Method, Inherited = false)]
- public sealed class OnSerializingAttribute : Attribute
- {
- }
-}
diff --git a/src/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SerializationException.cs b/src/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SerializationException.cs
deleted file mode 100644
index 0709cd6d4a..0000000000
--- a/src/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SerializationException.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-
-namespace System.Runtime.Serialization
-{
- public class SerializationException : SystemException
- {
- public SerializationException() { }
-
- public SerializationException(string message, Exception innerException)
- : base(message, innerException)
- {
- HResult = __HResults.COR_E_SYSTEM;
- }
-
- public SerializationException(string message)
- : base(message)
- {
- HResult = __HResults.COR_E_SYSTEM;
- }
- }
-}
diff --git a/src/System.Private.DataContractSerialization/src/System/Runtime/Serialization/StreamingContext.cs b/src/System.Private.DataContractSerialization/src/System/Runtime/Serialization/StreamingContext.cs
deleted file mode 100644
index 7f29b272c1..0000000000
--- a/src/System.Private.DataContractSerialization/src/System/Runtime/Serialization/StreamingContext.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-** ValueType: StreamingContext
-**
-**
-** Purpose: A value type indicating the source or destination of our streaming.
-**
-**
-===========================================================*/
-
-namespace System.Runtime.Serialization
-{
- public struct StreamingContext
- {
- internal Object m_additionalContext;
- internal StreamingContextStates m_state;
-
- internal StreamingContext(StreamingContextStates state)
- : this(state, null)
- {
- }
-
- internal StreamingContext(StreamingContextStates state, Object additional)
- {
- m_state = state;
- m_additionalContext = additional;
- }
-
- internal Object Context
- {
- get { return m_additionalContext; }
- }
-
- public override bool Equals(Object obj)
- {
- if (!(obj is StreamingContext))
- {
- return false;
- }
- StreamingContext ctx = (StreamingContext)obj;
- return ctx.m_additionalContext == m_additionalContext && ctx.m_state == m_state;
- }
-
- public override int GetHashCode()
- {
- return (int)m_state;
- }
-
- internal StreamingContextStates State
- {
- get { return m_state; }
- }
- }
-
- // **********************************************************
- // Keep these in sync with the version in vm\runtimehandles.h
- // **********************************************************
- [Flags]
- internal enum StreamingContextStates
- {
- CrossProcess = 0x01,
- CrossMachine = 0x02,
- File = 0x04,
- Persistence = 0x08,
- Remoting = 0x10,
- Other = 0x20,
- Clone = 0x40,
- CrossAppDomain = 0x80,
- All = 0xFF,
- }
-}
diff --git a/src/System.Private.Xml/src/Resources/Strings.resx b/src/System.Private.Xml/src/Resources/Strings.resx
index e53ad79c57..b45e36d070 100644
--- a/src/System.Private.Xml/src/Resources/Strings.resx
+++ b/src/System.Private.Xml/src/Resources/Strings.resx
@@ -3319,4 +3319,46 @@
<data name="Xslt_UpperCaseFirstNotSupported" xml:space="preserve">
<value>Uppercase-First sorting option is not supported.</value>
</data>
+ <data name="XmlPregenTypeDynamic" xml:space="preserve">
+ <value>Cannot pre-generate serialization assembly for type '{0}'. Pre-generation of serialization assemblies is not supported for dynamic types. Save the assembly and load it from disk to use it with XmlSerialization.</value>
+ </data>
+ <data name="XmlPregenOrphanType" xml:space="preserve">
+ <value>Cannot pre-generate serializer for multiple assemblies. Type '{0}' does not belong to assembly {1}.</value>
+ </data>
+ <data name="ErrSerializerExists" xml:space="preserve">
+ <value>Cannot generate serialization assembly {0} because it already exists. Use /{1} to force an overwrite of the existing assembly.</value>
+ </data>
+ <data name="ErrDirectoryExists" xml:space="preserve">
+ <value>Cannot generate serialization assembly '{0}' because a directory with the same name already exists.</value>
+ </data>
+ <data name="ErrInvalidArgument" xml:space="preserve">
+ <value>Ignoring invalid command line argument: '{0}'.</value>
+ </data>
+ <data name="Warning" xml:space="preserve">
+ <value>Warning: {0}.</value>
+ </data>
+ <data name="ErrMissingRequiredArgument" xml:space="preserve">
+ <value>Missing required command-line argument: {0}.</value>
+ </data>
+ <data name="ErrAssembly" xml:space="preserve">
+ <value>The name of the source assembly.</value>
+ </data>
+ <data name="InfoGeneratedAssembly" xml:space="preserve">
+ <value>Generated serialization assembly for assembly {0} --> '{1}'.</value>
+ </data>
+ <data name="InfoAssemblyName" xml:space="preserve">
+ <value>Serialization Assembly Name: {0}.</value>
+ </data>
+ <data name="ErrGenerationFailed" xml:space="preserve">
+ <value>Sgen utility failed to pregenerate serialization assembly for {0}.</value>
+ </data>
+ <data name="ErrorDetails" xml:space="preserve">
+ <value>Error: {0}.</value>
+ </data>
+ <data name="ErrLoadType" xml:space="preserve">
+ <value>Type '{0}' was not found in the assembly '{1}'.</value>
+ </data>
+ <data name="DicrectoryAccessDenied" xml:space="preserve">
+ <value>Access to directory {0} is denied. The process under which XmlSerializer is running does not have sufficient permission to access the directory.</value>
+ </data>
</root>
diff --git a/src/System.Private.Xml/src/System/Xml/Core/util/TernaryTreeGenerator.cs b/src/System.Private.Xml/src/System/Xml/Core/util/TernaryTreeGenerator.cs
deleted file mode 100644
index 762e97f5bd..0000000000
--- a/src/System.Private.Xml/src/System/Xml/Core/util/TernaryTreeGenerator.cs
+++ /dev/null
@@ -1,474 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace TernaryTreeGenerator {
- using System;
- using System.IO;
- using System.Text;
- using System.Diagnostics;
-
- //
- // HTML Element/Attribute name <-> XSL output property mapping
- //
- /// <include file='doc\TernaryTreeGenerator.uex' path='docs/doc[@for="HtmlProps"]/*' />
- public class HtmlProps {
- /// <include file='doc\TernaryTreeGenerator.uex' path='docs/doc[@for="HtmlProps.nameHTML;"]/*' />
- public String nameHTML;
- /// <include file='doc\TernaryTreeGenerator.uex' path='docs/doc[@for="HtmlProps.properties;"]/*' />
- public byte properties;
- /// <include file='doc\TernaryTreeGenerator.uex' path='docs/doc[@for="HtmlProps.visited;"]/*' />
- public bool visited;
- /// <include file='doc\TernaryTreeGenerator.uex' path='docs/doc[@for="HtmlProps.HtmlProps"]/*' />
- public HtmlProps(String nameHTML, byte properties) {
- this.nameHTML = nameHTML;
- this.properties = properties;
- }
- }
-
-
- //
- // TernaryTreeRW // -------------
- //
- // NOTE: This class is only meant to be used to generate static tables to be used
- // later with TernaryTreeRO. It should not be used in production code.
- //
- /// <include file='doc\TernaryTreeGenerator.uex' path='docs/doc[@for="TernaryTreeRW"]/*' />
- public class TernaryTreeRW {
- /// <include file='doc\TernaryTreeGenerator.uex' path='docs/doc[@for="TernaryTreeRW.MAX_NODES"]/*' />
- public const int MAX_NODES = 2000;
- // Since _lt and _gt are just offsets in the node buffer, the node buffer size is limited
- byte [,] nodeBuffer;
- //node indexer;
- int endNodePos;
-
- int numHtmlElements;
- int numHtmlAttributes;
-
- static HtmlProps [] htmlElements = {
- new HtmlProps("a", (byte)(ElementProperties.URI_PARENT)),
- new HtmlProps("address", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("applet", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("area", (byte)(ElementProperties.BOOL_PARENT | ElementProperties.URI_PARENT | ElementProperties.EMPTY | ElementProperties.BLOCK_WS)),
- new HtmlProps("base", (byte)(ElementProperties.URI_PARENT | ElementProperties.EMPTY | ElementProperties.BLOCK_WS)),
- new HtmlProps("basefont", (byte)(ElementProperties.EMPTY | ElementProperties.BLOCK_WS)),
- new HtmlProps("blockquote", (byte)(ElementProperties.URI_PARENT | ElementProperties.BLOCK_WS)),
- new HtmlProps("body", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("br", (byte)(ElementProperties.EMPTY)),
- new HtmlProps("button", (byte)(ElementProperties.BOOL_PARENT)),
- new HtmlProps("caption", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("center", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("col", (byte)(ElementProperties.EMPTY | ElementProperties.BLOCK_WS)),
- new HtmlProps("colgroup", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("dd", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("del", (byte)(ElementProperties.URI_PARENT | ElementProperties.BLOCK_WS)),
- new HtmlProps("dir", (byte)(ElementProperties.BOOL_PARENT | ElementProperties.BLOCK_WS)),
- new HtmlProps("div", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("dl", (byte)(ElementProperties.BOOL_PARENT | ElementProperties.BLOCK_WS)),
- new HtmlProps("dt", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("fieldset", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("font", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("form", (byte)(ElementProperties.URI_PARENT | ElementProperties.BLOCK_WS)),
- new HtmlProps("frame", (byte)(ElementProperties.BOOL_PARENT | ElementProperties.EMPTY | ElementProperties.BLOCK_WS)),
- new HtmlProps("frameset", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("h1", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("h2", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("h3", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("h4", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("h5", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("h6", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("head", (byte)(ElementProperties.URI_PARENT | ElementProperties.BLOCK_WS | ElementProperties.HEAD)),
- new HtmlProps("hr", (byte)(ElementProperties.BOOL_PARENT | ElementProperties.EMPTY | ElementProperties.BLOCK_WS)),
- new HtmlProps("html", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("iframe", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("img", (byte)(ElementProperties.BOOL_PARENT | ElementProperties.URI_PARENT | ElementProperties.EMPTY)),
- new HtmlProps("input", (byte)(ElementProperties.BOOL_PARENT | ElementProperties.URI_PARENT | ElementProperties.EMPTY)),
- new HtmlProps("ins", (byte)(ElementProperties.URI_PARENT | ElementProperties.BLOCK_WS)),
- new HtmlProps("isindex", (byte)(ElementProperties.EMPTY | ElementProperties.BLOCK_WS)),
- new HtmlProps("legend", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("li", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("link", (byte)(ElementProperties.URI_PARENT | ElementProperties.EMPTY | ElementProperties.BLOCK_WS)),
- new HtmlProps("map", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("menu", (byte)(ElementProperties.BOOL_PARENT | ElementProperties.BLOCK_WS)),
- new HtmlProps("meta", (byte)(ElementProperties.EMPTY | ElementProperties.BLOCK_WS)),
- new HtmlProps("noframes", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("noscript", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("object", (byte)(ElementProperties.BOOL_PARENT | ElementProperties.URI_PARENT)),
- new HtmlProps("ol", (byte)(ElementProperties.BOOL_PARENT | ElementProperties.BLOCK_WS)),
- new HtmlProps("optgroup", (byte)(ElementProperties.BOOL_PARENT | ElementProperties.BLOCK_WS)),
- new HtmlProps("option", (byte)(ElementProperties.BOOL_PARENT | ElementProperties.BLOCK_WS)),
- new HtmlProps("p", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("param", (byte)(ElementProperties.EMPTY | ElementProperties.BLOCK_WS)),
- new HtmlProps("pre", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("q", (byte)(ElementProperties.URI_PARENT)),
- new HtmlProps("s", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("script", (byte)(ElementProperties.NO_ENTITIES | ElementProperties.BOOL_PARENT | ElementProperties.URI_PARENT)),
- new HtmlProps("select", (byte)(ElementProperties.BOOL_PARENT)),
- new HtmlProps("strike", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("style", (byte)(ElementProperties.NO_ENTITIES | ElementProperties.BLOCK_WS)),
- new HtmlProps("table", (byte)(ElementProperties.URI_PARENT | ElementProperties.BLOCK_WS)),
- new HtmlProps("tbody", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("td", (byte)(ElementProperties.BOOL_PARENT | ElementProperties.BLOCK_WS)),
- new HtmlProps("textarea", (byte)(ElementProperties.BOOL_PARENT)),
- new HtmlProps("tfoot", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("th", (byte)(ElementProperties.BOOL_PARENT | ElementProperties.BLOCK_WS)),
- new HtmlProps("thead", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("title", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("tr", (byte)(ElementProperties.BLOCK_WS)),
- new HtmlProps("ul", (byte)(ElementProperties.BOOL_PARENT | ElementProperties.BLOCK_WS)),
- new HtmlProps("xmp", (byte)(ElementProperties.BLOCK_WS)),
- };
-
- static HtmlProps [] htmlAttributes = {
- new HtmlProps("action", (byte)AttributeProperties.URI),
- new HtmlProps("checked", (byte)AttributeProperties.BOOLEAN),
- new HtmlProps("cite", (byte)AttributeProperties.URI),
- new HtmlProps("classid", (byte)AttributeProperties.URI),
- new HtmlProps("codebase", (byte)AttributeProperties.URI),
- new HtmlProps("compact", (byte)AttributeProperties.BOOLEAN),
- new HtmlProps("data", (byte)AttributeProperties.URI),
- new HtmlProps("datasrc", (byte)AttributeProperties.URI),
- new HtmlProps("declare", (byte)AttributeProperties.BOOLEAN),
- new HtmlProps("defer", (byte)AttributeProperties.BOOLEAN),
- new HtmlProps("disabled", (byte)AttributeProperties.BOOLEAN),
- new HtmlProps("for", (byte)AttributeProperties.URI),
- new HtmlProps("href", (byte)AttributeProperties.URI),
- new HtmlProps("ismap", (byte)AttributeProperties.BOOLEAN),
- new HtmlProps("longdesc", (byte)AttributeProperties.URI),
- new HtmlProps("multiple", (byte)AttributeProperties.BOOLEAN),
- new HtmlProps("name", (byte)AttributeProperties.URI),
- new HtmlProps("nohref", (byte)AttributeProperties.BOOLEAN),
- new HtmlProps("noresize", (byte)AttributeProperties.BOOLEAN),
- new HtmlProps("noshade", (byte)AttributeProperties.BOOLEAN),
- new HtmlProps("nowrap", (byte)AttributeProperties.BOOLEAN),
- new HtmlProps("profile", (byte)AttributeProperties.URI),
- new HtmlProps("readonly", (byte)AttributeProperties.BOOLEAN),
- new HtmlProps("selected", (byte)AttributeProperties.BOOLEAN),
- new HtmlProps("src", (byte)AttributeProperties.URI),
- new HtmlProps("usemap", (byte)AttributeProperties.URI),
- };
-
- /// <include file='doc\TernaryTreeGenerator.uex' path='docs/doc[@for="TernaryTreeRW.TernaryTreeRW"]/*' />
- public TernaryTreeRW() {
-
- //create the two dimentional byte array
- nodeBuffer = new byte[MAX_NODES, 4];
- numHtmlElements = htmlElements.Length;
- numHtmlAttributes = htmlAttributes.Length;
- endNodePos = 1;
- }
-
- /// <include file='doc\TernaryTreeGenerator.uex' path='docs/doc[@for="TernaryTreeRW.lengthNodes"]/*' />
- public int lengthNodes() {
- return endNodePos;
- }
- /// <include file='doc\TernaryTreeGenerator.uex' path='docs/doc[@for="TernaryTreeRW.lengthBytes"]/*' />
- public int lengthBytes() {
- return endNodePos;
- }
-
-
- // ----------------------------------------------------------------------------
- // addCaseInsensitiveString()
- //
- // Insert a string into this ternary tree. Assert if it's already been inserted
- // or if the path offset variables (_lt, _gt) are overflowed.
- //
- /// <include file='doc\TernaryTreeGenerator.uex' path='docs/doc[@for="TernaryTreeRW.AddCaseInsensitiveString"]/*' />
- public void AddCaseInsensitiveString(String stringToAdd, byte data) {
-
-
- int charToAdd;
- int charInTheTree;
- int stringPos = 0;
- int nodePos = 0;
-
- if (stringToAdd.Length == 0) {
- charToAdd = 0;
- }
- else {
- charToAdd = stringToAdd[0];
-
- // Normalize to upper case
- if (charToAdd >= 'a' && charToAdd <= 'z') charToAdd -= ('a' - 'A');
- }
-
- do {
-
-
- // Only ASCII characters are allowed
- if (charToAdd > 'z') {
- Console.WriteLine("Only ASCII characters are allowed");
- }
-
- charInTheTree = nodeBuffer[nodePos, (int)TernaryTreeByte.characterByte];
-
- //Console.Write("charToAdd: {0},charInTheTree: {1}, nodePos: {2}, endNodePos {3}, ", Convert.ToChar(charToAdd), Convert.ToChar(charInTheTree), nodePos, endNodePos);
- //Console.WriteLine("Left :{0}, Right:{0}", nodeBuffer[nodePos, (int)TernaryTreeByte.leftTree], nodeBuffer[nodePos, (int)TernaryTreeByte.rightTree]);
-
-
- if (charToAdd == charInTheTree) {
- // This character already appears in the tree; take the equals path
- nodePos++;
- stringPos++;
-
- if (stringPos == stringToAdd.Length) {
- charToAdd = 0;
- }
- else {
- charToAdd = stringToAdd[stringPos];
-
- // Normalize to upper case
- if (charToAdd >= 'a' && charToAdd <= 'z') charToAdd -= ('a' - 'A');
-
- }
- } else {
-
- if (charToAdd < charInTheTree) {
-
- if (nodeBuffer[nodePos, (int)TernaryTreeByte.leftTree] == 0x0) {
-
- // Create a new path less than the current character
- if (endNodePos - nodePos > 255) {
- throw new Exception("Too many characters have been added");
- } else {
- nodeBuffer[nodePos, (int)TernaryTreeByte.leftTree] = (byte)(endNodePos - nodePos);
- }
- } else {
-
- // Take the existing less than path
- nodePos = nodePos + nodeBuffer[nodePos, (int)TernaryTreeByte.leftTree];
- continue;
- }
-
- } else {
-
- if (nodeBuffer[nodePos, (int)TernaryTreeByte.rightTree] == 0x0) {
- // Create a new path greater than the current character
- if (endNodePos - nodePos > 255) {
- throw new Exception("Too many characters have been added");
- } else {
- nodeBuffer[nodePos, (int)TernaryTreeByte.rightTree] = (byte)(endNodePos - nodePos);
- }
-
-
- } else {
- // Take the existing greater than path
- nodePos = nodePos + nodeBuffer[nodePos, (int)TernaryTreeByte.rightTree] ;
- continue;
- }
- }
-
-
- // Add new nodes to hold rest of string
-
- for (int i = stringPos; i <stringToAdd.Length; ++ i) {
-
- charToAdd = stringToAdd[i];
- // Normalize to upper case
- if (charToAdd >= 'a' && charToAdd <= 'z') charToAdd -= ('a' - 'A');
-
- nodePos = endNodePos++;
- nodeBuffer[nodePos, (int)TernaryTreeByte.characterByte] = (byte) charToAdd;
-
- }
-
- // Store terminating null to indicate that this is the end of the string
- nodePos = endNodePos ++;
- nodeBuffer[nodePos, (int)TernaryTreeByte.characterByte] = 0;
- nodeBuffer[nodePos, (int)TernaryTreeByte.data] = data;
- break;
- }
-
- } while (true);
-
- }
-
- /// <include file='doc\TernaryTreeGenerator.uex' path='docs/doc[@for="TernaryTreeRW.GenerateHtmlElementTable"]/*' />
- public void GenerateHtmlElementTable() {
-
- // Verify that the element and attribute tables are sorted correctly
- htmlElements[0].visited = false;
-
- for (int i = 1; i < numHtmlElements; i++) {
- htmlElements[i].visited = false;
- if (htmlElements[i - 1].nameHTML.CompareTo(htmlElements[i].nameHTML) > 0) {
- throw new Exception("String table not correctly sorted");
- }
- }
-
- // Add strings from the tables to the ternary trees
- AddMidHtmlElement(0, numHtmlElements - 1);
-
- }
-
- /// <include file='doc\TernaryTreeGenerator.uex' path='docs/doc[@for="TernaryTreeRW.GenerateHtmlAttributeTable"]/*' />
- public void GenerateHtmlAttributeTable() {
-
- // Verify that the element and attribute tables are sorted correctly
-
- htmlAttributes[0].visited = false;
-
- for (int i = 1; i < numHtmlAttributes; i++) {
- htmlAttributes[i].visited = false;
-
- if (htmlAttributes[i - 1].nameHTML.CompareTo(htmlAttributes[i].nameHTML) > 0) {
- throw new Exception("String table not correctly sorted");
- }
- }
-
- // Add strings from the tables to the ternary trees
- AddMidHtmlAttribute(0, numHtmlAttributes - 1);
-
- }
-
-
-
- // ----------------------------------------------------------------------------
- // addMidHtml()
- //
- // Given a sorted list of HTML names/properties, adds the middle name to the
- // ternary tree and partitions the remaining halves, which are then recursively
- // sent to this procedure.
- //
- void AddMidHtmlElement(int startPos, int endPos) {
-
- int midPos;
-
- if (startPos > endPos)
- return;
-
- midPos = (startPos + endPos) / 2;
-
- AddCaseInsensitiveString(htmlElements[midPos].nameHTML, htmlElements[midPos].properties);
-
- AddMidHtmlElement(startPos, midPos - 1);
- AddMidHtmlElement(midPos + 1, endPos);
- }
-
- // ----------------------------------------------------------------------------
- // addMidHtml()
- //
- // Given a sorted list of HTML names/properties, adds the middle name to the
- // ternary tree and partitions the remaining halves, which are then recursively
- // sent to this procedure.
- //
- void AddMidHtmlAttribute(int startPos, int endPos) {
- int midPos;
- if (startPos > endPos)
- return;
-
- midPos = (startPos + endPos) / 2;
- AddCaseInsensitiveString(htmlAttributes[midPos].nameHTML, htmlAttributes[midPos].properties);
-
-
- AddMidHtmlAttribute(startPos, midPos - 1);
- AddMidHtmlAttribute(midPos + 1, endPos);
- }
-
- //----------------------------------------------------------------------------
- // OutputFileHeader()
- //
-
- /// <include file='doc\TernaryTreeGenerator.uex' path='docs/doc[@for="TernaryTreeRW.OutputFileHeader"]/*' />
- public void OutputFileHeader(StreamWriter streamWriter) {
- string indent1 = " ";
-
- streamWriter.WriteLine("//------------------------------------------------------------------------------");
- streamWriter.WriteLine("// <copyright file=\"TernaryTreeGenerator.cs\" company=\"Microsoft\">");
- streamWriter.WriteLine("// Copyright (c) Microsoft Corporation. All rights reserved.");
- streamWriter.WriteLine("// </copyright>");
- streamWriter.WriteLine("// <owner current=\"true\" primary=\"true\">derekdb</owner>");
- streamWriter.WriteLine("//------------------------------------------------------------------------------");
-
- streamWriter.WriteLine("//");
- streamWriter.WriteLine("// This file is generated by TernaryTreeGenerator.cs,");
- streamWriter.WriteLine("// and is used by the TernaryTreeRO class.\n");
- streamWriter.WriteLine("//");
- streamWriter.WriteLine("// It contains the state for a ternary tree used to map HTML\n");
- streamWriter.WriteLine("// keywords to XSL output properties.\n");
- streamWriter.WriteLine("//");
- streamWriter.WriteLine("// Do not modify this file directly! (as if you could)\n");
- streamWriter.WriteLine("//");
-
- streamWriter.WriteLine("namespace System.Xml {");
- streamWriter.WriteLine("{0}internal abstract class HtmlTernaryTree {{", indent1);
-
-
- }
-
- //
- // Dump a C-style BYTE table to the output file. This table will contain the
- // persisted state of this ternary tree.
- //
-
- /// <include file='doc\TernaryTreeGenerator.uex' path='docs/doc[@for="TernaryTreeRW.OutputFileFooter"]/*' />
- public void OutputFileFooter(StreamWriter streamWriter) {
- streamWriter.WriteLine(" }");
- streamWriter.WriteLine("}");
- streamWriter.Flush();
- }
-
-
- //----------------------------------------------------------------------------
- // dumpTree()
- //
- // Dump a C-style BYTE table to the output file. This table will contain the
- // persisted state of this ternary tree.
- //
-
- /// <include file='doc\TernaryTreeGenerator.uex' path='docs/doc[@for="TernaryTreeRW.dumpTree"]/*' />
- public void dumpTree(StreamWriter streamWriter, String wszName) {
- int n = 0;
- string indent3 = " ";
- string indent2 = " ";
- string indent1 = " ";
-
- streamWriter.WriteLine("{0}internal static byte [] {1} = {{", indent2, wszName);
- streamWriter.Write(indent3);
-
- for (int pos = 1; pos < endNodePos; pos ++ ) {
- streamWriter.Write( "{0},{1},{2},{3},", nodeBuffer[pos, (int)TernaryTreeByte.characterByte],
- nodeBuffer[pos, (int)TernaryTreeByte.leftTree],
- nodeBuffer[pos, (int)TernaryTreeByte.rightTree],
- nodeBuffer[pos, (int)TernaryTreeByte.data]);
- n++;
-
- if (n % 7 == 0 ){
- streamWriter.WriteLine();
- streamWriter.Write(indent3);
- } else {
- streamWriter.Write(" ");
- }
- }
- streamWriter.WriteLine();
- streamWriter.WriteLine("{0}}};",indent2);
- streamWriter.Flush();
- }
- }
-
-
- /// <include file='doc\TernaryTreeGenerator.uex' path='docs/doc[@for="XsltableMain"]/*' />
- public class XsltableMain {
- /// <include file='doc\TernaryTreeGenerator.uex' path='docs/doc[@for="XsltableMain.Main"]/*' />
- public static void Main() {
- try {
- FileStream fs = new FileStream("..\\..\\..\\HtmlTernaryTree.cs", FileMode.Create, FileAccess.Write, FileShare.Read);
- StreamWriter streamWriter = new StreamWriter(fs);
- TernaryTreeRW ternaryTreeRW = new TernaryTreeRW();
- ternaryTreeRW.OutputFileHeader(streamWriter);
- ternaryTreeRW.GenerateHtmlElementTable();
- ternaryTreeRW.dumpTree(streamWriter, "htmlElements");
- ternaryTreeRW = new TernaryTreeRW();
- ternaryTreeRW.GenerateHtmlAttributeTable();
- ternaryTreeRW.dumpTree(streamWriter, "htmlAttributes");
- ternaryTreeRW.OutputFileFooter(streamWriter);
- fs.Flush();
- fs.Close();
- } catch (Exception ex) {
- Console.WriteLine(ex.Message);
- }
-
- }
- }
-}
diff --git a/src/System.Private.Xml/src/System/Xml/Resolvers/XmlXapResolver.cs b/src/System.Private.Xml/src/System/Xml/Resolvers/XmlXapResolver.cs
deleted file mode 100644
index 869d7d55bf..0000000000
--- a/src/System.Private.Xml/src/System/Xml/Resolvers/XmlXapResolver.cs
+++ /dev/null
@@ -1,79 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Xml {
- using System;
- using System.IO;
- using System.Diagnostics;
-
- //
- // Application stream resolver interface. See XmlXapResolver.s_appStreamResolver for more comments.
- //
- [System.Runtime.CompilerServices.FriendAccessAllowed] // used from System.Windows.dll
- internal interface IApplicationResourceStreamResolver {
- Stream GetApplicationResourceStream(Uri relativeUri);
- }
-
- /// <summary>
- /// Resolves resources from the application package = xap
- /// Only applicable to Silverlight
- /// </summary>
- public class XmlXapResolver : XmlResolver {
-
- //
- // Application stream resolver interface.
- //
- // This interface is set on the XmlXapResolver class by the host initialization code in System.Windows.dll
- // via the RegisterApplicationResourceStreamResolver method. It is set to a interface whose GetApplicationResourceStream returns
- // Application.GetResourceStream(uri).Stream; We cannot call this API directly because that would create
- // a circular dependency within the Silverlight core assemblies.
- private static IApplicationResourceStreamResolver s_appStreamResolver;
-
- [System.Runtime.CompilerServices.FriendAccessAllowed] // used from System.Windows.dll
- internal static void RegisterApplicationResourceStreamResolver(IApplicationResourceStreamResolver appStreamResolver) {
- if (appStreamResolver == null) {
- throw new ArgumentNullException(nameof(appStreamResolver));
- }
- s_appStreamResolver = appStreamResolver;
- }
-
- /// <summary>
- /// Public constructor
- /// </summary>
- public XmlXapResolver() {
- }
-
- public override Object GetEntity(Uri absoluteUri, string role, Type ofObjectToReturn) {
- if (absoluteUri == null) {
- throw new ArgumentNullException(nameof(absoluteUri));
- }
-
- if (s_appStreamResolver == null) {
- Debug.Assert(false, "No IApplicationResourceStreamResolver is registered on the XmlXapResolver.");
- throw new XmlException(SR.Xml_InternalError, string.Empty);
- }
-
- if (ofObjectToReturn == null || ofObjectToReturn == typeof(Stream) || ofObjectToReturn == typeof(Object)) {
- // Note that even though the parameter is called absoluteUri we will only accept
- // relative Uris here. The base class's ResolveUri can create a relative uri
- // if no baseUri is specified.
- // Check the argument for common schemes (http, file) and throw exception with nice error message.
- Stream stream;
- try {
- stream = s_appStreamResolver.GetApplicationResourceStream(absoluteUri);
- }
- catch (ArgumentException e) {
- throw new XmlException(SR.Xml_XapResolverCannotOpenUri, absoluteUri.ToString(), e, null);
- }
- if (stream == null) {
- throw new XmlException(SR.Xml_CannotFindFileInXapPackage, absoluteUri.ToString());
- }
- return stream;
- }
- else {
- throw new XmlException(SR.Xml_UnsupportedClass, string.Empty);
- }
- }
- }
-}
diff --git a/src/System.Private.Xml/src/System/Xml/Schema/GenerateConverter.cs b/src/System.Private.Xml/src/System/Xml/Schema/GenerateConverter.cs
deleted file mode 100644
index 2f9e7d5c29..0000000000
--- a/src/System.Private.Xml/src/System/Xml/Schema/GenerateConverter.cs
+++ /dev/null
@@ -1,1028 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace MS.Internal.ValueConverter {
- using System;
- using System.Text.RegularExpressions;
- using System.Xml;
- using System.Xml.Schema;
- using System.Xml.XPath;
- using System.Collections;
- using System.Collections.Generic;
- using System.IO;
- using System.CodeDom.Compiler; // for IndentedTextWriter
-
- public class Generator {
- private IndentedTextWriter w;
-
- public static Type[] InterfaceTypes = {typeof(Boolean), typeof(DateTime), typeof(Decimal), typeof(Double), typeof(Int32), typeof(Int64), typeof(Single), typeof(String), typeof(Object)};
-
- // xs:decimal and derived types
- public static ConversionRuleGroup Numeric10RuleGroup =
- new ConversionRuleGroup("XmlNumeric10Converter", new string[][]
- {
- // Xml Type Source Clr Type Destination Clr Type Conversion Logic
- // =====================================================================================================
- new string[] {"*", "Decimal", "Decimal", "((decimal) value)"},
- new string[] {"*", "Int32", "Decimal", "((decimal) (int) value)"},
- new string[] {"*", "Int64", "Decimal", "((decimal) (long) value)"},
- new string[] {"*", "String", "Decimal", "XmlConvert.ToInteger((string) value)"},
- new string[] {"xs:decimal", "String", "Decimal", "XmlConvert.ToDecimal((string) value)"},
- new string[] {"*", "XmlAtomicValue", "Decimal", "((decimal) ((XmlAtomicValue) value).ValueAs(DecimalType))"},
-
- new string[] {"*", "Decimal", "Int32", "DecimalToInt32((decimal) value)"},
- new string[] {"*", "Int32", "Int32", "((int) value)"},
- new string[] {"*", "Int64", "Int32", "Int64ToInt32((long) value)"},
- new string[] {"*", "String", "Int32", "XmlConvert.ToInt32((string) value)"},
- new string[] {"xs:decimal", "String", "Int32", "DecimalToInt32(XmlConvert.ToDecimal((string) value))"},
- new string[] {"*", "XmlAtomicValue", "Int32", "((XmlAtomicValue) value).ValueAsInt"},
-
- new string[] {"*", "Decimal", "Int64", "DecimalToInt64((decimal) value)"},
- new string[] {"*", "Int32", "Int64", "((long) (int) value)"},
- new string[] {"*", "Int64", "Int64", "((long) value)"},
- new string[] {"*", "String", "Int64", "XmlConvert.ToInt64((string) value)"},
- new string[] {"xs:decimal", "String", "Int64", "DecimalToInt64(XmlConvert.ToDecimal((string) value))"},
- new string[] {"*", "XmlAtomicValue", "Int64", "((XmlAtomicValue) value).ValueAsLong"},
-
- new string[] {"*", "Decimal", "String", "XmlConvert.ToString(decimal.Truncate((decimal) value))"},
- new string[] {"xs:decimal", "Decimal", "String", "XmlConvert.ToString((decimal) value)"},
- new string[] {"*", "Int32", "String", "XmlConvert.ToString((int) value)"},
- new string[] {"*", "Int64", "String", "XmlConvert.ToString((long) value)"},
- new string[] {"*", "String", "String", "((string) value)"},
- new string[] {"*", "XmlAtomicValue", "String", "((XmlAtomicValue) value).Value"},
-
- new string[] {"*", "Decimal", "XmlAtomicValue", "(new XmlAtomicValue(SchemaType, value))"},
- new string[] {"*", "Int32", "XmlAtomicValue", "(new XmlAtomicValue(SchemaType, (int) value))"},
- new string[] {"*", "Int64", "XmlAtomicValue", "(new XmlAtomicValue(SchemaType, (long) value))"},
- new string[] {"*", "String", "XmlAtomicValue", "(new XmlAtomicValue(SchemaType, (string) value))"},
- new string[] {"*", "XmlAtomicValue", "XmlAtomicValue", "((XmlAtomicValue) value)"},
-
- new string[] {"*", "Decimal", "XPathItem", "(new XmlAtomicValue(SchemaType, value))"},
- new string[] {"*", "Int32", "XPathItem", "(new XmlAtomicValue(SchemaType, (int) value))"},
- new string[] {"*", "Int64", "XPathItem", "(new XmlAtomicValue(SchemaType, (long) value))"},
- new string[] {"*", "String", "XPathItem", "(new XmlAtomicValue(SchemaType, (string) value))"},
- new string[] {"*", "XmlAtomicValue", "XPathItem", "((XmlAtomicValue) value)"},
-
- new string[] {"*", "*", "Byte", "Int32ToByte(this.ToInt32(value))"},
- new string[] {"*", "*", "Int16", "Int32ToInt16(this.ToInt32(value))"},
- new string[] {"*", "*", "SByte", "Int32ToSByte(this.ToInt32(value))"},
- new string[] {"*", "*", "UInt16", "Int32ToUInt16(this.ToInt32(value))"},
- new string[] {"*", "*", "UInt32", "Int64ToUInt32(this.ToInt64(value))"},
- new string[] {"*", "*", "UInt64", "DecimalToUInt64(this.ToDecimal(value))"},
-
- new string[] {"*", "Byte", "*", "this.ChangeType((int) (byte) value, destinationType)"},
- new string[] {"*", "Int16", "*", "this.ChangeType((int) (short) value, destinationType)"},
- new string[] {"*", "SByte", "*", "this.ChangeType((int) (sbyte) value, destinationType)"},
- new string[] {"*", "UInt16", "*", "this.ChangeType((int) (ushort) value, destinationType)"},
- new string[] {"*", "UInt32", "*", "this.ChangeType((long) (uint) value, destinationType)"},
- new string[] {"*", "UInt64", "*", "this.ChangeType((decimal) (ulong) value, destinationType)"},
- });
-
- // xs:double, xs:float, and derived types
- public static ConversionRuleGroup Numeric2RuleGroup =
- new ConversionRuleGroup("XmlNumeric2Converter", new string[][]
- {
- // Xml Type Source Clr Type Destination Clr Type Conversion Logic
- // =====================================================================================================
- new string[] {"*", "Double", "Double", "((double) value)"},
- new string[] {"*", "Single", "Double", "((double) (float) value)"},
- new string[] {"*", "String", "Double", "XmlConvert.ToDouble((string) value)"},
- new string[] {"xs:float", "String", "Double", "((double) XmlConvert.ToSingle((string) value))"},
- new string[] {"*", "XmlAtomicValue", "Double", "((XmlAtomicValue) value).ValueAsDouble"},
-
- new string[] {"*", "Double", "Single", "((float) (double) value)"},
- new string[] {"*", "Single", "Single", "((float) value)"},
- new string[] {"*", "String", "Single", "((float) XmlConvert.ToDouble((string) value))"},
- new string[] {"xs:float", "String", "Single", "XmlConvert.ToSingle((string) value)"},
- new string[] {"*", "XmlAtomicValue", "Single", "((float) ((XmlAtomicValue) value).ValueAs(SingleType))"},
-
- new string[] {"*", "Double", "String", "XmlConvert.ToString((double) value)"},
- new string[] {"xs:float", "Double", "String", "XmlConvert.ToString(ToSingle((double) value))"},
- new string[] {"*", "Single", "String", "XmlConvert.ToString((double) (float) value)"},
- new string[] {"xs:float", "Single", "String", "XmlConvert.ToString((float) value)"},
- new string[] {"*", "String", "String", "((string) value)"},
- new string[] {"*", "XmlAtomicValue", "String", "((XmlAtomicValue) value).Value"},
-
- new string[] {"*", "Double", "XmlAtomicValue", "(new XmlAtomicValue(SchemaType, (double) value))"},
- new string[] {"*", "Single", "XmlAtomicValue", "(new XmlAtomicValue(SchemaType, value))"},
- new string[] {"*", "String", "XmlAtomicValue", "(new XmlAtomicValue(SchemaType, (string) value))"},
- new string[] {"*", "XmlAtomicValue", "XmlAtomicValue", "((XmlAtomicValue) value)"},
-
- new string[] {"*", "Double", "XPathItem", "(new XmlAtomicValue(SchemaType, (double) value))"},
- new string[] {"*", "Single", "XPathItem", "(new XmlAtomicValue(SchemaType, value))"},
- new string[] {"*", "String", "XPathItem", "(new XmlAtomicValue(SchemaType, (string) value))"},
- new string[] {"*", "XmlAtomicValue", "XPathItem", "((XmlAtomicValue) value)"},
- });
-
- // xs:dateTime, xs:date, xs:time, xs:gDay, xs:gMonth, xs:gMOnthDay, xs:gYear, xs:gYearMonth, and derived types
- public static ConversionRuleGroup DateTimeRuleGroup =
- new ConversionRuleGroup("XmlDateTimeConverter", new string[][]
- {
- // Xml Type Source Clr Type Destination Clr Type Conversion Logic
- // =====================================================================================================
- new string[] {"*", "DateTime", "DateTime", "((DateTime) value)"},
- new string[] {"*", "String", "DateTime", "StringToDateTime((string) value)"},
- new string[] {"xs:date", "String", "DateTime", "StringToDate((string) value)"},
- new string[] {"xs:time", "String", "DateTime", "StringToTime((string) value)"},
- new string[] {"xs:gDay", "String", "DateTime", "StringToGDay((string) value)"},
- new string[] {"xs:gMonth", "String", "DateTime", "StringToGMonth((string) value)"},
- new string[] {"xs:gMonthDay", "String", "DateTime", "StringToGMonthDay((string) value)"},
- new string[] {"xs:gYear", "String", "DateTime", "StringToGYear((string) value)"},
- new string[] {"xs:gYearMonth", "String", "DateTime", "StringToGYearMonth((string) value)"},
- new string[] {"*", "XmlAtomicValue", "DateTime", "((XmlAtomicValue) value).ValueAsDateTime"},
-
- new string[] {"*", "DateTime", "String", "DateTimeToString((DateTime) value)"},
- new string[] {"xs:date", "DateTime", "String", "DateToString((DateTime) value)"},
- new string[] {"xs:time", "DateTime", "String", "TimeToString((DateTime) value)"},
- new string[] {"xs:gDay", "DateTime", "String", "GDayToString((DateTime) value)"},
- new string[] {"xs:gMonth", "DateTime", "String", "GMonthToString((DateTime) value)"},
- new string[] {"xs:gMonthDay", "DateTime", "String", "GMonthDayToString((DateTime) value)"},
- new string[] {"xs:gYear", "DateTime", "String", "GYearToString((DateTime) value)"},
- new string[] {"xs:gYearMonth", "DateTime", "String", "GYearMonthToString((DateTime) value)"},
- new string[] {"*", "String", "String", "((string) value)"},
- new string[] {"*", "XmlAtomicValue", "String", "((XmlAtomicValue) value).Value"},
-
- new string[] {"*", "DateTime", "XmlAtomicValue", "(new XmlAtomicValue(SchemaType, (DateTime) value))"},
- new string[] {"*", "String", "XmlAtomicValue", "(new XmlAtomicValue(SchemaType, (string) value))"},
- new string[] {"*", "XmlAtomicValue", "XmlAtomicValue", "((XmlAtomicValue) value)"},
-
- new string[] {"*", "DateTime", "XPathItem", "(new XmlAtomicValue(SchemaType, (DateTime) value))"},
- new string[] {"*", "String", "XPathItem", "(new XmlAtomicValue(SchemaType, (string) value))"},
- new string[] {"*", "XmlAtomicValue", "XPathItem", "((XmlAtomicValue) value)"},
- });
-
- // xs:boolean and derived types
- public static ConversionRuleGroup BooleanRuleGroup =
- new ConversionRuleGroup("XmlBooleanConverter", new string[][]
- {
- // Xml Type Source Clr Type Destination Clr Type Conversion Logic
- // =====================================================================================================
- new string[] {"*", "Boolean", "Boolean", "((bool) value)"},
- new string[] {"*", "String", "Boolean", "XmlConvert.ToBoolean((string) value)"},
- new string[] {"*", "XmlAtomicValue", "Boolean", "((XmlAtomicValue) value).ValueAsBoolean"},
-
- new string[] {"*", "Boolean", "String", "XmlConvert.ToString((bool) value)"},
- new string[] {"*", "String", "String", "((string) value)"},
- new string[] {"*", "XmlAtomicValue", "String", "((XmlAtomicValue) value).Value"},
-
- new string[] {"*", "Boolean", "XmlAtomicValue", "(new XmlAtomicValue(SchemaType, (bool) value))"},
- new string[] {"*", "String", "XmlAtomicValue", "(new XmlAtomicValue(SchemaType, (string) value))"},
- new string[] {"*", "XmlAtomicValue", "XmlAtomicValue", "((XmlAtomicValue) value)"},
-
- new string[] {"*", "Boolean", "XPathItem", "(new XmlAtomicValue(SchemaType, (bool) value))"},
- new string[] {"*", "String", "XPathItem", "(new XmlAtomicValue(SchemaType, (string) value))"},
- new string[] {"*", "XmlAtomicValue", "XPathItem", "((XmlAtomicValue) value)"},
- });
-
- // xs:base64Binary, xs:hexBinary, xs:NOTATION, xs:QName, xs:anyUri, xs:duration, and derived types
- public static ConversionRuleGroup MiscRuleGroup =
- new ConversionRuleGroup("XmlMiscConverter", new string[][]
- {
- // Xml Type Source Clr Type Destination Clr Type Conversion Logic
- // =====================================================================================================
- new string[] {"xs:base64Binary", "ByteArray", "ByteArray", "((byte[]) value)"},
- new string[] {"xs:hexBinary", "ByteArray", "ByteArray", "((byte[]) value)"},
- new string[] {"xs:base64Binary", "String", "ByteArray", "StringToBase64Binary((string) value)"},
- new string[] {"xs:hexBinary", "String", "ByteArray", "StringToHexBinary((string) value)"},
-
- new string[] {"xs:NOTATION", "String", "XmlQualifiedName", "StringToQName((string) value, nsResolver)"},
- new string[] {"xs:QName", "String", "XmlQualifiedName", "StringToQName((string) value, nsResolver)"},
- new string[] {"xs:NOTATION", "XmlQualifiedName", "XmlQualifiedName", "((XmlQualifiedName) value)"},
- new string[] {"xs:QName", "XmlQualifiedName", "XmlQualifiedName", "((XmlQualifiedName) value)"},
-
- new string[] {"xs:base64Binary", "ByteArray", "String", "Base64BinaryToString((byte[]) value)"},
- new string[] {"xs:hexBinary", "ByteArray", "String", "XmlConvert.ToBinHexString((byte[]) value)"},
- new string[] {"*", "String", "String", "(string) value"},
- new string[] {"xs:anyURI", "Uri", "String", "AnyUriToString((Uri) value)"},
- new string[] {"xs:dayTimeDuration", "TimeSpan", "String", "DayTimeDurationToString((TimeSpan) value)"},
- new string[] {"xs:duration", "TimeSpan", "String", "DurationToString((TimeSpan) value)"},
- new string[] {"xs:yearMonthDuration", "TimeSpan", "String", "YearMonthDurationToString((TimeSpan) value)"},
- new string[] {"xs:NOTATION", "XmlQualifiedName", "String", "QNameToString((XmlQualifiedName) value, nsResolver)"},
- new string[] {"xs:QName", "XmlQualifiedName", "String", "QNameToString((XmlQualifiedName) value, nsResolver)"},
-
- new string[] {"xs:dayTimeDuration", "String", "TimeSpan", "StringToDayTimeDuration((string) value)"},
- new string[] {"xs:duration", "String", "TimeSpan", "StringToDuration((string) value)"},
- new string[] {"xs:yearMonthDuration", "String", "TimeSpan", "StringToYearMonthDuration((string) value)"},
- new string[] {"xs:dayTimeDuration", "TimeSpan", "TimeSpan", "((TimeSpan) value)"},
- new string[] {"xs:duration", "TimeSpan", "TimeSpan", "((TimeSpan) value)"},
- new string[] {"xs:yearMonthDuration", "TimeSpan", "TimeSpan", "((TimeSpan) value)"},
-
- new string[] {"xs:anyURI", "String", "Uri", "XmlConvert.ToUri((string) value)"},
- new string[] {"xs:anyURI", "Uri", "Uri", "((Uri) value)"},
-
- new string[] {"xs:base64Binary", "ByteArray", "XmlAtomicValue", "(new XmlAtomicValue(SchemaType, value))"},
- new string[] {"xs:hexBinary", "ByteArray", "XmlAtomicValue", "(new XmlAtomicValue(SchemaType, value))"},
- new string[] {"*", "String", "XmlAtomicValue", "(new XmlAtomicValue(SchemaType, (string)value, nsResolver))"},
- new string[] {"xs:dayTimeDuration", "TimeSpan", "XmlAtomicValue", "(new XmlAtomicValue(SchemaType, value))"},
- new string[] {"xs:duration", "TimeSpan", "XmlAtomicValue", "(new XmlAtomicValue(SchemaType, value))"},
- new string[] {"xs:yearMonthDuration", "TimeSpan", "XmlAtomicValue", "(new XmlAtomicValue(SchemaType, value))"},
- new string[] {"xs:anyURI", "Uri", "XmlAtomicValue", "(new XmlAtomicValue(SchemaType, value))"},
- new string[] {"*", "XmlAtomicValue", "XmlAtomicValue", "((XmlAtomicValue) value)"},
- new string[] {"xs:NOTATION", "XmlQualifiedName", "XmlAtomicValue", "(new XmlAtomicValue(SchemaType, value, nsResolver))"},
- new string[] {"xs:QName", "XmlQualifiedName", "XmlAtomicValue", "(new XmlAtomicValue(SchemaType, value, nsResolver))"},
-
- new string[] {"*", "XmlAtomicValue", "XPathItem", "((XmlAtomicValue) value)"},
-
- new string[] {"*", "*", "XPathItem", "((XPathItem) this.ChangeType(value, XmlAtomicValueType, nsResolver))"},
-
- new string[] {"*", "XmlAtomicValue", "*", "((XmlAtomicValue) value).ValueAs(destinationType, nsResolver)"},
- });
-
- // xs:string and derived types
- public static ConversionRuleGroup StringRuleGroup =
- new ConversionRuleGroup("XmlStringConverter", new string[][]
- {
- // Xml Type Source Clr Type Destination Clr Type Conversion Logic
- // =====================================================================================================
- new string[] {"*", "String", "String", "((string) value)"},
- new string[] {"*", "XmlAtomicValue", "String", "((XmlAtomicValue) value).Value"},
-
- new string[] {"*", "String", "XmlAtomicValue", "(new XmlAtomicValue(SchemaType, (string) value))"},
- new string[] {"*", "XmlAtomicValue", "XmlAtomicValue", "((XmlAtomicValue) value)"},
-
- new string[] {"*", "String", "XPathItem", "(new XmlAtomicValue(SchemaType, (string) value))"},
- new string[] {"*", "XmlAtomicValue", "XPathItem", "((XmlAtomicValue) value)"},
- });
-
- // xs:untypedAtomic
- public static ConversionRuleGroup UntypedRuleGroup =
- new ConversionRuleGroup("XmlUntypedConverter", new string[][]
- {
- // Xml Type Source Clr Type Destination Clr Type Conversion Logic
- // =====================================================================================================
- new string[] {"*", "String", "Boolean", "XmlConvert.ToBoolean((string) value)"},
- new string[] {"*", "String", "Byte", "Int32ToByte(XmlConvert.ToInt32((string) value))"},
- new string[] {"*", "String", "ByteArray", "StringToBase64Binary((string) value)"},
- new string[] {"*", "String", "DateTime", "UntypedAtomicToDateTime((string) value)"},
- new string[] {"*", "String", "Decimal", "XmlConvert.ToDecimal((string) value)"},
- new string[] {"*", "String", "Double", "XmlConvert.ToDouble((string) value)"},
- new string[] {"*", "String", "Int16", "Int32ToInt16(XmlConvert.ToInt32((string) value))"},
- new string[] {"*", "String", "Int32", "XmlConvert.ToInt32((string) value)"},
- new string[] {"*", "String", "Int64", "XmlConvert.ToInt64((string) value)"},
- new string[] {"*", "String", "SByte", "Int32ToSByte(XmlConvert.ToInt32((string) value))"},
- new string[] {"*", "String", "Single", "XmlConvert.ToSingle((string) value)"},
- new string[] {"*", "String", "TimeSpan", "StringToDuration((string) value)"},
- new string[] {"*", "String", "UInt16", "Int32ToUInt16(XmlConvert.ToInt32((string) value))"},
- new string[] {"*", "String", "UInt32", "Int64ToUInt32(XmlConvert.ToInt64((string) value))"},
- new string[] {"*", "String", "UInt64", "DecimalToUInt64(XmlConvert.ToDecimal((string) value))"},
- new string[] {"*", "String", "Uri", "XmlConvert.ToUri((string) value)"},
- new string[] {"*", "String", "XmlAtomicValue", "(new XmlAtomicValue(SchemaType, (string) value))"},
- new string[] {"*", "String", "XmlQualifiedName", "StringToQName((string) value, nsResolver)"},
- new string[] {"*", "String", "XPathItem", "(new XmlAtomicValue(SchemaType, (string) value))"},
-
- new string[] {"*", "Boolean", "String", "XmlConvert.ToString((bool) value)"},
- new string[] {"*", "Byte", "String", "XmlConvert.ToString((byte) value)"},
- new string[] {"*", "ByteArray", "String", "Base64BinaryToString((byte[]) value)"},
- new string[] {"*", "DateTime", "String", "DateTimeToString((DateTime) value)"},
- new string[] {"*", "Decimal", "String", "XmlConvert.ToString((decimal) value)"},
- new string[] {"*", "Double", "String", "XmlConvert.ToString((double) value)"},
- new string[] {"*", "Int16", "String", "XmlConvert.ToString((short) value)"},
- new string[] {"*", "Int32", "String", "XmlConvert.ToString((int) value)"},
- new string[] {"*", "Int64", "String", "XmlConvert.ToString((long) value)"},
- new string[] {"*", "SByte", "String", "XmlConvert.ToString((sbyte) value)"},
- new string[] {"*", "Single", "String", "XmlConvert.ToString((float) value)"},
- new string[] {"*", "String", "String", "((string) value)"},
- new string[] {"*", "TimeSpan", "String", "DurationToString((TimeSpan) value)"},
- new string[] {"*", "UInt16", "String", "XmlConvert.ToString((ushort) value)"},
- new string[] {"*", "UInt32", "String", "XmlConvert.ToString((uint) value)"},
- new string[] {"*", "UInt64", "String", "XmlConvert.ToString((ulong) value)"},
- new string[] {"*", "Uri", "String", "AnyUriToString((Uri) value)"},
- new string[] {"*", "XmlAtomicValue", "String", "((string) ((XmlAtomicValue) value).ValueAs(StringType, nsResolver))"},
- new string[] {"*", "XmlQualifiedName", "String", "QNameToString((XmlQualifiedName) value, nsResolver)"},
-
- new string[] {"*", "XmlAtomicValue", "XmlAtomicValue", "((XmlAtomicValue) value)"},
- new string[] {"*", "XmlAtomicValue", "XPathItem", "((XmlAtomicValue) value)"},
-
- new string[] {"*", "*", "XmlAtomicValue", "(new XmlAtomicValue(SchemaType, this.ToString(value, nsResolver)))"},
- new string[] {"*", "*", "XPathItem", "(new XmlAtomicValue(SchemaType, this.ToString(value, nsResolver)))"},
- new string[] {"*", "XmlAtomicValue", "*", "((XmlAtomicValue) value).ValueAs(destinationType, nsResolver)"},
- });
-
- // node
- public static ConversionRuleGroup NodeRuleGroup =
- new ConversionRuleGroup("XmlNodeConverter", new string[][]
- {
- // Xml Type Source Clr Type Destination Clr Type Conversion Logic
- // =====================================================================================================
- new string[] {"*", "XPathNavigator", "XPathNavigator", "((XPathNavigator) value)"},
-
- new string[] {"*", "XPathNavigator", "XPathItem", "((XPathItem) value)"},
- });
-
- // item, xs:anyAtomicType
- public static ConversionRuleGroup AnyRuleGroup =
- new ConversionRuleGroup("XmlAnyConverter", new string[][]
- {
- // Xml Type Source Clr Type Destination Clr Type Conversion Logic
- // =====================================================================================================
- new string[] {"*", "XmlAtomicValue", "Boolean", "((XmlAtomicValue) value).ValueAsBoolean"},
- new string[] {"*", "XmlAtomicValue", "DateTime", "((XmlAtomicValue) value).ValueAsDateTime"},
- new string[] {"*", "XmlAtomicValue", "Decimal", "((decimal) ((XmlAtomicValue) value).ValueAs(DecimalType))"},
- new string[] {"*", "XmlAtomicValue", "Double", "((XmlAtomicValue) value).ValueAsDouble"},
- new string[] {"*", "XmlAtomicValue", "Int32", "((XmlAtomicValue) value).ValueAsInt"},
- new string[] {"*", "XmlAtomicValue", "Int64", "((XmlAtomicValue) value).ValueAsLong"},
- new string[] {"*", "XmlAtomicValue", "Single", "((float) ((XmlAtomicValue) value).ValueAs(SingleType))"},
- new string[] {"*", "XmlAtomicValue", "XmlAtomicValue", "((XmlAtomicValue) value)"},
-
- new string[] {"*", "Boolean", "XmlAtomicValue", "(new XmlAtomicValue(XmlSchemaType.GetBuiltInSimpleType(XmlTypeCode.Boolean), (bool) value))"},
- new string[] {"*", "Byte", "XmlAtomicValue", "(new XmlAtomicValue(XmlSchemaType.GetBuiltInSimpleType(XmlTypeCode.UnsignedByte), value))"},
- new string[] {"*", "ByteArray", "XmlAtomicValue", "(new XmlAtomicValue(XmlSchemaType.GetBuiltInSimpleType(XmlTypeCode.Base64Binary), value))"},
- new string[] {"*", "DateTime", "XmlAtomicValue", "(new XmlAtomicValue(XmlSchemaType.GetBuiltInSimpleType(XmlTypeCode.DateTime), (DateTime) value))"},
- new string[] {"*", "Decimal", "XmlAtomicValue", "(new XmlAtomicValue(XmlSchemaType.GetBuiltInSimpleType(XmlTypeCode.Decimal), value))"},
- new string[] {"*", "Double", "XmlAtomicValue", "(new XmlAtomicValue(XmlSchemaType.GetBuiltInSimpleType(XmlTypeCode.Double), (double) value))"},
- new string[] {"*", "Int16", "XmlAtomicValue", "(new XmlAtomicValue(XmlSchemaType.GetBuiltInSimpleType(XmlTypeCode.Short), value))"},
- new string[] {"*", "Int32", "XmlAtomicValue", "(new XmlAtomicValue(XmlSchemaType.GetBuiltInSimpleType(XmlTypeCode.Int), (int) value))"},
- new string[] {"*", "Int64", "XmlAtomicValue", "(new XmlAtomicValue(XmlSchemaType.GetBuiltInSimpleType(XmlTypeCode.Long), (long) value))"},
- new string[] {"*", "SByte", "XmlAtomicValue", "(new XmlAtomicValue(XmlSchemaType.GetBuiltInSimpleType(XmlTypeCode.Byte), value))"},
- new string[] {"*", "Single", "XmlAtomicValue", "(new XmlAtomicValue(XmlSchemaType.GetBuiltInSimpleType(XmlTypeCode.Float), value))"},
- new string[] {"*", "String", "XmlAtomicValue", "(new XmlAtomicValue(XmlSchemaType.GetBuiltInSimpleType(XmlTypeCode.String), (string) value))"},
- new string[] {"*", "TimeSpan", "XmlAtomicValue", "(new XmlAtomicValue(XmlSchemaType.GetBuiltInSimpleType(XmlTypeCode.Duration), value))"},
- new string[] {"*", "UInt16", "XmlAtomicValue", "(new XmlAtomicValue(XmlSchemaType.GetBuiltInSimpleType(XmlTypeCode.UnsignedShort), value))"},
- new string[] {"*", "UInt32", "XmlAtomicValue", "(new XmlAtomicValue(XmlSchemaType.GetBuiltInSimpleType(XmlTypeCode.UnsignedInt), value))"},
- new string[] {"*", "UInt64", "XmlAtomicValue", "(new XmlAtomicValue(XmlSchemaType.GetBuiltInSimpleType(XmlTypeCode.UnsignedLong), value))"},
- new string[] {"*", "Uri", "XmlAtomicValue", "(new XmlAtomicValue(XmlSchemaType.GetBuiltInSimpleType(XmlTypeCode.AnyUri), value))"},
- new string[] {"*", "XmlQualifiedName", "XmlAtomicValue", "(new XmlAtomicValue(XmlSchemaType.GetBuiltInSimpleType(XmlTypeCode.QName), value, nsResolver))"},
-
- new string[] {"*", "XmlAtomicValue", "XPathItem", "((XmlAtomicValue) value)"},
- new string[] {"*", "XPathNavigator", "XPathItem", "((XPathNavigator) value)"},
-
- new string[] {"*", "XPathNavigator", "XPathNavigator", "ToNavigator((XPathNavigator) value)"},
-
- new string[] {"*", "XmlAtomicValue", "*", "((XmlAtomicValue) value).ValueAs(destinationType, nsResolver)"},
- new string[] {"*", "*", "XPathItem", "((XPathItem) this.ChangeType(value, XmlAtomicValueType, nsResolver))"},
- });
-
- public static ConversionRuleGroup[] ConversionsRules = {
- Numeric10RuleGroup,
- Numeric2RuleGroup,
- DateTimeRuleGroup,
- BooleanRuleGroup,
- MiscRuleGroup,
- StringRuleGroup,
- UntypedRuleGroup,
- NodeRuleGroup,
- AnyRuleGroup,
- };
-
- public static void Main() {
- (new Generator()).Generate();
- }
-
- public void Generate() {
- AutoGenWriter autoGenWriter;
-
- //-----------------------------------------------
- // XmlBaseConverter
- //-----------------------------------------------
-
- // Output list of all CLR types used by the generated code
- autoGenWriter = new AutoGenWriter("XmlValueConverter.cs", "AUTOGENERATED_XMLBASECONVERTER");
- this.w = autoGenWriter.OpenIndented();
-
- List<Type> uniqueTypes = new List<Type>();
- foreach (ConversionRuleGroup group in ConversionsRules) {
- foreach (Type tSrc in group.FindUniqueSourceTypes(null))
- if (!uniqueTypes.Contains(tSrc)) uniqueTypes.Add(tSrc);
-
- foreach (Type tDst in group.FindUniqueDestinationTypes(null))
- if (!uniqueTypes.Contains(tDst)) uniqueTypes.Add(tDst);
- }
-
- foreach (Type t in uniqueTypes)
- this.w.WriteLine("protected static readonly Type " + ClrTypeName(t) + "Type = typeof(" + ClrTypeToCSharpName(t) + ");");
-
- this.w.WriteLine();
-
- // Output default methods which call ChangeType
- foreach (Type tDst in InterfaceTypes) {
- foreach (Type tSrc in InterfaceTypes) {
- if (tDst == typeof(object) && tSrc == typeof(object))
- continue;
-
- StartMethodSignature(tSrc, tDst);
- this.w.Write("return (" + ClrTypeToCSharpName(tDst) + ") ChangeType((object) value, ");
-
- if (tDst == typeof(object))
- this.w.Write("destinationType");
- else
- this.w.Write(ClrTypeName(tDst) + "Type");
-
- this.w.WriteLine(", " + (MethodHasResolver(tSrc, tDst) ? "nsResolver" : "null") + "); }");
- }
-
- if (tDst == typeof(string)) {
- this.w.WriteLine("public override string ToString(string value) {return this.ToString(value, null); }");
- this.w.WriteLine("public override string ToString(object value) {return this.ToString(value, null); }");
- }
-
- if (tDst == typeof(object)) {
- this.w.WriteLine("public override object ChangeType(string value, Type destinationType) {return this.ChangeType(value, destinationType, null); }");
- this.w.WriteLine("public override object ChangeType(object value, Type destinationType) {return this.ChangeType(value, destinationType, null); }");
- }
-
- this.w.WriteLine();
- }
-
- autoGenWriter.Close();
-
-
- //-----------------------------------------------
- // Other Converters
- //-----------------------------------------------
-
- foreach (ConversionRuleGroup group in ConversionsRules) {
- IList<Type> uniqueSourceTypes, uniqueDestTypes;
-
- autoGenWriter = new AutoGenWriter("XmlValueConverter.cs", "AUTOGENERATED_" + group.Name.ToUpper());
- this.w = autoGenWriter.OpenIndented();
-
- foreach (Type tDst in InterfaceTypes) {
- // Handle ChangeType methods later
- if (tDst == typeof(object))
- continue;
-
- this.w.WriteLine();
- this.w.WriteLine("//-----------------------------------------------");
- this.w.WriteLine("// To" + ClrTypeName(tDst));
- this.w.WriteLine("//-----------------------------------------------");
- this.w.WriteLine();
-
- // Create strongly-typed ToXXX methods
- foreach (Type tSrc in InterfaceTypes) {
- // Handle ToXXX(object value) method later
- if (tSrc == typeof(object))
- continue;
-
- IList<ConversionRule> rules = group.Find(XmlTypeCode.None, tSrc, tDst);
- if (rules.Count > 0) {
- ConversionRule defaultRule = FindDefaultRule(rules);
- if (defaultRule == null)
- throw new Exception("If conversion from " + tSrc.Name + " to " + tDst.Name + " exists, a default conversion should also be defined.");
-
- // ToXXX(T value)
- StartMethod(tSrc, tDst);
- GenerateConversions(defaultRule, rules);
- EndMethod();
- }
- }
-
- // Gather all unique source types which have destination type "tDst"
- uniqueSourceTypes = group.FindUniqueSourceTypes(tDst);
- if (uniqueSourceTypes.Count > 0) {
- // ToXXX(object value);
- StartMethod(typeof(object), tDst);
-
- this.w.WriteLine("Type sourceType = value.GetType();");
- this.w.WriteLine();
-
- foreach (Type tSrc in uniqueSourceTypes)
- GenerateConversionsTo(group.Find(XmlTypeCode.None, tSrc, tDst));
-
- // If wildcard destination conversions exist, then delegate to ChangeTypeWildcardDestination method to handle them
- this.w.WriteLine();
- this.w.Write("return (" + ClrTypeToCSharpName(tDst) + ") ");
- this.w.Write(group.FindUniqueSourceTypes(typeof(object)).Count > 0 ? "ChangeTypeWildcardDestination" : "ChangeListType");
- this.w.WriteLine("(value, " + ClrTypeName(tDst) + "Type, " + (MethodHasResolver(typeof(object), tDst) ? "nsResolver);" : "null);"));
-
- EndMethod();
- }
- else {
- this.w.WriteLine("// This converter does not support conversions to " + ClrTypeName(tDst) + ".");
- }
-
- this.w.WriteLine();
- }
-
- this.w.WriteLine();
- this.w.WriteLine("//-----------------------------------------------");
- this.w.WriteLine("// ChangeType");
- this.w.WriteLine("//-----------------------------------------------");
- this.w.WriteLine();
-
- foreach (Type tSrc in InterfaceTypes) {
- // Handle ChangeType(object) later
- if (tSrc == typeof(object))
- continue;
-
- // Gather all unique destination types which have source type "tSrc"
- uniqueDestTypes = group.FindUniqueDestinationTypes(tSrc);
- if (uniqueDestTypes.Count > 0) {
- // ChangeType(T value, Type destinationType);
- StartMethod(tSrc, typeof(object));
-
- this.w.WriteLine("if (destinationType == ObjectType) destinationType = DefaultClrType;");
-
- foreach (Type tDst in uniqueDestTypes)
- GenerateConversionsFrom(group.Find(XmlTypeCode.None, tSrc, tDst));
-
- // If wildcard source conversions exist, then delegate to ChangeTypeWildcardSource method to handle them
- this.w.WriteLine();
- if (group.FindUniqueDestinationTypes(typeof(object)).Count > 0)
- this.w.Write("return ChangeTypeWildcardSource(value, destinationType, ");
- else
- this.w.Write("return ChangeListType(value, destinationType, ");
-
- this.w.WriteLine(MethodHasResolver(typeof(object), tSrc) ? "nsResolver);" : "null);");
-
- EndMethod();
-
- this.w.WriteLine();
- }
- }
-
- // object ChangeType(object value, Type destinationType, IXmlNamespaceResolver resolver);
- StartMethod(typeof(object), typeof(object));
-
- this.w.WriteLine("Type sourceType = value.GetType();");
- this.w.WriteLine();
-
- // Generate conversions to destinationType
- this.w.WriteLine("if (destinationType == ObjectType) destinationType = DefaultClrType;");
-
- // Strongly-typed destinations
- foreach (Type tDst in group.FindUniqueDestinationTypes(null)) {
- // Only output conversions if the destination is not a wildcard
- if (tDst == typeof(object))
- continue;
-
- // Get source types that can be converted to the destination type
- uniqueSourceTypes = group.FindUniqueSourceTypes(tDst);
-
- // Remove wildcard source rules, as they are handled later
- int i = 0;
- while (i < uniqueSourceTypes.Count) {
- if (uniqueSourceTypes[i] == typeof(object))
- uniqueSourceTypes.RemoveAt(i);
- else
- i++;
- }
-
- if (uniqueSourceTypes.Count != 0) {
- if (IsInterfaceMethod(tDst) && uniqueSourceTypes.Count > 1) {
- this.w.Write("if (destinationType == " + ClrTypeName(tDst) + "Type) ");
- this.w.WriteLine("return this.To" + ClrTypeName(tDst) + "(value" + (MethodHasResolver(tDst, tDst) ? ", nsResolver);" : ");"));
- }
- else {
- this.w.WriteLine("if (destinationType == " + ClrTypeName(tDst) + "Type) {");
- this.w.Indent++;
-
- foreach (Type tSrc in uniqueSourceTypes) {
- GenerateConversionsTo(group.Find(XmlTypeCode.None, tSrc, tDst));
- }
-
- this.w.Indent--;
- this.w.WriteLine("}");
- }
- }
- }
-
- // Generate conversions from wildcard source types
- foreach (Type tDst in group.FindUniqueDestinationTypes(typeof(object)))
- GenerateConversionsFrom(group.Find(XmlTypeCode.None, typeof(object), tDst));
-
- // Generate conversions to wildcard destination types
- foreach (Type tSrc in group.FindUniqueSourceTypes(typeof(object)))
- GenerateConversionsTo(group.Find(XmlTypeCode.None, tSrc, typeof(object)));
-
- this.w.WriteLine();
- this.w.WriteLine("return ChangeListType(value, destinationType, nsResolver);");
-
- EndMethod();
-
- uniqueSourceTypes = group.FindUniqueSourceTypes(typeof(object));
- uniqueDestTypes = group.FindUniqueDestinationTypes(typeof(object));
-
- if (uniqueSourceTypes.Count != 0 || uniqueDestTypes.Count != 0) {
- this.w.WriteLine();
- this.w.WriteLine();
- this.w.WriteLine("//-----------------------------------------------");
- this.w.WriteLine("// Helpers");
- this.w.WriteLine("//-----------------------------------------------");
- this.w.WriteLine();
-
- // Generate ChangeTypeWildcardDestination method, which performs conversions that are the same no matter what the destination type is
- if (uniqueSourceTypes.Count != 0) {
- this.w.WriteLine("private object ChangeTypeWildcardDestination(object value, Type destinationType, IXmlNamespaceResolver nsResolver) {");
- this.w.Indent++;
-
- this.w.WriteLine("Type sourceType = value.GetType();");
- this.w.WriteLine();
-
- foreach (Type tSrc in uniqueSourceTypes)
- GenerateConversionsTo(group.Find(XmlTypeCode.None, tSrc, typeof(object)));
-
- this.w.WriteLine();
- this.w.WriteLine("return ChangeListType(value, destinationType, nsResolver);");
-
- this.w.Indent--;
- this.w.WriteLine("}");
- }
-
- // Generate ChangeTypeWildcardSource method, which performs conversions that are the same no matter what the source type is
- if (uniqueDestTypes.Count != 0) {
- this.w.WriteLine("private object ChangeTypeWildcardSource(object value, Type destinationType, IXmlNamespaceResolver nsResolver) {");
- this.w.Indent++;
-
- foreach (Type tDst in uniqueDestTypes)
- GenerateConversionsFrom(group.Find(XmlTypeCode.None, typeof(object), tDst));
-
- this.w.WriteLine();
- this.w.WriteLine("return ChangeListType(value, destinationType, nsResolver);");
-
- this.w.Indent--;
- this.w.WriteLine("}");
- }
- }
-
- autoGenWriter.Close();
- }
- }
-
- private void StartMethod(Type typeSrc, Type typeDst) {
- StartMethodSignature(typeSrc, typeDst);
-
- this.w.WriteLine();
- this.w.Indent++;
-
- if (!typeSrc.IsValueType) {
- this.w.WriteLine("if (value == null) throw new ArgumentNullException(\"value\");");
-
- if (typeDst != typeof(object))
- this.w.WriteLine();
- }
-
- if (typeDst == typeof(object)) {
- this.w.WriteLine("if (destinationType == null) throw new ArgumentNullException(\"destinationType\");");
- this.w.WriteLine();
- }
- }
-
- private void StartMethodSignature(Type typeSrc, Type typeDst) {
- string methName, methSig;
-
- methSig = ClrTypeToCSharpName(typeSrc) + " value";
-
- if (typeDst == typeof(object)) {
- methName = "ChangeType";
- methSig += ", Type destinationType";
- }
- else {
- methName = "To" + ClrTypeName(typeDst);
- }
-
- if (MethodHasResolver(typeSrc, typeDst))
- methSig += ", IXmlNamespaceResolver nsResolver";
-
- this.w.Write("public override " + ClrTypeToCSharpName(typeDst) + " " + methName + "(" + methSig + ") {");
- }
-
- private void EndMethod() {
- this.w.Indent--;
- this.w.WriteLine("}");
- }
-
- private bool MethodHasResolver(Type typeSrc, Type typeDst) {
- if (typeSrc == typeof(object) || typeSrc == typeof(string)) {
- if (typeDst == typeof(object) || typeDst == typeof(string))
- return true;
- }
- return false;
- }
-
- private ConversionRule FindDefaultRule(IList<ConversionRule> rules) {
- foreach (ConversionRule rule in rules) {
- if (rule.XmlType == XmlTypeCode.Item)
- return rule;
- }
- return null;
- }
-
- private void GenerateConversions(ConversionRule defaultRule, IList<ConversionRule> rulesSwitch) {
- int cnt = rulesSwitch.Count;
-
- // Don't need to test TypeCode for default rule
- if (defaultRule != null)
- cnt--;
-
- if (cnt > 0) {
- if (cnt > 1) {
- this.w.WriteLine("switch (TypeCode) {");
- }
-
- foreach (ConversionRule ruleSwitch in rulesSwitch) {
- if (ruleSwitch != defaultRule) {
- if (cnt > 1) {
- this.w.Indent++;
- this.w.WriteLine("case XmlTypeCode." + ruleSwitch.XmlType + ": return " + ruleSwitch.ConversionExpression + ";");
- this.w.Indent--;
- }
- else {
- this.w.WriteLine("if (TypeCode == XmlTypeCode." + ruleSwitch.XmlType + ") return " + ruleSwitch.ConversionExpression + ";");
- }
- }
- }
-
- if (cnt > 1) {
- this.w.WriteLine("}");
- }
- }
-
- if (defaultRule != null)
- this.w.WriteLine("return " + defaultRule.ConversionExpression + ";");
- }
-
- private void GenerateConversionsTo(IList<ConversionRule> rules) {
- GenerateConversionsToFrom(rules, false);
- }
-
- private void GenerateConversionsFrom(IList<ConversionRule> rules) {
- GenerateConversionsToFrom(rules, true);
- }
-
- private void GenerateConversionsToFrom(IList<ConversionRule> rules, bool isFrom) {
- ConversionRule defaultRule = FindDefaultRule(rules);
- Type tSrc, tDst;
-
- // If no conversions exist, then don't generate anything
- if (rules.Count == 0)
- return;
-
- tSrc = rules[0].SourceType;
- tDst = rules[0].DestinationType;
-
- if (isFrom)
- this.w.Write("if (destinationType == " + ClrTypeName(tDst) + "Type) ");
- else
- this.w.Write("if (" + GenerateSourceTypeMatch(tSrc) + ") ");
-
- if (rules.Count > 1 && IsInterfaceMethod(tSrc) && IsInterfaceMethod(tDst)) {
- // There exists an interface method already which performs switch, so call it
- this.w.Write("return this.To" + ClrTypeName(tDst) + "((" + ClrTypeToCSharpName(tSrc) + ") value");
- this.w.WriteLine(MethodHasResolver(tSrc, tDst) ? ", nsResolver);" : ");");
- }
- else {
- // Inline the conversion
- if (rules.Count == 1) {
- GenerateConversions(defaultRule, rules);
- }
- else {
- this.w.WriteLine("{");
- this.w.Indent++;
-
- GenerateConversions(defaultRule, rules);
-
- this.w.Indent--;
- this.w.WriteLine("}");
- }
- }
- }
-
- private string GenerateSourceTypeMatch(Type type) {
- if (type.IsValueType || type.IsSealed)
- return "sourceType == " + ClrTypeName(type) + "Type";
-
- if (type.IsInterface)
- return ClrTypeName(type) + "Type.IsAssignableFrom(sourceType)";
-
- return "IsDerivedFrom(sourceType, " + ClrTypeName(type) + "Type)";
- }
-
- private static string ClrTypeName(Type type) {
- if (type.IsArray)
- return type.GetElementType().Name + "Array";
-
- return type.Name;
- }
-
- private static string ClrTypeToCSharpName(Type type) {
- if (type == typeof(String)) return "string";
- if (type == typeof(SByte)) return "sbyte";
- if (type == typeof(Int16)) return "short";
- if (type == typeof(Int32)) return "int";
- if (type == typeof(Int64)) return "long";
- if (type == typeof(Byte)) return "byte";
- if (type == typeof(UInt16)) return "ushort";
- if (type == typeof(UInt32)) return "uint";
- if (type == typeof(UInt64)) return "ulong";
- if (type == typeof(Double)) return "double";
- if (type == typeof(Single)) return "float";
- if (type == typeof(Decimal)) return "decimal";
- if (type == typeof(Object)) return "object";
- if (type == typeof(Boolean)) return "bool";
-
- return type.Name;
- }
-
- private static bool IsInterfaceMethod(Type type) {
- return ((IList) InterfaceTypes).Contains(type);
- }
- }
-
- public class ConversionRuleGroup {
- private string groupName;
- private List<ConversionRule> rules;
-
- public ConversionRuleGroup(string groupName, string[][] rules) {
- this.groupName = groupName;
- this.rules = new List<ConversionRule>();
-
- foreach (string[] rule in rules) {
- XmlTypeCode xmlType = XmlTypeNameToTypeCode(rule[0]);
- Type clrTypeSrc = ClrTypeNameToType(rule[1]);
- Type clrTypeDst = ClrTypeNameToType(rule[2]);
- string convExpr = rule[3];
-
- AddRule(new ConversionRule(xmlType, clrTypeSrc, clrTypeDst, convExpr));
- }
- }
-
- public string Name {
- get { return this.groupName; }
- }
-
- public IList<Type> FindUniqueSourceTypes(Type tDst) {
- List<Type> types = new List<Type>();
-
- foreach (ConversionRule rule in Find(XmlTypeCode.None, null, tDst)) {
- if (!types.Contains(rule.SourceType))
- types.Add(rule.SourceType);
- }
-
- return types;
- }
-
- public IList<Type> FindUniqueDestinationTypes(Type tSrc) {
- List<Type> types = new List<Type>();
-
- foreach (ConversionRule rule in Find(XmlTypeCode.None, tSrc, null)) {
- if (!types.Contains(rule.DestinationType))
- types.Add(rule.DestinationType);
- }
-
- return types;
- }
-
- public IList<ConversionRule> Find(XmlTypeCode code, Type tSrc, Type tDst) {
- List<ConversionRule> subset = new List<ConversionRule>();
-
- foreach (ConversionRule rule in this.rules) {
- if (code == XmlTypeCode.None || code == rule.XmlType) {
- if (tSrc == null || tSrc == rule.SourceType) {
- if (tDst == null || tDst == rule.DestinationType) {
- subset.Add(rule);
- }
- }
- }
- }
-
- return subset;
- }
-
- private void AddRule(ConversionRule ruleAdd) {
- for (int i = 0; i < this.rules.Count; i++) {
- ConversionRule rule = this.rules[i];
-
- if (rule.XmlType == ruleAdd.XmlType) {
- if (rule.SourceType == ruleAdd.SourceType) {
- if (rule.DestinationType == ruleAdd.DestinationType) {
- // Override previous rule with new rule
- this.rules[i] = ruleAdd;
- return;
- }
- }
- }
- }
-
- this.rules.Add(ruleAdd);
- }
-
- private static XmlTypeCode XmlTypeNameToTypeCode(string name) {
- int idx;
-
- if (name == "*")
- return XmlTypeCode.Item;
-
- idx = name.IndexOf(':');
- if (idx != -1)
- name = name.Substring(idx + 1);
-
- return (XmlTypeCode) Enum.Parse(typeof(XmlTypeCode), name, true);
- }
-
- private static Type ClrTypeNameToType(string name) {
- Type type = Type.GetType("System." + name);
- if (type != null) return type;
-
- type = Type.GetType("System.IO." + name);
- if (type != null) return type;
-
- if (name == "*") return typeof(object);
- if (name == "ByteArray") return typeof(byte[]);
- if (name == "XmlQualifiedName") return typeof(XmlQualifiedName);
- if (name == "XmlAtomicValue") return typeof(XmlAtomicValue);
- if (name == "XPathNavigator") return typeof(XPathNavigator);
- if (name == "XPathItem") return typeof(XPathItem);
- if (name == "Uri") return typeof(Uri);
- if (name == "IEnumerable") return typeof(IEnumerable);
-
- throw new Exception("Unknown type " + name);
- }
- }
-
- public class ConversionRule {
- private XmlTypeCode xmlType;
- private Type clrTypeSrc, clrTypeDst;
- private string convExpr;
-
- public ConversionRule(XmlTypeCode xmlType, Type clrTypeSrc, Type clrTypeDst, string convExpr) {
- this.xmlType = xmlType;
- this.clrTypeSrc = clrTypeSrc;
- this.clrTypeDst = clrTypeDst;
- this.convExpr = convExpr;
- }
-
- public XmlTypeCode XmlType {
- get { return this.xmlType; }
- }
-
- public Type SourceType {
- get { return this.clrTypeSrc; }
- }
-
- public Type DestinationType {
- get { return this.clrTypeDst; }
- }
-
- public string ConversionExpression {
- get { return this.convExpr; }
- }
- }
-
- public class AutoGenWriter {
- private static char[] Whitespace = { ' ' };
- private FileStream fs;
- private StreamReader r;
- private StringWriter sw;
- private string regionName;
- private int indent;
-
- public AutoGenWriter(string fileName, string regionName) : this(File.Open(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite), regionName) {
- }
-
- public AutoGenWriter(FileStream fs, string regionName) {
- if (!fs.CanSeek || !fs.CanRead || !fs.CanWrite)
- throw new Exception("Internal error: Unable to seek/read/write this filestream");
- this.fs = fs;
- this.r = new StreamReader(fs);
- this.sw = new StringWriter();
- this.regionName = regionName;
- }
-
- public int Indent { get { return this.indent; } }
-
- public TextWriter Open() {
- // Seek to the autogenerated region within the file
- for (string s = this.r.ReadLine(); s != null; s = this.r.ReadLine()) {
- this.sw.WriteLine(s);
- if (s.Trim(Whitespace).StartsWith("#region " + this.regionName)) {
- if (s[0] != '#')
- this.indent = s.IndexOf('#') / 4;
- break;
- }
- }
- return this.sw;
- }
-
- internal IndentedTextWriter OpenIndented() {
- TextWriter w = Open();
- IndentedTextWriter iw = new IndentedTextWriter(w);
- iw.Indent = this.indent;
- for (int i = 0; i < this.indent; i++)
- w.Write(" ");
- return iw;
- }
-
- internal void Close() {
- // End the autogenerated region
- for (string s = this.r.ReadLine(); s != null; s = this.r.ReadLine()) {
- string ss = s.Trim(Whitespace);
- if (ss.StartsWith("#endregion")) {
- this.sw.WriteLine(s);
- break;
- }
- }
-
- for (string s = r.ReadLine(); s != null; s = this.r.ReadLine()) {
- this.sw.WriteLine(s);
- }
-
- this.fs.SetLength(0);
- this.fs.Seek(0, SeekOrigin.Begin);
- StreamWriter w = new StreamWriter(fs);
- w.Write(this.sw.ToString());
- w.Close();
- this.sw.Close();
- }
- }
-}
diff --git a/src/System.Private.Xml/src/System/Xml/Serialization/Compilation.cs b/src/System.Private.Xml/src/System/Xml/Serialization/Compilation.cs
index d91acb29b9..d310e84be9 100644
--- a/src/System.Private.Xml/src/System/Xml/Serialization/Compilation.cs
+++ b/src/System.Private.Xml/src/System/Xml/Serialization/Compilation.cs
@@ -24,8 +24,9 @@ namespace System.Xml.Serialization
using System.Runtime.Versioning;
using System.Diagnostics.CodeAnalysis;
using System.Collections.Generic;
- using System.Xml.Extensions;
+ using System.Xml.Extensions;
using System.Linq;
+ using System.Xml.Serialization;
internal class TempAssembly
{
@@ -238,6 +239,197 @@ namespace System.Xml.Serialization
return null;
}
+#if XMLSERIALIZERGENERATOR
+ internal static class ThisAssembly
+ {
+ internal const string Version = "1.0.0.0";
+ internal const string InformationalVersion = "1.0.0.0";
+ }
+
+ private static string GenerateAssemblyId(Type type)
+ {
+ Module[] modules = type.Assembly.GetModules();
+ var list = new ArrayList();
+ for (int i = 0; i < modules.Length; i++)
+ {
+ list.Add(modules[i].ModuleVersionId.ToString());
+ }
+
+ list.Sort();
+ var sb = new StringBuilder();
+
+ for (int i = 0; i < list.Count; i++)
+ {
+ sb.Append(list[i].ToString());
+ sb.Append(",");
+ }
+
+ return sb.ToString();
+ }
+
+ internal static bool GenerateSerializerFile(XmlMapping[] xmlMappings, Type[] types, string defaultNamespace, Assembly assembly, Hashtable assemblies, string codePath)
+ {
+ var compiler = new Compiler();
+ try
+ {
+ var scopeTable = new Hashtable();
+ foreach (XmlMapping mapping in xmlMappings)
+ scopeTable[mapping.Scope] = mapping;
+
+ var scopes = new TypeScope[scopeTable.Keys.Count];
+ scopeTable.Keys.CopyTo(scopes, 0);
+ assemblies.Clear();
+ var importedTypes = new Hashtable();
+
+ foreach (TypeScope scope in scopes)
+ {
+ foreach (Type t in scope.Types)
+ {
+ compiler.AddImport(t, importedTypes);
+ Assembly a = t.Assembly;
+ string name = a.FullName;
+ if (assemblies[name] != null)
+ {
+ continue;
+ }
+
+ if (!a.GlobalAssemblyCache)
+ {
+ assemblies[name] = a;
+ }
+ }
+ }
+
+ for (int i = 0; i < types.Length; i++)
+ {
+ compiler.AddImport(types[i], importedTypes);
+ }
+
+ compiler.AddImport(typeof(object).Assembly);
+ compiler.AddImport(typeof(System.Xml.Serialization.XmlSerializer).Assembly);
+ var writer = new IndentedWriter(compiler.Source, false);
+ writer.WriteLine("[assembly:System.Security.AllowPartiallyTrustedCallers()]");
+ writer.WriteLine("[assembly:System.Security.SecurityTransparent()]");
+ writer.WriteLine("[assembly:System.Security.SecurityRules(System.Security.SecurityRuleSet.Level1)]");
+
+ if (assembly != null && types.Length > 0)
+ {
+ for (int i = 0; i < types.Length; i++)
+ {
+ Type type = types[i];
+ if (type == null)
+ {
+ continue;
+ }
+
+ if (DynamicAssemblies.IsTypeDynamic(type))
+ {
+ throw new InvalidOperationException(SR.Format(SR.XmlPregenTypeDynamic, types[i].FullName));
+ }
+ }
+
+ writer.Write("[assembly:");
+ writer.Write(typeof(XmlSerializerVersionAttribute).FullName);
+ writer.Write("(");
+ writer.Write("ParentAssemblyId=");
+ ReflectionAwareCodeGen.WriteQuotedCSharpString(writer, GenerateAssemblyId(types[0]));
+ writer.Write(", Version=");
+ ReflectionAwareCodeGen.WriteQuotedCSharpString(writer, ThisAssembly.Version);
+ if (defaultNamespace != null)
+ {
+ writer.Write(", Namespace=");
+ ReflectionAwareCodeGen.WriteQuotedCSharpString(writer, defaultNamespace);
+ }
+
+ writer.WriteLine(")]");
+ }
+
+ var classes = new CodeIdentifiers();
+ classes.AddUnique("XmlSerializationWriter", "XmlSerializationWriter");
+ classes.AddUnique("XmlSerializationReader", "XmlSerializationReader");
+ string suffix = null;
+
+ if (types != null && types.Length == 1 && types[0] != null)
+ {
+ suffix = CodeIdentifier.MakeValid(types[0].Name);
+ if (types[0].IsArray)
+ {
+ suffix += "Array";
+ }
+ }
+
+ writer.WriteLine("namespace " + GeneratedAssemblyNamespace + " {");
+ writer.Indent++;
+ writer.WriteLine();
+
+ string writerClass = "XmlSerializationWriter" + suffix;
+ writerClass = classes.AddUnique(writerClass, writerClass);
+ var writerCodeGen = new XmlSerializationWriterCodeGen(writer, scopes, "public", writerClass);
+ writerCodeGen.GenerateBegin();
+ string[] writeMethodNames = new string[xmlMappings.Length];
+
+ for (int i = 0; i < xmlMappings.Length; i++)
+ {
+ writeMethodNames[i] = writerCodeGen.GenerateElement(xmlMappings[i]);
+ }
+
+ writerCodeGen.GenerateEnd();
+ writer.WriteLine();
+
+ string readerClass = "XmlSerializationReader" + suffix;
+ readerClass = classes.AddUnique(readerClass, readerClass);
+ var readerCodeGen = new XmlSerializationReaderCodeGen(writer, scopes, "public", readerClass);
+ readerCodeGen.GenerateBegin();
+ string[] readMethodNames = new string[xmlMappings.Length];
+ for (int i = 0; i < xmlMappings.Length; i++)
+ {
+ readMethodNames[i] = readerCodeGen.GenerateElement(xmlMappings[i]);
+ }
+
+ readerCodeGen.GenerateEnd(readMethodNames, xmlMappings, types);
+
+ string baseSerializer = readerCodeGen.GenerateBaseSerializer("XmlSerializer1", readerClass, writerClass, classes);
+ var serializers = new Hashtable();
+ for (int i = 0; i < xmlMappings.Length; i++)
+ {
+ if (serializers[xmlMappings[i].Key] == null)
+ {
+ serializers[xmlMappings[i].Key] = readerCodeGen.GenerateTypedSerializer(readMethodNames[i], writeMethodNames[i], xmlMappings[i], classes, baseSerializer, readerClass, writerClass);
+ }
+ }
+
+ readerCodeGen.GenerateSerializerContract("XmlSerializerContract", xmlMappings, types, readerClass, readMethodNames, writerClass, writeMethodNames, serializers);
+ writer.Indent--;
+ writer.WriteLine("}");
+ string serializerName = XmlSerializer.GetXmlSerializerAssemblyName(types[0], null);
+ string location = Path.Combine(codePath, serializerName + ".cs");
+ try
+ {
+ if (File.Exists(location))
+ {
+ File.Delete(location);
+ }
+
+ using (FileStream fs = File.Create(location))
+ {
+ string codecontent = compiler.Source.ToString();
+ Byte[] info = new UTF8Encoding(true).GetBytes(codecontent);
+ fs.Write(info, 0, info.Length);
+ return true;
+ }
+ }
+ catch (UnauthorizedAccessException)
+ {
+ throw new UnauthorizedAccessException(SR.Format(SR.DicrectoryAccessDenied, location));
+ }
+ }
+ finally
+ {
+ compiler.Close();
+ }
+ }
+
+#endif
#if !XMLSERIALIZERGENERATOR
#if !uapaot
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2106:SecureAsserts", Justification = "It is safe because the serialization assembly is generated by the framework code, not by the user.")]
diff --git a/src/System.Private.Xml/src/System/Xml/Serialization/XmlSerializer.cs b/src/System.Private.Xml/src/System/Xml/Serialization/XmlSerializer.cs
index d27e3e0973..cb4762638a 100644
--- a/src/System.Private.Xml/src/System/Xml/Serialization/XmlSerializer.cs
+++ b/src/System.Private.Xml/src/System/Xml/Serialization/XmlSerializer.cs
@@ -788,6 +788,50 @@ namespace System.Xml.Serialization
#endif
}
+#if XMLSERIALIZERGENERATOR
+ [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]
+ [ResourceExposure(ResourceScope.None)]
+ public static bool GenerateSerializer(Type[] types, XmlMapping[] mappings, string codePath)
+ {
+ if (types == null || types.Length == 0)
+ return false;
+
+ if (mappings == null)
+ throw new ArgumentNullException(nameof(mappings));
+
+ if(!Directory.Exists(codePath))
+ {
+ throw new ArgumentException(SR.Format(SR.XmlMelformMapping));
+ }
+
+ if (XmlMapping.IsShallow(mappings))
+ {
+ throw new InvalidOperationException(SR.Format(SR.XmlMelformMapping));
+ }
+
+ Assembly assembly = null;
+ for (int i = 0; i < types.Length; i++)
+ {
+ Type type = types[i];
+ if (DynamicAssemblies.IsTypeDynamic(type))
+ {
+ throw new InvalidOperationException(SR.Format(SR.XmlPregenTypeDynamic, type.FullName));
+ }
+
+ if (assembly == null)
+ {
+ assembly = type.Assembly;
+ }
+ else if (type.Assembly != assembly)
+ {
+ throw new ArgumentException(SR.Format(SR.XmlPregenOrphanType, type.FullName, assembly.Location), "types");
+ }
+ }
+
+ return TempAssembly.GenerateSerializerFile(mappings, types, null, assembly, new Hashtable(), codePath);
+ }
+#endif
+
private static XmlSerializer[] GetSerializersFromCache(XmlMapping[] mappings, Type type)
{
XmlSerializer[] serializers = new XmlSerializer[mappings.Length];
diff --git a/src/System.Private.Xml/src/System/Xml/XPath/Internal/XmlIteratorQuery.cs b/src/System.Private.Xml/src/System/Xml/XPath/Internal/XmlIteratorQuery.cs
deleted file mode 100644
index 5eeb7938d0..0000000000
--- a/src/System.Private.Xml/src/System/Xml/XPath/Internal/XmlIteratorQuery.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace MS.Internal.Xml.XPath {
- using System;
- using System.Xml;
- using System.Xml.XPath;
- using System.Diagnostics;
- using System.Globalization;
- using System.Collections;
-
- internal class XmlIteratorQuery: Query {
- ResetableIterator it;
-
- public XmlIteratorQuery(XPathNodeIterator it) {
- this.it = it as ResetableIterator;
- if (this.it == null) {
- this.it = new XPathArrayIterator(it);
- }
- }
- protected XmlIteratorQuery(XmlIteratorQuery other) : base(other) {
- this.it = (ResetableIterator)other.it.Clone();
- }
-
- public override XPathNavigator Current { get { return it.Current; } }
-
- public override XPathNavigator Advance() {
- if (it.MoveNext()) {
- return it.Current;
- }
- return null;
- }
-
- public override XPathResultType StaticType { get { return XPathResultType.NodeSet; } }
-
- public override void Reset() {
- it.Reset();
- }
-
- public override XPathNodeIterator Clone() { return new XmlIteratorQuery(this); }
-
- public override int CurrentPosition { get { return it.CurrentPosition; } }
-
- public override object Evaluate(XPathNodeIterator nodeIterator) {
- return it;
- }
- }
-}
diff --git a/src/System.Private.Xml/src/System/Xml/Xslt/XslCompiledTransformBase.cs b/src/System.Private.Xml/src/System/Xml/Xslt/XslCompiledTransformBase.cs
deleted file mode 100644
index 7c57a2daab..0000000000
--- a/src/System.Private.Xml/src/System/Xml/Xslt/XslCompiledTransformBase.cs
+++ /dev/null
@@ -1,110 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System.Diagnostics;
-using System.IO;
-using System.Reflection;
-using System.Security;
-using System.Security.Permissions;
-using System.Xml.XPath;
-using System.Xml.Xsl.Runtime;
-
-namespace System.Xml.Xsl {
- /// <summary>
- /// Common base class for XslCompiledTransform and compiled stylesheet classes
- /// </summary>
- public abstract class XslCompiledTransformBase : XsltCommand {
- // Permission set that contains Reflection [MemberAccess] permissions
- private static readonly PermissionSet MemberAccessPermissionSet;
-
- // Executable command for the compiled stylesheet
- internal XmlILCommand command;
-
- static XslCompiledTransformBase() {
- MemberAccessPermissionSet = new PermissionSet(PermissionState.None);
- MemberAccessPermissionSet.AddPermission(new ReflectionPermission(ReflectionPermissionFlag.MemberAccess));
- }
-
- /// <summary>
- /// Constructor called by compiled stylesheet class constructors. Tries to deserialize a command from a specially named
- /// private static field, which contains either byte[] or XmlQueryStaticData instance.
- /// </summary>
- protected XslCompiledTransformBase() {
- Debug.Assert(!(this is XslCompiledTransform));
- FieldInfo fldData = this.GetType().GetField(XmlQueryStaticData.DataFieldName, BindingFlags.Static | BindingFlags.NonPublic);
- FieldInfo fldTypes = this.GetType().GetField(XmlQueryStaticData.TypesFieldName, BindingFlags.Static | BindingFlags.NonPublic);
-
- // If private fields are not there, it is not a compiled stylesheet class
- if (fldData != null && fldTypes != null) {
- // Need MemberAccess reflection permission to access a private data field and create a delegate
- new ReflectionPermission(ReflectionPermissionFlag.MemberAccess).Assert();
-
- object value = fldData.GetValue(/*this:*/null);
- byte[] data = value as byte[];
- if (data != null) {
- // Deserialize query static data and create the command
- MethodInfo methExec = this.GetType().GetMethod("Execute", BindingFlags.Static | BindingFlags.NonPublic);
- Delegate delExec = Delegate.CreateDelegate(typeof(ExecuteDelegate), methExec);
- value = new XmlILCommand((ExecuteDelegate)delExec, new XmlQueryStaticData(data, (Type[])fldTypes.GetValue(/*this:*/null)));
-
- // Store the constructed command in the same field
- System.Threading.Thread.MemoryBarrier();
- fldData.SetValue(/*this:*/null, value);
- }
-
- this.command = value as XmlILCommand;
- }
- }
-
- /// <summary>
- /// Constructor called by XslCompiledTransform constructor
- /// </summary>
- internal XslCompiledTransformBase(XmlILCommand command) {
- Debug.Assert(this is XslCompiledTransform);
- this.command = command;
- }
-
- //------------------------------------------------
- // OutputSettings implementation
- //------------------------------------------------
-
- /// <summary>
- /// Writer settings specified in the stylesheet
- /// </summary>
- public override XmlWriterSettings OutputSettings {
- get {
- return this.command != null ? this.command.StaticData.DefaultWriterSettings : null;
- }
- }
-
- //------------------------------------------------
- // Main Transform overloads
- //------------------------------------------------
-
- public override void Transform(XmlReader input, XsltArgumentList arguments, XmlWriter results, XmlResolver documentResolver) {
- CheckCommand();
- this.command.Execute((object)input, documentResolver, arguments, results);
- }
-
- public override void Transform(IXPathNavigable input, XsltArgumentList arguments, XmlWriter results, XmlResolver documentResolver) {
- CheckCommand();
- this.command.Execute((object)input.CreateNavigator(), documentResolver, arguments, results);
- }
-
- //------------------------------------------------
- // Helper methods
- //------------------------------------------------
-
- internal void Transform(string inputUri, XsltArgumentList arguments, XmlWriter results, XmlResolver documentResolver) {
- CheckCommand();
- this.command.Execute((object)inputUri, documentResolver, arguments, results);
- }
-
- private void CheckCommand() {
- if (this.command == null) {
- throw new InvalidOperationException(SR.GetString(SR.Xslt_NoStylesheetLoaded));
- }
- }
- }
-}
diff --git a/src/System.Private.Xml/src/System/Xml/Xslt/XsltCommand.cs b/src/System.Private.Xml/src/System/Xml/Xslt/XsltCommand.cs
deleted file mode 100644
index e8b0a756c9..0000000000
--- a/src/System.Private.Xml/src/System/Xml/Xslt/XsltCommand.cs
+++ /dev/null
@@ -1,169 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System.Diagnostics;
-using System.Diagnostics.CodeAnalysis;
-using System.IO;
-using System.Reflection;
-using System.Security;
-using System.Security.Permissions;
-using System.Xml.XPath;
-using System.Xml.Xsl.Runtime;
-
-namespace System.Xml.Xsl {
- /// <summary>
- /// Helper class implementing multiple overloads
- /// </summary>
- public abstract class XsltCommand {
- private static XmlReaderSettings ReaderSettings;
-
- static XsltCommand() {
- ReaderSettings = new XmlReaderSettings();
- ReaderSettings.ProhibitDtd = true;
- ReaderSettings.ReadOnly = true;
- }
-
- /// <summary>
- /// Writer settings specified in the stylesheet
- /// </summary>
- public abstract XmlWriterSettings OutputSettings { get; }
-
- //------------------------------------------------
- // Transform methods which take an IXPathNavigable
- //------------------------------------------------
-
- public void Transform(IXPathNavigable input, XmlWriter results) {
- CheckArguments(input, results);
- Transform(input, (XsltArgumentList)null, results, new XmlUrlResolver());
- }
-
- public void Transform(IXPathNavigable input, XsltArgumentList arguments, XmlWriter results) {
- CheckArguments(input, results);
- Transform(input, arguments, results, new XmlUrlResolver());
- }
-
- public void Transform(IXPathNavigable input, XsltArgumentList arguments, TextWriter results) {
- CheckArguments(input, results);
- using (XmlWriter writer = XmlWriter.Create(results, OutputSettings)) {
- Transform(input, arguments, writer, new XmlUrlResolver());
- }
- }
-
- public void Transform(IXPathNavigable input, XsltArgumentList arguments, Stream results) {
- CheckArguments(input, results);
- using (XmlWriter writer = XmlWriter.Create(results, OutputSettings)) {
- Transform(input, arguments, writer, new XmlUrlResolver());
- }
- }
-
- //------------------------------------------------
- // Transform methods which take an XmlReader
- //------------------------------------------------
-
- public void Transform(XmlReader input, XmlWriter results) {
- CheckArguments(input, results);
- Transform(input, (XsltArgumentList)null, results, new XmlUrlResolver());
- }
-
- public void Transform(XmlReader input, XsltArgumentList arguments, XmlWriter results) {
- CheckArguments(input, results);
- Transform(input, arguments, results, new XmlUrlResolver());
- }
-
- public void Transform(XmlReader input, XsltArgumentList arguments, TextWriter results) {
- CheckArguments(input, results);
- using (XmlWriter writer = XmlWriter.Create(results, OutputSettings)) {
- Transform(input, arguments, writer, new XmlUrlResolver());
- }
- }
-
- public void Transform(XmlReader input, XsltArgumentList arguments, Stream results) {
- CheckArguments(input, results);
- using (XmlWriter writer = XmlWriter.Create(results, OutputSettings)) {
- Transform(input, arguments, writer, new XmlUrlResolver());
- }
- }
-
- //------------------------------------------------
- // Transform methods which take a uri
- //------------------------------------------------
-
- [SuppressMessage("Microsoft.Design", "CA1054:UriParametersShouldNotBeStrings")]
- public void Transform(string inputUri, XmlWriter results) {
- CheckArguments(inputUri, results);
- using (XmlReader reader = XmlReader.Create(inputUri, ReaderSettings)) {
- Transform(reader, (XsltArgumentList)null, results, new XmlUrlResolver());
- }
- }
-
- [SuppressMessage("Microsoft.Design", "CA1054:UriParametersShouldNotBeStrings")]
- public void Transform(string inputUri, XsltArgumentList arguments, XmlWriter results) {
- CheckArguments(inputUri, results);
- using (XmlReader reader = XmlReader.Create(inputUri, ReaderSettings)) {
- Transform(reader, arguments, results, new XmlUrlResolver());
- }
- }
-
- [SuppressMessage("Microsoft.Design", "CA1054:UriParametersShouldNotBeStrings")]
- public void Transform(string inputUri, XsltArgumentList arguments, TextWriter results) {
- CheckArguments(inputUri, results);
- using (XmlReader reader = XmlReader.Create(inputUri, ReaderSettings))
- using (XmlWriter writer = XmlWriter.Create(results, OutputSettings)) {
- Transform(reader, arguments, writer, new XmlUrlResolver());
- }
- }
-
- [SuppressMessage("Microsoft.Design", "CA1054:UriParametersShouldNotBeStrings")]
- public void Transform(string inputUri, XsltArgumentList arguments, Stream results) {
- CheckArguments(inputUri, results);
- using (XmlReader reader = XmlReader.Create(inputUri, ReaderSettings))
- using (XmlWriter writer = XmlWriter.Create(results, OutputSettings)) {
- Transform(reader, arguments, writer, new XmlUrlResolver());
- }
- }
-
- [SuppressMessage("Microsoft.Design", "CA1054:UriParametersShouldNotBeStrings")]
- public void Transform(string inputUri, string resultsFile) {
- if (inputUri == null)
- throw new ArgumentNullException(nameof(inputUri));
-
- if (resultsFile == null)
- throw new ArgumentNullException(nameof(resultsFile));
-
- // SQLBUDT 276415: Prevent wiping out the content of the input file if the output file is the same
- using (XmlReader reader = XmlReader.Create(inputUri, ReaderSettings))
- using (XmlWriter writer = XmlWriter.Create(resultsFile, OutputSettings)) {
- Transform(reader, (XsltArgumentList)null, writer, new XmlUrlResolver());
- }
- }
-
- //------------------------------------------------
- // Main Transform overloads
- //------------------------------------------------
-
- public abstract void Transform(XmlReader input, XsltArgumentList arguments, XmlWriter results, XmlResolver documentResolver);
-
- public abstract void Transform(IXPathNavigable input, XsltArgumentList arguments, XmlWriter results, XmlResolver documentResolver);
-
- //------------------------------------------------
- // Helper methods
- //------------------------------------------------
-
- private static void CheckArguments(object input, object results) {
- if (input == null)
- throw new ArgumentNullException(nameof(input));
-
- if (results == null)
- throw new ArgumentNullException(nameof(results));
- }
-
- private static void CheckArguments(string inputUri, object results) {
- if (inputUri == null)
- throw new ArgumentNullException(nameof(inputUri));
-
- if (results == null)
- throw new ArgumentNullException(nameof(results));
- }
- }
-}
diff --git a/src/System.Private.Xml/src/System/Xml/Xslt/XsltCompiler.cs b/src/System.Private.Xml/src/System/Xml/Xslt/XsltCompiler.cs
deleted file mode 100644
index 298f94d126..0000000000
--- a/src/System.Private.Xml/src/System/Xml/Xslt/XsltCompiler.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System.CodeDom.Compiler;
-using System.Diagnostics;
-using System.Reflection.Emit;
-using System.Xml.Xsl.Qil;
-using System.Xml.Xsl.Runtime;
-using System.Xml.Xsl.Xslt;
-
-namespace System.Xml.Xsl {
-
- //----------------------------------------------------------------------------------------------------
- // Clarification on null values in this API:
- // stylesheet - cannot be null
- // settings - if null, XsltSettings.Default will be used
- // stylesheetResolver - if null, XmlNullResolver will be used for includes/imports
- // typeBuilder - cannot be null
- //----------------------------------------------------------------------------------------------------
-
- /// <summary>
- /// Compiles XSLT stylesheet into a TypeBuilder
- /// </summary>
- public class XsltCompiler {
- public static CompilerErrorCollection CompileToType(XmlReader stylesheet, XsltSettings settings, XmlResolver stylesheetResolver, TypeBuilder typeBuilder) {
- if (stylesheet == null)
- throw new ArgumentNullException(nameof(stylesheet));
-
- if (typeBuilder == null)
- throw new ArgumentNullException(nameof(typeBuilder));
-
- if (settings == null)
- settings = XsltSettings.Default;
-
- CompilerErrorCollection errors;
- QilExpression qil;
-
- // Get DebuggableAttribute of the assembly. If there are many of them, JIT seems to pick up a random one.
- // I could not discover any pattern here, so let's take the first attribute found.
- object[] debuggableAttrs = typeBuilder.Assembly.GetCustomAttributes(typeof(DebuggableAttribute), false);
- bool debug = debuggableAttrs.Length > 0 && ((DebuggableAttribute) debuggableAttrs[0]).IsJITTrackingEnabled;
-
- errors = new Compiler(settings, debug).Compile(stylesheet, stylesheetResolver, out qil).Errors;
-
- if (!errors.HasErrors) {
- new XmlILGenerator().Generate(qil, typeBuilder);
- }
-
- return errors;
- }
- }
-}
diff --git a/src/System.Private.Xml/src/Utils/DTDs/StripXmlComments/StripXmlComments.cs b/src/System.Private.Xml/src/Utils/DTDs/StripXmlComments/StripXmlComments.cs
deleted file mode 100644
index 8f083d53cc..0000000000
--- a/src/System.Private.Xml/src/Utils/DTDs/StripXmlComments/StripXmlComments.cs
+++ /dev/null
@@ -1,77 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-using System.IO;
-using System.Text;
-
-namespace StripComments {
- class Program {
-
- static bool inComment = false;
-
- const bool StripEmptyLines = false;
- const bool UseUnixNewLine = true;
-
- static string FilterComments(string line) {
- int indexStart, indexEnd;
- if (inComment) {
- if ((indexEnd = line.IndexOf("-->")) != -1) {
- line = line.Substring(indexEnd + 3);
- inComment = false;
- return line;
- }
- else {
- return string.Empty;
- }
- }
- else {
- if ((indexStart = line.IndexOf("<!--")) != -1) {
- if ((indexEnd = line.IndexOf("-->")) != -1) {
- if (indexEnd + 3 == line.Length) {
- line = line.Substring(0, indexStart);
- line = line.TrimEnd();
- }
- else {
- line = string.Concat(line.Substring(0, indexStart), line.Substring(indexEnd + 3));
- return FilterComments(line);
- }
- }
- else {
- line = line.Substring(0, indexStart);
- inComment = true;
- }
- }
- return line;
- }
- }
-
- static void Main(string[] args) {
- if (args.Length < 2) {
- Console.WriteLine("USAGE: StripSpaces input_file output_file");
- return;
- }
-
- string inputFile = args[0];
- string outputFile = args[1];
-
- using (StreamReader input = new StreamReader(inputFile)) {
- using (StreamWriter output = new StreamWriter(outputFile)) {
- if (UseUnixNewLine) {
- output.NewLine = "\n";
- }
- string line;
- while ((line = input.ReadLine()) != null) {
- line = FilterComments(line);
- if (line != null) {
- if (!StripEmptyLines || line.Length > 0) {
- output.WriteLine(line);
- }
- }
- }
- }
- }
- }
- }
-}
diff --git a/src/System.Reflection.Metadata/specs/PortablePdb-Metadata.md b/src/System.Reflection.Metadata/specs/PortablePdb-Metadata.md
index 78696857a1..5ec0f06958 100644
--- a/src/System.Reflection.Metadata/specs/PortablePdb-Metadata.md
+++ b/src/System.Reflection.Metadata/specs/PortablePdb-Metadata.md
@@ -232,12 +232,12 @@ There shall be no duplicate rows in the LocalVariable table, based upon owner an
There shall be no duplicate rows in the LocalVariable table, based upon owner and _Name_.
-#####<a name="LocalVariableAttributes"></a>LocalVariableAttributes
+##### <a name="LocalVariableAttributes"></a>LocalVariableAttributes
| flag | value | description |
|:------|:------|:------------|
| DebuggerHidden | 0x0001 | Variable shouldn’t appear in the list of variables displayed by the debugger |
-###<a name="LocalConstantTable"></a>LocalConstant Table: 0x34
+### <a name="LocalConstantTable"></a>LocalConstant Table: 0x34
The LocalConstant table has the following columns:
@@ -248,7 +248,7 @@ Conceptually, every row in the LocalConstant table is owned by one, and only one
There shall be no duplicate rows in the LocalConstant table, based upon owner and _Name_.
-####<a name="LocalConstantSig"></a>LocalConstantSig Blob
+#### <a name="LocalConstantSig"></a>LocalConstantSig Blob
The structure of the blob is
@@ -302,13 +302,13 @@ The encoding of the _GeneralValue_ is determined based upon the type expressed b
| System | Decimal | sign (highest bit), scale (bits 0..7), low (uint32), mid (uint32), high (uint32) |
| System | DateTime | int64: ticks |
-###<a name="ImportScopeTable"></a>ImportScope Table: 0x35
+### <a name="ImportScopeTable"></a>ImportScope Table: 0x35
The ImportScope table has the following columns:
* Parent (ImportScope row id or nil)
* Imports (Blob index, encoding: [Imports blob](#ImportsBlob))
-####<a name="ImportsBlob"></a>Imports Blob
+#### <a name="ImportsBlob"></a>Imports Blob
Imports blob represents all imports declared by an import scope.
Imports blob has the following structure:
diff --git a/src/System.Reflection.TypeExtensions/System.Reflection.TypeExtensions.sln b/src/System.Reflection.TypeExtensions/System.Reflection.TypeExtensions.sln
index 50321947b3..ff671208e9 100644
--- a/src/System.Reflection.TypeExtensions/System.Reflection.TypeExtensions.sln
+++ b/src/System.Reflection.TypeExtensions/System.Reflection.TypeExtensions.sln
@@ -43,10 +43,10 @@ Global
{A9EF5E88-1AD9-4545-8AFE-CA0F5F00E2CB}.Debug|Any CPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{A9EF5E88-1AD9-4545-8AFE-CA0F5F00E2CB}.Release|Any CPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{A9EF5E88-1AD9-4545-8AFE-CA0F5F00E2CB}.Release|Any CPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
- {C303A051-8D54-4460-8BFD-DE10F0473BDB}.Debug|Any CPU.ActiveCfg = netcoreapp-Debug|Any CPU
- {C303A051-8D54-4460-8BFD-DE10F0473BDB}.Debug|Any CPU.Build.0 = netcoreapp-Debug|Any CPU
- {C303A051-8D54-4460-8BFD-DE10F0473BDB}.Release|Any CPU.ActiveCfg = netcoreapp-Release|Any CPU
- {C303A051-8D54-4460-8BFD-DE10F0473BDB}.Release|Any CPU.Build.0 = netcoreapp-Release|Any CPU
+ {C303A051-8D54-4460-8BFD-DE10F0473BDB}.Debug|Any CPU.ActiveCfg = netstandard-Debug|Any CPU
+ {C303A051-8D54-4460-8BFD-DE10F0473BDB}.Debug|Any CPU.Build.0 = netstandard-Debug|Any CPU
+ {C303A051-8D54-4460-8BFD-DE10F0473BDB}.Release|Any CPU.ActiveCfg = netstandard-Release|Any CPU
+ {C303A051-8D54-4460-8BFD-DE10F0473BDB}.Release|Any CPU.Build.0 = netstandard-Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/src/System.Reflection.TypeExtensions/pkg/System.Reflection.TypeExtensions.pkgproj b/src/System.Reflection.TypeExtensions/pkg/System.Reflection.TypeExtensions.pkgproj
new file mode 100644
index 0000000000..d839d514fb
--- /dev/null
+++ b/src/System.Reflection.TypeExtensions/pkg/System.Reflection.TypeExtensions.pkgproj
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <ItemGroup>
+ <ProjectReference Include="..\ref\System.Reflection.TypeExtensions.csproj">
+ <SupportedFramework>net461;netcoreapp2.0;$(AllXamarinFrameworks)</SupportedFramework>
+ </ProjectReference>
+ <ProjectReference Include="..\src\System.Reflection.TypeExtensions.csproj" />
+ </ItemGroup>
+ <ItemGroup>
+ <InboxOnTargetFramework Include="MonoAndroid10" />
+ <InboxOnTargetFramework Include="MonoTouch10" />
+ <InboxOnTargetFramework Include="xamarinios10" />
+ <InboxOnTargetFramework Include="xamarinmac20" />
+ <InboxOnTargetFramework Include="xamarintvos10" />
+ <InboxOnTargetFramework Include="xamarinwatchos10" />
+ <!-- this package previously defined API at netstandard1.5, which was supported by net462
+ now that net461 supports netstandard2.0 and therefor nestandard1.5 we must support
+ the ns1.5 API in net461, exclude the net462 assembly since it is redundant. -->
+ <HarvestExcludePaths Include="ref/net462;lib/net462" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project> \ No newline at end of file
diff --git a/src/System.Reflection.TypeExtensions/ref/Configurations.props b/src/System.Reflection.TypeExtensions/ref/Configurations.props
index 192309fce5..6308641bd9 100644
--- a/src/System.Reflection.TypeExtensions/ref/Configurations.props
+++ b/src/System.Reflection.TypeExtensions/ref/Configurations.props
@@ -2,9 +2,9 @@
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<BuildConfigurations>
- netcoreapp;
+ netstandard;
netfx;
- uap;
+ net461;
</BuildConfigurations>
</PropertyGroup>
</Project> \ No newline at end of file
diff --git a/src/System.Reflection.TypeExtensions/ref/System.Reflection.TypeExtensions.csproj b/src/System.Reflection.TypeExtensions/ref/System.Reflection.TypeExtensions.csproj
index 70d7702ab4..b0c949d722 100644
--- a/src/System.Reflection.TypeExtensions/ref/System.Reflection.TypeExtensions.csproj
+++ b/src/System.Reflection.TypeExtensions/ref/System.Reflection.TypeExtensions.csproj
@@ -4,22 +4,17 @@
<PropertyGroup>
<ProjectGuid>{C303A051-8D54-4460-8BFD-DE10F0473BDB}</ProjectGuid>
</PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Debug|AnyCPU'" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Release|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'net461-Debug|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'net461-Release|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netfx-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netfx-Release|AnyCPU'" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'uap-Debug|AnyCPU'" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'uap-Release|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Debug|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Release|AnyCPU'" />
<ItemGroup>
<Compile Include="System.Reflection.TypeExtensions.cs" />
</ItemGroup>
- <ItemGroup Condition="'$(TargetGroup)' == 'netfx'">
+ <ItemGroup Condition="'$(TargetGroup)' == 'netfx' OR '$(TargetGroup)' == 'net461'">
<Reference Include="mscorlib" />
</ItemGroup>
- <ItemGroup Condition="'$(TargetGroup)' != 'netfx'">
- <ProjectReference Include="..\..\System.Runtime\ref\System.Runtime.csproj" />
- <ProjectReference Include="..\..\System.Reflection.Primitives\ref\System.Reflection.Primitives.csproj" />
- <ProjectReference Include="..\..\System.Reflection\ref\System.Reflection.csproj" />
- </ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
</Project> \ No newline at end of file
diff --git a/src/System.Reflection.TypeExtensions/src/Configurations.props b/src/System.Reflection.TypeExtensions/src/Configurations.props
index f9b8242235..5136192b6d 100644
--- a/src/System.Reflection.TypeExtensions/src/Configurations.props
+++ b/src/System.Reflection.TypeExtensions/src/Configurations.props
@@ -1,12 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
- <BuildConfigurations>
- netfx-Windows_NT;
- uapaot-Windows_NT;
+ <PackageConfigurations>
+ net461-Windows_NT;
netcoreapp-Windows_NT;
netcoreapp-Unix;
uap-Windows_NT;
+ uapaot-Windows_NT;
+ </PackageConfigurations>
+ <BuildConfigurations>
+ $(PackageConfigurations);
+ netfx-Windows_NT;
</BuildConfigurations>
</PropertyGroup>
</Project>
diff --git a/src/System.Reflection.TypeExtensions/src/System.Reflection.TypeExtensions.csproj b/src/System.Reflection.TypeExtensions/src/System.Reflection.TypeExtensions.csproj
index 5a5b0dceaf..58e456d5b6 100644
--- a/src/System.Reflection.TypeExtensions/src/System.Reflection.TypeExtensions.csproj
+++ b/src/System.Reflection.TypeExtensions/src/System.Reflection.TypeExtensions.csproj
@@ -7,6 +7,8 @@
<ProjectGuid>{A9EF5E88-1AD9-4545-8AFE-CA0F5F00E2CB}</ProjectGuid>
</PropertyGroup>
<!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'net461-Windows_NT-Debug|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'net461-Windows_NT-Release|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Unix-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Unix-Release|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Windows_NT-Debug|AnyCPU'" />
@@ -22,8 +24,8 @@
<Compile Include="System\Reflection\TypeExtensions.cs" />
</ItemGroup>
<ItemGroup>
- <Reference Include="mscorlib" Condition="'$(TargetGroup)' == 'netfx'" />
- <ReferenceFromRuntime Include="System.Private.CoreLib" Condition="'$(TargetGroup)' != 'netfx'" />
+ <Reference Include="mscorlib" Condition="'$(TargetGroup)' == 'netfx' OR '$(TargetGroup)' == 'net461'" />
+ <ReferenceFromRuntime Include="System.Private.CoreLib" Condition="'$(TargetGroup)' != 'netfx' AND '$(TargetGroup)' != 'net461'" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
</Project> \ No newline at end of file
diff --git a/src/System.Reflection/src/ApiCompatBaseline.uapaot.txt b/src/System.Reflection/src/ApiCompatBaseline.uapaot.txt
deleted file mode 100644
index 3f48c5ade2..0000000000
--- a/src/System.Reflection/src/ApiCompatBaseline.uapaot.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-Compat issues with assembly System.Reflection:
-MembersMustExist : Member 'System.Reflection.FieldInfo.GetValueDirect(System.TypedReference)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Reflection.FieldInfo.SetValueDirect(System.TypedReference, System.Object)' does not exist in the implementation but it does exist in the contract.
-Total Issues: 2
diff --git a/src/System.Resources.Reader/dir.props b/src/System.Resources.Reader/dir.props
index bfbc5bd9e0..83a5a15522 100644
--- a/src/System.Resources.Reader/dir.props
+++ b/src/System.Resources.Reader/dir.props
@@ -4,5 +4,6 @@
<PropertyGroup>
<AssemblyVersion>4.1.0.0</AssemblyVersion>
<IsNETCoreApp>true</IsNETCoreApp>
+ <IsUAP>true</IsUAP>
</PropertyGroup>
</Project> \ No newline at end of file
diff --git a/src/System.Runtime.CompilerServices.Unsafe/src/System.Runtime.CompilerServices.Unsafe.ilproj b/src/System.Runtime.CompilerServices.Unsafe/src/System.Runtime.CompilerServices.Unsafe.ilproj
index 22ac37f89b..b99fd3cf3a 100644
--- a/src/System.Runtime.CompilerServices.Unsafe/src/System.Runtime.CompilerServices.Unsafe.ilproj
+++ b/src/System.Runtime.CompilerServices.Unsafe/src/System.Runtime.CompilerServices.Unsafe.ilproj
@@ -16,8 +16,5 @@
<Compile Include="System.Runtime.CompilerServices.Unsafe.il" />
<Reference Include="System.Runtime" />
</ItemGroup>
- <Target Name="RunAfterCoreCompile" AfterTargets="CoreCompile">
- <CallTarget Targets="$(TargetsTriggeredByCompilation)" Condition="'$(TargetsTriggeredByCompilation)' != ''" />
- </Target>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
</Project> \ No newline at end of file
diff --git a/src/System.Runtime.Extensions/src/ApiCompatBaseline.uapaot.txt b/src/System.Runtime.Extensions/src/ApiCompatBaseline.uapaot.txt
index 143aab3627..aaaffe744f 100644
--- a/src/System.Runtime.Extensions/src/ApiCompatBaseline.uapaot.txt
+++ b/src/System.Runtime.Extensions/src/ApiCompatBaseline.uapaot.txt
@@ -21,9 +21,6 @@ MembersMustExist : Member 'System.AppDomain.remove_ResourceResolve(System.Resolv
MembersMustExist : Member 'System.AppDomain.remove_TypeResolve(System.ResolveEventHandler)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.AppDomain.remove_UnhandledException(System.UnhandledExceptionEventHandler)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.AppDomain.SetData(System.String, System.Object)' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.AssemblyLoadEventArgs' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.AssemblyLoadEventHandler' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Math.BigMul(System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.Math.Clamp(System.Byte, System.Byte, System.Byte)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.Math.Clamp(System.Decimal, System.Decimal, System.Decimal)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.Math.Clamp(System.Double, System.Double, System.Double)' does not exist in the implementation but it does exist in the contract.
@@ -35,10 +32,6 @@ MembersMustExist : Member 'System.Math.Clamp(System.Single, System.Single, Syste
MembersMustExist : Member 'System.Math.Clamp(System.UInt16, System.UInt16, System.UInt16)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.Math.Clamp(System.UInt32, System.UInt32, System.UInt32)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.Math.Clamp(System.UInt64, System.UInt64, System.UInt64)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Math.DivRem(System.Int32, System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Math.DivRem(System.Int64, System.Int64, System.Int64)' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.MathF' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.ResolveEventHandler' does not exist in the implementation but it does exist in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.IO.BufferedStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.IO.MemoryStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
-Total Issues: 42
+Total Issues: 35
diff --git a/src/System.Runtime.Extensions/src/System/IO/Path.Unix.cs b/src/System.Runtime.Extensions/src/System/IO/Path.Unix.cs
deleted file mode 100644
index 3b09bf263e..0000000000
--- a/src/System.Runtime.Extensions/src/System/IO/Path.Unix.cs
+++ /dev/null
@@ -1,246 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System.Diagnostics;
-using System.Runtime.InteropServices;
-using System.Text;
-
-namespace System.IO
-{
- public static partial class Path
- {
- public static readonly char DirectorySeparatorChar = '/';
- public static readonly char VolumeSeparatorChar = '/';
- public static readonly char PathSeparator = ':';
-
- private const string DirectorySeparatorCharAsString = "/";
-
- public static char[] GetInvalidFileNameChars() => new char[] { '\0', '/' };
-
- private static readonly int MaxPath = Interop.Sys.MaxPath;
- private static readonly int MaxLongPath = MaxPath;
-
- private static readonly bool s_isMac = Interop.Sys.GetUnixName() == "OSX";
-
- // Expands the given path to a fully qualified path.
- public static string GetFullPath(string path)
- {
- if (path == null)
- throw new ArgumentNullException(nameof(path));
-
- if (path.Length == 0)
- throw new ArgumentException(SR.Arg_PathIllegal);
-
- PathInternal.CheckInvalidPathChars(path);
-
- // Expand with current directory if necessary
- if (!IsPathRooted(path))
- {
- path = Combine(Interop.Sys.GetCwd(), path);
- }
-
- // We would ideally use realpath to do this, but it resolves symlinks, requires that the file actually exist,
- // and turns it into a full path, which we only want if fullCheck is true.
- string collapsedString = RemoveRelativeSegments(path);
-
- Debug.Assert(collapsedString.Length < path.Length || collapsedString.ToString() == path,
- "Either we've removed characters, or the string should be unmodified from the input path.");
-
- if (collapsedString.Length > MaxPath)
- {
- throw new PathTooLongException(SR.IO_PathTooLong);
- }
-
- string result = collapsedString.Length == 0 ? DirectorySeparatorCharAsString : collapsedString;
-
- return result;
- }
-
- /// <summary>
- /// Try to remove relative segments from the given path (without combining with a root).
- /// </summary>
- /// <param name="skip">Skip the specified number of characters before evaluating.</param>
- private static string RemoveRelativeSegments(string path, int skip = 0)
- {
- bool flippedSeparator = false;
-
- // Remove "//", "/./", and "/../" from the path by copying each character to the output,
- // except the ones we're removing, such that the builder contains the normalized path
- // at the end.
- var sb = StringBuilderCache.Acquire(path.Length);
- if (skip > 0)
- {
- sb.Append(path, 0, skip);
- }
-
- int componentCharCount = 0;
- for (int i = skip; i < path.Length; i++)
- {
- char c = path[i];
-
- if (PathInternal.IsDirectorySeparator(c) && i + 1 < path.Length)
- {
- componentCharCount = 0;
-
- // Skip this character if it's a directory separator and if the next character is, too,
- // e.g. "parent//child" => "parent/child"
- if (PathInternal.IsDirectorySeparator(path[i + 1]))
- {
- continue;
- }
-
- // Skip this character and the next if it's referring to the current directory,
- // e.g. "parent/./child" =? "parent/child"
- if ((i + 2 == path.Length || PathInternal.IsDirectorySeparator(path[i + 2])) &&
- path[i + 1] == '.')
- {
- i++;
- continue;
- }
-
- // Skip this character and the next two if it's referring to the parent directory,
- // e.g. "parent/child/../grandchild" => "parent/grandchild"
- if (i + 2 < path.Length &&
- (i + 3 == path.Length || PathInternal.IsDirectorySeparator(path[i + 3])) &&
- path[i + 1] == '.' && path[i + 2] == '.')
- {
- // Unwind back to the last slash (and if there isn't one, clear out everything).
- int s;
- for (s = sb.Length - 1; s >= 0; s--)
- {
- if (PathInternal.IsDirectorySeparator(sb[s]))
- {
- sb.Length = s;
- break;
- }
- }
- if (s < 0)
- {
- sb.Length = 0;
- }
-
- i += 2;
- continue;
- }
- }
-
- if (++componentCharCount > PathInternal.MaxComponentLength)
- {
- throw new PathTooLongException(SR.IO_PathTooLong);
- }
-
- // Normalize the directory separator if needed
- if (c != Path.DirectorySeparatorChar && c == Path.AltDirectorySeparatorChar)
- {
- c = Path.DirectorySeparatorChar;
- flippedSeparator = true;
- }
-
- sb.Append(c);
- }
-
- if (flippedSeparator || sb.Length != path.Length)
- {
- return StringBuilderCache.GetStringAndRelease(sb);
- }
- else
- {
- // We haven't changed the source path, return the original
- StringBuilderCache.Release(sb);
- return path;
- }
- }
-
- private static string RemoveLongPathPrefix(string path)
- {
- return path; // nop. There's nothing special about "long" paths on Unix.
- }
-
- public static string GetTempPath()
- {
- const string TempEnvVar = "TMPDIR";
- const string DefaultTempPath = "/tmp/";
-
- // Get the temp path from the TMPDIR environment variable.
- // If it's not set, just return the default path.
- // If it is, return it, ensuring it ends with a slash.
- string path = Environment.GetEnvironmentVariable(TempEnvVar);
- return
- string.IsNullOrEmpty(path) ? DefaultTempPath :
- PathInternal.IsDirectorySeparator(path[path.Length - 1]) ? path :
- path + DirectorySeparatorChar;
- }
-
- public static string GetTempFileName()
- {
- const string Suffix = ".tmp";
- const int SuffixByteLength = 4;
-
- // mkstemps takes a char* and overwrites the XXXXXX with six characters
- // that'll result in a unique file name.
- string template = GetTempPath() + "tmpXXXXXX" + Suffix + "\0";
- byte[] name = Encoding.UTF8.GetBytes(template);
-
- // Create, open, and close the temp file.
- IntPtr fd = Interop.CheckIo(Interop.Sys.MksTemps(name, SuffixByteLength));
- Interop.Sys.Close(fd); // ignore any errors from close; nothing to do if cleanup isn't possible
-
- // 'name' is now the name of the file
- Debug.Assert(name[name.Length - 1] == '\0');
- return Encoding.UTF8.GetString(name, 0, name.Length - 1); // trim off the trailing '\0'
- }
-
- public static bool IsPathRooted(string path)
- {
- if (path == null)
- return false;
-
- PathInternal.CheckInvalidPathChars(path);
- return path.Length > 0 && path[0] == DirectorySeparatorChar;
- }
-
- public static string GetPathRoot(string path)
- {
- if (path == null) return null;
- return IsPathRooted(path) ? DirectorySeparatorCharAsString : String.Empty;
- }
-
- private static unsafe void GetCryptoRandomBytes(byte* bytes, int byteCount)
- {
- if (Environment.IsMac)
- {
- GetCryptoRandomBytesApple(bytes, byteCount);
- }
- else
- {
- GetCryptoRandomBytesOpenSsl(bytes, byteCount);
- }
- }
-
- private static unsafe void GetCryptoRandomBytesApple(byte* bytes, int byteCount)
- {
- Debug.Assert(bytes != null);
- Debug.Assert(byteCount >= 0);
-
- if (Interop.CommonCrypto.CCRandomGenerateBytes(bytes, byteCount) != 0)
- {
- throw new InvalidOperationException(SR.InvalidOperation_Cryptography);
- }
- }
-
- private static unsafe void GetCryptoRandomBytesOpenSsl(byte* bytes, int byteCount)
- {
- Debug.Assert(bytes != null);
- Debug.Assert(byteCount >= 0);
-
- if (!Interop.Crypto.GetRandomBytes(bytes, byteCount))
- {
- throw new InvalidOperationException(SR.InvalidOperation_Cryptography);
- }
- }
-
- /// <summary>Gets whether the system is case-sensitive.</summary>
- internal static bool IsCaseSensitive { get { return !s_isMac; } }
- }
-}
diff --git a/src/System.Runtime.Extensions/src/System/IO/Path.Win32.cs b/src/System.Runtime.Extensions/src/System/IO/Path.Win32.cs
deleted file mode 100644
index 8a9e62e6e5..0000000000
--- a/src/System.Runtime.Extensions/src/System/IO/Path.Win32.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System.Diagnostics;
-
-namespace System.IO
-{
- public static partial class Path
- {
- private static unsafe void GetCryptoRandomBytes(byte* bytes, int byteCount)
- {
- // We need to fill a byte array with cryptographically-strong random bytes, but we can't reference
- // System.Security.Cryptography.RandomNumberGenerator.dll due to layering. Instead, we just
- // call to BCryptGenRandom directly, which is all that RandomNumberGenerator does.
-
- Debug.Assert(bytes != null);
- Debug.Assert(byteCount >= 0);
-
- Interop.BCrypt.NTSTATUS status = Interop.BCrypt.BCryptGenRandom(bytes, byteCount);
- if (status == Interop.BCrypt.NTSTATUS.STATUS_SUCCESS)
- {
- return;
- }
- else if (status == Interop.BCrypt.NTSTATUS.STATUS_NO_MEMORY)
- {
- throw new OutOfMemoryException();
- }
- else
- {
- Debug.Fail("BCryptGenRandom should only fail due to OOM or invalid args / handle inputs.");
- throw new InvalidOperationException();
- }
- }
- }
-}
diff --git a/src/System.Runtime.InteropServices.RuntimeInformation/System.Runtime.InteropServices.RuntimeInformation.sln b/src/System.Runtime.InteropServices.RuntimeInformation/System.Runtime.InteropServices.RuntimeInformation.sln
index 0ad13ec027..1e0dd84246 100644
--- a/src/System.Runtime.InteropServices.RuntimeInformation/System.Runtime.InteropServices.RuntimeInformation.sln
+++ b/src/System.Runtime.InteropServices.RuntimeInformation/System.Runtime.InteropServices.RuntimeInformation.sln
@@ -34,10 +34,10 @@ Global
{1CBC030D-B5D3-4AB5-A9FD-24EC5F6F38D2}.Debug|Any CPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
{1CBC030D-B5D3-4AB5-A9FD-24EC5F6F38D2}.Release|Any CPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
{1CBC030D-B5D3-4AB5-A9FD-24EC5F6F38D2}.Release|Any CPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
- {9E5D12CD-67C1-4A01-80DF-02CEC3154BB7}.Debug|Any CPU.ActiveCfg = netstandard-Debug|Any CPU
- {9E5D12CD-67C1-4A01-80DF-02CEC3154BB7}.Debug|Any CPU.Build.0 = netstandard-Debug|Any CPU
- {9E5D12CD-67C1-4A01-80DF-02CEC3154BB7}.Release|Any CPU.ActiveCfg = netstandard-Release|Any CPU
- {9E5D12CD-67C1-4A01-80DF-02CEC3154BB7}.Release|Any CPU.Build.0 = netstandard-Release|Any CPU
+ {9E5D12CD-67C1-4A01-80DF-02CEC3154BB7}.Debug|Any CPU.ActiveCfg = netcoreapp-Debug|Any CPU
+ {9E5D12CD-67C1-4A01-80DF-02CEC3154BB7}.Debug|Any CPU.Build.0 = netcoreapp-Debug|Any CPU
+ {9E5D12CD-67C1-4A01-80DF-02CEC3154BB7}.Release|Any CPU.ActiveCfg = netcoreapp-Release|Any CPU
+ {9E5D12CD-67C1-4A01-80DF-02CEC3154BB7}.Release|Any CPU.Build.0 = netcoreapp-Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/src/System.Runtime.InteropServices.RuntimeInformation/dir.props b/src/System.Runtime.InteropServices.RuntimeInformation/dir.props
index 7091ba2d80..d352547194 100644
--- a/src/System.Runtime.InteropServices.RuntimeInformation/dir.props
+++ b/src/System.Runtime.InteropServices.RuntimeInformation/dir.props
@@ -5,6 +5,5 @@
<AssemblyVersion>4.0.2.0</AssemblyVersion>
<IsNETCoreApp>true</IsNETCoreApp>
<IsUAP>true</IsUAP>
- <IsUAPRef>false</IsUAPRef>
</PropertyGroup>
</Project> \ No newline at end of file
diff --git a/src/System.Runtime.InteropServices.RuntimeInformation/ref/Configurations.props b/src/System.Runtime.InteropServices.RuntimeInformation/ref/Configurations.props
index 129adad32f..192309fce5 100644
--- a/src/System.Runtime.InteropServices.RuntimeInformation/ref/Configurations.props
+++ b/src/System.Runtime.InteropServices.RuntimeInformation/ref/Configurations.props
@@ -2,8 +2,9 @@
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<BuildConfigurations>
- netstandard;
- netstandard1.0;
+ netcoreapp;
+ netfx;
+ uap;
</BuildConfigurations>
</PropertyGroup>
</Project> \ No newline at end of file
diff --git a/src/System.Runtime.InteropServices.RuntimeInformation/ref/System.Runtime.InteropServices.RuntimeInformation.csproj b/src/System.Runtime.InteropServices.RuntimeInformation/ref/System.Runtime.InteropServices.RuntimeInformation.csproj
index fee91261b0..e38e4a197e 100644
--- a/src/System.Runtime.InteropServices.RuntimeInformation/ref/System.Runtime.InteropServices.RuntimeInformation.csproj
+++ b/src/System.Runtime.InteropServices.RuntimeInformation/ref/System.Runtime.InteropServices.RuntimeInformation.csproj
@@ -4,15 +4,20 @@
<PropertyGroup>
<ProjectGuid>{9E5D12CD-67C1-4A01-80DF-02CEC3154BB7}</ProjectGuid>
</PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Debug|AnyCPU'" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Release|AnyCPU'" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard1.0-Debug|AnyCPU'" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard1.0-Release|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Debug|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Release|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netfx-Debug|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netfx-Release|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'uap-Debug|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'uap-Release|AnyCPU'" />
<ItemGroup>
<Compile Include="System.Runtime.InteropServices.RuntimeInformation.cs" />
</ItemGroup>
- <ItemGroup Condition="'$(TargetGroup)' == 'netstandard1.0'">
- <Reference Include="System.Runtime" />
+ <ItemGroup Condition="'$(TargetGroup)' != 'netfx'">
+ <ProjectReference Include="..\..\System.Runtime\ref\System.Runtime.csproj" />
+ </ItemGroup>
+ <ItemGroup Condition="'$(TargetGroup)' == 'netfx'">
+ <Reference Include="mscorlib" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
</Project> \ No newline at end of file
diff --git a/src/System.Runtime.InteropServices.RuntimeInformation/src/System.Runtime.InteropServices.RuntimeInformation.csproj b/src/System.Runtime.InteropServices.RuntimeInformation/src/System.Runtime.InteropServices.RuntimeInformation.csproj
index 6c1e985635..ee9e3d2f9f 100644
--- a/src/System.Runtime.InteropServices.RuntimeInformation/src/System.Runtime.InteropServices.RuntimeInformation.csproj
+++ b/src/System.Runtime.InteropServices.RuntimeInformation/src/System.Runtime.InteropServices.RuntimeInformation.csproj
@@ -13,6 +13,8 @@
<GeneratePlatformNotSupportedAssembly Condition="'$(TargetGroup)'=='netstandard1.1' AND '$(OSGroup)'=='AnyOS'">true</GeneratePlatformNotSupportedAssembly>
<!-- use netstandard1.1 refs for win8 and wpa81 -->
<RefPath Condition="'$(TargetGroup)'=='wpa81' OR '$(TargetGroup)'=='win8'">$(RefRootPath)/netstandard1.1</RefPath>
+ <!-- For net45 use the netstandard1.1 contract for APICompat -->
+ <ContractAssemblyPath Condition="'$(TargetGroup)'=='net45'">$(RefRootPath)/netstandard1.1</ContractAssemblyPath>
<!-- Clear runtime for wpa81 & win8: these project types don't use project.json and need to resolve without a runtime -->
<PackageTargetRuntime Condition="'$(TargetGroup)'=='wpa81' OR '$(TargetGroup)'=='win8'">
</PackageTargetRuntime>
diff --git a/src/System.Runtime.Loader/src/ApiCompatBaseline.uapaot.txt b/src/System.Runtime.Loader/src/ApiCompatBaseline.uapaot.txt
index da5bb98552..5da8e21649 100644
--- a/src/System.Runtime.Loader/src/ApiCompatBaseline.uapaot.txt
+++ b/src/System.Runtime.Loader/src/ApiCompatBaseline.uapaot.txt
@@ -1,4 +1,20 @@
Compat issues with assembly System.Runtime.Loader:
TypesMustExist : Type 'System.Reflection.Metadata.AssemblyExtensions' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.Runtime.Loader.AssemblyLoadContext' does not exist in the implementation but it does exist in the contract.
-Total Issues: 2
+MembersMustExist : Member 'System.Runtime.Loader.AssemblyLoadContext.add_Resolving(System.Func<System.Runtime.Loader.AssemblyLoadContext, System.Reflection.AssemblyName, System.Reflection.Assembly>)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Loader.AssemblyLoadContext.add_Unloading(System.Action<System.Runtime.Loader.AssemblyLoadContext>)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Loader.AssemblyLoadContext.Default.get()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Loader.AssemblyLoadContext.GetAssemblyName(System.String)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Loader.AssemblyLoadContext.GetLoadContext(System.Reflection.Assembly)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Loader.AssemblyLoadContext.Load(System.Reflection.AssemblyName)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Loader.AssemblyLoadContext.LoadFromAssemblyName(System.Reflection.AssemblyName)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Loader.AssemblyLoadContext.LoadFromAssemblyPath(System.String)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Loader.AssemblyLoadContext.LoadFromNativeImagePath(System.String, System.String)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Loader.AssemblyLoadContext.LoadFromStream(System.IO.Stream)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Loader.AssemblyLoadContext.LoadFromStream(System.IO.Stream, System.IO.Stream)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Loader.AssemblyLoadContext.LoadUnmanagedDll(System.String)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Loader.AssemblyLoadContext.LoadUnmanagedDllFromPath(System.String)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Loader.AssemblyLoadContext.remove_Resolving(System.Func<System.Runtime.Loader.AssemblyLoadContext, System.Reflection.AssemblyName, System.Reflection.Assembly>)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Loader.AssemblyLoadContext.remove_Unloading(System.Action<System.Runtime.Loader.AssemblyLoadContext>)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Loader.AssemblyLoadContext.SetProfileOptimizationRoot(System.String)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Loader.AssemblyLoadContext.StartProfileOptimization(System.String)' does not exist in the implementation but it does exist in the contract.
+Total Issues: 18
diff --git a/src/System.Runtime.Serialization.Formatters/src/System/Runtime/Serialization/ObjectManager.cs b/src/System.Runtime.Serialization.Formatters/src/System/Runtime/Serialization/ObjectManager.cs
index d62d2acf3f..6fe8b74ef2 100644
--- a/src/System.Runtime.Serialization.Formatters/src/System/Runtime/Serialization/ObjectManager.cs
+++ b/src/System.Runtime.Serialization.Formatters/src/System/Runtime/Serialization/ObjectManager.cs
@@ -11,7 +11,7 @@ namespace System.Runtime.Serialization
public class ObjectManager
{
private const int DefaultInitialSize = 16;
- private const int MaxArraySize = 0x1000; //MUST BE A POWER OF 2!
+ private const int MaxArraySize = 0x100000; //MUST BE A POWER OF 2!
private const int ArrayMask = MaxArraySize - 1;
private const int MaxReferenceDepth = 100;
diff --git a/src/System.Runtime.Serialization.Formatters/tests/FormatterServicesTests.Windows.cs b/src/System.Runtime.Serialization.Formatters/tests/FormatterServicesTests.Windows.cs
new file mode 100644
index 0000000000..b21ad77c81
--- /dev/null
+++ b/src/System.Runtime.Serialization.Formatters/tests/FormatterServicesTests.Windows.cs
@@ -0,0 +1,28 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Collections.Generic;
+using System.Reflection;
+using System.Runtime.InteropServices;
+using Xunit;
+
+namespace System.Runtime.Serialization.Formatters.Tests
+{
+ public partial class FormatterServicesTests
+ {
+ [Fact]
+ public void GetUninitializedObject_COMObject_ThrowsNotSupportedException()
+ {
+ Type comObjectType = typeof(COMObject);
+ Assert.True(comObjectType.IsCOMObject);
+
+ Assert.Throws<NotSupportedException>(() => FormatterServices.GetUninitializedObject(typeof(COMObject)));
+ Assert.Throws<NotSupportedException>(() => FormatterServices.GetSafeUninitializedObject(typeof(COMObject)));
+ }
+
+ [ComImport]
+ [Guid("00000000-0000-0000-0000-000000000000")]
+ public class COMObject { }
+ }
+}
diff --git a/src/System.Runtime.Serialization.Formatters/tests/FormatterServicesTests.cs b/src/System.Runtime.Serialization.Formatters/tests/FormatterServicesTests.cs
index 1ee13d6101..d4aee58304 100644
--- a/src/System.Runtime.Serialization.Formatters/tests/FormatterServicesTests.cs
+++ b/src/System.Runtime.Serialization.Formatters/tests/FormatterServicesTests.cs
@@ -2,12 +2,14 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
+using System.Collections.Generic;
using System.Reflection;
+using System.Runtime.InteropServices;
using Xunit;
namespace System.Runtime.Serialization.Formatters.Tests
{
- public class FormatterServicesTests
+ public partial class FormatterServicesTests
{
[Fact]
public void CheckTypeSecurity_Nop()
@@ -29,21 +31,237 @@ namespace System.Runtime.Serialization.Formatters.Tests
}
[Fact]
- public void GetUninitializedObject_InvalidArguments_ThrowsException()
+ public void GetUninitializedObject_NullType_ThrowsArgumentNullException()
{
Assert.Throws<ArgumentNullException>("type", () => FormatterServices.GetUninitializedObject(null));
Assert.Throws<ArgumentNullException>("type", () => FormatterServices.GetSafeUninitializedObject(null));
}
[Fact]
- public void GetUninitializedObject_DoesNotRunConstructor()
+ public void GetUninitializedObject_NonRuntimeType_ThrowsSerializationException()
{
- Assert.Equal(42, new ObjectWithDefaultCtor().Value);
- Assert.Equal(0, ((ObjectWithDefaultCtor)FormatterServices.GetUninitializedObject(typeof(ObjectWithDefaultCtor))).Value);
- Assert.Equal(0, ((ObjectWithDefaultCtor)FormatterServices.GetSafeUninitializedObject(typeof(ObjectWithDefaultCtor))).Value);
+ Assert.Throws<SerializationException>(() => FormatterServices.GetUninitializedObject(new NonRuntimeType()));
+ Assert.Throws<SerializationException>(() => FormatterServices.GetSafeUninitializedObject(new NonRuntimeType()));
}
- private class ObjectWithDefaultCtor
+ public static IEnumerable<object[]> GetUninitializedObject_NotSupportedType_TestData()
+ {
+ yield return new object[] { typeof(int[]) };
+ yield return new object[] { typeof(int[,]) };
+ yield return new object[] { typeof(int).MakePointerType() };
+ yield return new object[] { typeof(int).MakeByRefType() };
+ yield return new object[] { typeof(GenericClass<>).GetTypeInfo().GenericTypeParameters[0] };
+ }
+
+ [Theory]
+ [MemberData(nameof(GetUninitializedObject_NotSupportedType_TestData))]
+ public void GetUninitializedObject_NotSupportedType_ThrowsArgumentException(Type type)
+ {
+ Assert.Throws<ArgumentException>(null, () => FormatterServices.GetUninitializedObject(type));
+ Assert.Throws<ArgumentException>(null, () => FormatterServices.GetSafeUninitializedObject(type));
+ }
+
+ [Theory]
+ [InlineData(typeof(AbstractClass))]
+ [InlineData(typeof(StaticClass))]
+ [InlineData(typeof(Interface))]
+ [InlineData(typeof(Array))]
+ public void GetUninitializedObject_AbstractClass_ThrowsMemberAccessException(Type type)
+ {
+ Assert.Throws<MemberAccessException>(() => FormatterServices.GetUninitializedObject(type));
+ Assert.Throws<MemberAccessException>(() => FormatterServices.GetSafeUninitializedObject(type));
+ }
+
+ private abstract class AbstractClass { }
+ private static class StaticClass { }
+ private interface Interface { }
+
+ public static IEnumerable<object[]> GetUninitializedObject_OpenGenericClass_TestData()
+ {
+ yield return new object[] { typeof(GenericClass<>) };
+ yield return new object[] { typeof(GenericClass<>).MakeGenericType(typeof(GenericClass<>)) };
+ }
+
+ [Theory]
+ [MemberData(nameof(GetUninitializedObject_OpenGenericClass_TestData))]
+ public void GetUninitializedObject_OpenGenericClass_ThrowsMemberAccessException(Type type)
+ {
+ Assert.Throws<MemberAccessException>(() => FormatterServices.GetUninitializedObject(type));
+ Assert.Throws<MemberAccessException>(() => FormatterServices.GetSafeUninitializedObject(type));
+ }
+
+ public interface IGenericClass
+ {
+ int Value { get; set; }
+ }
+
+ public class GenericClass<T> : IGenericClass
+ {
+ public int Value { get; set; }
+ }
+
+ public static IEnumerable<object[]> GetUninitializedObject_ByRefLikeType_TestData()
+ {
+ yield return new object[] { typeof(ArgIterator) };
+ yield return new object[] { typeof(RuntimeArgumentHandle) };
+ yield return new object[] { typeof(TypedReference) };
+ }
+
+ public static IEnumerable<object[]> GetUninitializedObject_ByRefLikeType_NetCore_TestData()
+ {
+ yield return new object[] { typeof(Span<int>) };
+ yield return new object[] { typeof(ReadOnlySpan<int>) };
+ yield return new object[] { typeof(StructWithSpanField) };
+ }
+
+#pragma warning disable 0169 // The private field 'class member' is never used
+ private struct StructWithSpanField
+ {
+ Span<byte> _bytes;
+ int _position;
+ }
+#pragma warning restore 0169
+
+ [Theory]
+ [MemberData(nameof(GetUninitializedObject_ByRefLikeType_NetCore_TestData))]
+ [SkipOnTargetFramework(~TargetFrameworkMonikers.Netcoreapp, "Some runtimes don't support or recognise Span<T>, ReadOnlySpan<T> or ByReference<T> as ref types.")]
+ public void GetUninitializedObject_ByRefLikeType_NetCore_ThrowsNotSupportedException(Type type)
+ {
+ Assert.Throws<NotSupportedException>(() => FormatterServices.GetUninitializedObject(type));
+ Assert.Throws<NotSupportedException>(() => FormatterServices.GetSafeUninitializedObject(type));
+ }
+
+ [Theory]
+ [MemberData(nameof(GetUninitializedObject_ByRefLikeType_TestData))]
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "full .NET Framework has bug that allows allocating instances of byref-like types.")]
+ public void GetUninitializedObject_ByRefLikeType_NonNetfx_ThrowsNotSupportedException(Type type)
+ {
+ Assert.Throws<NotSupportedException>(() => FormatterServices.GetUninitializedObject(type));
+ Assert.Throws<NotSupportedException>(() => FormatterServices.GetSafeUninitializedObject(type));
+ }
+
+ [Fact]
+ [SkipOnTargetFramework(~TargetFrameworkMonikers.Netcoreapp, "The coreclr doesn't support GetUninitializedObject for shared generic instances")]
+ public void GetUninitializedObject_SharedGenericInstance_NetCore_ThrowsNotSupportedException()
+ {
+ Type canonType = Type.GetType("System.__Canon");
+ Assert.NotNull(canonType);
+ Type sharedGenericInstance = typeof(GenericClass<>).MakeGenericType(canonType);
+ Assert.Throws<NotSupportedException>(() => FormatterServices.GetUninitializedObject(sharedGenericInstance));
+ Assert.Throws<NotSupportedException>(() => FormatterServices.GetSafeUninitializedObject(sharedGenericInstance));
+ }
+
+ [Fact]
+ public void GetUninitializedObject_NullableType_InitializesValue()
+ {
+ int? nullableUnsafe = (int?)FormatterServices.GetUninitializedObject(typeof(int?));
+ Assert.True(nullableUnsafe.HasValue);
+ Assert.Equal(0, nullableUnsafe.Value);
+
+ int? nullableSafe = (int?)FormatterServices.GetSafeUninitializedObject(typeof(int?));
+ Assert.True(nullableSafe.HasValue);
+ Assert.Equal(0, nullableSafe.Value);
+ }
+
+ [Theory]
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "The full .NET Framework doesn't support GetUninitializedObject for subclasses of ContextBoundObject")]
+ public void GetUninitializedObject_ContextBoundObjectSubclass_NetCore_InitializesValue()
+ {
+ Assert.Equal(0, ((ContextBoundSubclass)FormatterServices.GetUninitializedObject(typeof(ContextBoundSubclass))).Value);
+ Assert.Equal(0, ((ContextBoundSubclass)FormatterServices.GetSafeUninitializedObject(typeof(ContextBoundSubclass))).Value);
+ }
+
+ public class ContextBoundSubclass : ContextBoundObject
+ {
+ public int Value { get; set; }
+ }
+
+ [Fact]
+ public void GetUninitializedObject_TypeHasDefaultConstructor_DoesNotRunConstructor()
+ {
+ Assert.Equal(42, new ObjectWithDefaultConstructor().Value);
+ Assert.Equal(0, ((ObjectWithDefaultConstructor)FormatterServices.GetUninitializedObject(typeof(ObjectWithDefaultConstructor))).Value);
+ Assert.Equal(0, ((ObjectWithDefaultConstructor)FormatterServices.GetSafeUninitializedObject(typeof(ObjectWithDefaultConstructor))).Value);
+ }
+
+ private class ObjectWithDefaultConstructor
+ {
+ public ObjectWithDefaultConstructor()
+ {
+ Value = 42;
+ }
+
+ public int Value;
+ }
+
+ [Fact]
+ public void GetUninitializedObject_StaticConstructor_CallsStaticConstructor()
+ {
+ Assert.Equal(2, ((ObjectWithStaticConstructor)FormatterServices.GetUninitializedObject(typeof(ObjectWithStaticConstructor))).GetValue());
+ }
+
+ private class ObjectWithStaticConstructor
+ {
+ private static int s_value = 1;
+
+ static ObjectWithStaticConstructor()
+ {
+ s_value = 2;
+ }
+
+ public int GetValue() => s_value;
+ }
+
+ [Fact]
+ public void GetUninitializedObject_StaticField_InitializesStaticFields()
+ {
+ Assert.Equal(1, ((ObjectWithStaticField)FormatterServices.GetUninitializedObject(typeof(ObjectWithStaticField))).GetValue());
+ }
+
+ private class ObjectWithStaticField
+ {
+ private static int s_value = 1;
+
+ public int GetValue() => s_value;
+ }
+
+ [Fact]
+ public void GetUninitializedObject_StaticConstructorThrows_ThrowsTypeInitializationException()
+ {
+ TypeInitializationException ex = Assert.Throws<TypeInitializationException>(() => FormatterServices.GetUninitializedObject(typeof(StaticConstructorThrows)));
+ Assert.IsType<DivideByZeroException>(ex.InnerException);
+ }
+
+ private class StaticConstructorThrows
+ {
+ static StaticConstructorThrows()
+ {
+ throw new DivideByZeroException();
+ }
+ }
+
+ [Fact]
+ public void GetUninitializedObject_ClassFieldWithDefaultValue_DefaultValueIgnored()
+ {
+ Assert.Equal(42, new ObjectWithStructDefaultField().Value);
+ Assert.Null(((ObjectWithClassDefaultField)FormatterServices.GetUninitializedObject(typeof(ObjectWithClassDefaultField))).Value);
+ Assert.Null(((ObjectWithClassDefaultField)FormatterServices.GetSafeUninitializedObject(typeof(ObjectWithClassDefaultField))).Value);
+ }
+
+ private class ObjectWithClassDefaultField
+ {
+ public string Value = "abc";
+ }
+
+ [Fact]
+ public void GetUninitializedObject_StructFieldWithDefaultValue_DefaultValueIgnored()
+ {
+ Assert.Equal(42, new ObjectWithStructDefaultField().Value);
+ Assert.Equal(0, ((ObjectWithStructDefaultField)FormatterServices.GetUninitializedObject(typeof(ObjectWithStructDefaultField))).Value);
+ Assert.Equal(0, ((ObjectWithStructDefaultField)FormatterServices.GetSafeUninitializedObject(typeof(ObjectWithStructDefaultField))).Value);
+ }
+
+ private class ObjectWithStructDefaultField
{
public int Value = 42;
}
diff --git a/src/System.Runtime.Serialization.Formatters/tests/System.Runtime.Serialization.Formatters.Tests.csproj b/src/System.Runtime.Serialization.Formatters/tests/System.Runtime.Serialization.Formatters.Tests.csproj
index 2566cb693a..f129fdfa88 100644
--- a/src/System.Runtime.Serialization.Formatters/tests/System.Runtime.Serialization.Formatters.Tests.csproj
+++ b/src/System.Runtime.Serialization.Formatters/tests/System.Runtime.Serialization.Formatters.Tests.csproj
@@ -14,11 +14,15 @@
<Compile Include="OptionalFieldAttributeTests.cs" />
<Compile Include="FormatterConverterTests.cs" />
<Compile Include="FormatterServicesTests.cs" />
+ <Compile Include="FormatterServicesTests.Windows.cs" Condition="'$(TargetsWindows)' == 'true'" />
<Compile Include="FormatterTests.cs" />
<Compile Include="SerializationBinderTests.cs" />
<Compile Include="SerializationInfoTests.cs" />
<Compile Include="SerializationTypes.cs" />
<Compile Include="SurrogateSelectorTests.cs" />
+ <Compile Include="$(CommonTestPath)\System\NonRuntimeType.cs">
+ <Link>Common\System\NonRuntimeType.cs</Link>
+ </Compile>
<Compile Include="$(CommonTestPath)\System\Diagnostics\RemoteExecutorTestBase.cs">
<Link>Common\System\Diagnostics\RemoteExecutorTestBase.cs</Link>
</Compile>
diff --git a/src/System.Runtime.Serialization.Json/tests/Configurations.props b/src/System.Runtime.Serialization.Json/tests/Configurations.props
index c398e42e89..fc197b085e 100644
--- a/src/System.Runtime.Serialization.Json/tests/Configurations.props
+++ b/src/System.Runtime.Serialization.Json/tests/Configurations.props
@@ -3,6 +3,7 @@
<PropertyGroup>
<BuildConfigurations>
netstandard;
+ uap;
</BuildConfigurations>
</PropertyGroup>
</Project> \ No newline at end of file
diff --git a/src/System.Runtime.Serialization.Json/tests/DataContractJsonSerializer.cs b/src/System.Runtime.Serialization.Json/tests/DataContractJsonSerializer.cs
index cdba9165ea..35361a0429 100644
--- a/src/System.Runtime.Serialization.Json/tests/DataContractJsonSerializer.cs
+++ b/src/System.Runtime.Serialization.Json/tests/DataContractJsonSerializer.cs
@@ -2393,6 +2393,86 @@ public static partial class DataContractJsonSerializerTests
Assert.Equal(value.Area, actual.Area);
}
+ [Fact]
+ public static void DCJS_DifferentDateTimeStylesForDeserialization()
+ {
+ string dateTimeFormat = "O";
+ var original = new DateTime(2011, 9, 8, 7, 6, 54, 32);
+ var styleToFormatDictionary = new Dictionary<DateTimeStyles, Func<string, string>>()
+ {
+ { DateTimeStyles.AllowLeadingWhite, (str) => str.Replace("2011", " 2011") },
+ { DateTimeStyles.AllowTrailingWhite, (str) => str.Replace("0320000", "0320000 ") },
+ { DateTimeStyles.AllowInnerWhite, (str) => str.Replace(":", " : ") },
+ { DateTimeStyles.AllowWhiteSpaces, (str) => str.Replace(":", " : ") },
+ { DateTimeStyles.AllowLeadingWhite | DateTimeStyles.AllowInnerWhite , (str) => str.Replace("2011", " 2011") },
+ };
+ foreach (var style in styleToFormatDictionary.Keys)
+ {
+ var dcjsSettings = new DataContractJsonSerializerSettings()
+ {
+ DateTimeFormat = new DateTimeFormat(dateTimeFormat, CultureInfo.InvariantCulture)
+ {
+ DateTimeStyles = style
+ },
+ };
+ var actual = SerializeAndDeserialize(original, null, dcjsSettings, null, true);
+ Assert.NotNull(actual);
+ Assert.Equal(original, actual);
+ }
+ }
+
+ [Fact]
+ public static void DCJS_NegativeDateTimeStylesTest_IncorrectDateTimeStyles()
+ {
+ string dateTimeFormat = "f";
+ DateTimeStyles[] dateTimeStyles = { DateTimeStyles.AssumeUniversal | DateTimeStyles.RoundtripKind, (DateTimeStyles)Int32.MaxValue };
+ foreach (var style in dateTimeStyles)
+ {
+ var dcjsSettings = new DataContractJsonSerializerSettings()
+ {
+ DateTimeFormat = new DateTimeFormat(dateTimeFormat, CultureInfo.InvariantCulture)
+ {
+ DateTimeStyles = style
+ },
+ };
+ var original = DateTime.Now;
+ try
+ {
+ SerializeAndDeserialize(original, null, dcjsSettings, null, true);
+ Assert.True(false, $"An exception should be thrown in deserailization of {original.ToString(dateTimeFormat)} with DateTimeStyles={style} but no exception was thrown");
+ }
+ catch (ArgumentException e)
+ {
+ Assert.NotNull(e);
+ }
+ }
+ }
+
+ [Fact]
+ public static void DCJS_RoundtrippingDateTime()
+ {
+ string dateTimeFormat = "o";
+ DateTimeStyles[] dateTimeStyles =
+ {
+ DateTimeStyles.None, DateTimeStyles.RoundtripKind,
+ DateTimeStyles.AllowWhiteSpaces | DateTimeStyles.RoundtripKind
+ };
+ foreach (var style in dateTimeStyles)
+ {
+ var dcjsSettings = new DataContractJsonSerializerSettings()
+ {
+ DateTimeFormat = new DateTimeFormat(dateTimeFormat, CultureInfo.InvariantCulture)
+ {
+ DateTimeStyles = style
+ },
+ };
+ var original = DateTime.Now;
+ var actual = SerializeAndDeserialize(original, null, dcjsSettings, null, true);
+ Assert.NotNull(actual);
+ Assert.Equal(original, actual);
+ }
+ }
+
private static T SerializeAndDeserialize<T>(T value, string baseline, DataContractJsonSerializerSettings settings = null, Func<DataContractJsonSerializer> serializerFactory = null, bool skipStringCompare = false)
{
DataContractJsonSerializer dcjs;
@@ -2426,7 +2506,7 @@ public static partial class DataContractJsonSerializerTests
return deserialized;
}
}
-
+
private static T DeserializeString<T>(string stringToDeserialize, bool shouldReportDeserializationExceptions = true, DataContractJsonSerializerSettings settings = null, Func<DataContractJsonSerializer> serializerFactory = null)
{
DataContractJsonSerializer dcs;
diff --git a/src/System.Runtime.Serialization.Json/tests/ReflectionOnly/Configurations.props b/src/System.Runtime.Serialization.Json/tests/ReflectionOnly/Configurations.props
index 77a4b65bc9..f2e3342d5b 100644
--- a/src/System.Runtime.Serialization.Json/tests/ReflectionOnly/Configurations.props
+++ b/src/System.Runtime.Serialization.Json/tests/ReflectionOnly/Configurations.props
@@ -4,6 +4,7 @@
<BuildConfigurations>
netstandard;
netcoreapp;
+ uap;
</BuildConfigurations>
</PropertyGroup>
</Project> \ No newline at end of file
diff --git a/src/System.Runtime.Serialization.Json/tests/ReflectionOnly/System.Runtime.Serialization.Json.ReflectionOnly.Tests.csproj b/src/System.Runtime.Serialization.Json/tests/ReflectionOnly/System.Runtime.Serialization.Json.ReflectionOnly.Tests.csproj
index 5ffd052ee7..34cef4e5be 100644
--- a/src/System.Runtime.Serialization.Json/tests/ReflectionOnly/System.Runtime.Serialization.Json.ReflectionOnly.Tests.csproj
+++ b/src/System.Runtime.Serialization.Json/tests/ReflectionOnly/System.Runtime.Serialization.Json.ReflectionOnly.Tests.csproj
@@ -9,12 +9,16 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Release|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Release|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'uap-Debug|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'uap-Release|AnyCPU'" />
<ItemGroup>
<Compile Include="$(TestSourceFolder)..\..\..\System.Runtime.Serialization.Xml\tests\Utils.cs" />
<Compile Include="$(TestSourceFolder)..\..\..\System.Runtime.Serialization.Xml\tests\SerializationTypes.cs" />
- <Compile Include="$(TestSourceFolder)..\..\..\System.Runtime.Serialization.Xml\tests\SerializationTypes.CoreCLR.cs" />
<Compile Include="$(TestSourceFolder)..\DataContractJsonSerializer.cs" />
+ </ItemGroup>
+ <ItemGroup Condition="'$(TargetGroup)' != 'uap'">
<Compile Include="$(TestSourceFolder)..\DataContractJsonSerializer.CoreCLR.cs" />
+ <Compile Include="$(TestSourceFolder)..\..\..\System.Runtime.Serialization.Xml\tests\SerializationTypes.CoreCLR.cs" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
</Project> \ No newline at end of file
diff --git a/src/System.Runtime.Serialization.Json/tests/System.Runtime.Serialization.Json.Tests.csproj b/src/System.Runtime.Serialization.Json/tests/System.Runtime.Serialization.Json.Tests.csproj
index 633099e61c..73f42a1866 100644
--- a/src/System.Runtime.Serialization.Json/tests/System.Runtime.Serialization.Json.Tests.csproj
+++ b/src/System.Runtime.Serialization.Json/tests/System.Runtime.Serialization.Json.Tests.csproj
@@ -6,12 +6,16 @@
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Release|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'uap-Debug|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'uap-Release|AnyCPU'" />
+ <ItemGroup Condition="'$(TargetGroup)' != 'uap'">
+ <Compile Include="$(TestSourceFolder)DataContractJsonSerializer.CoreCLR.cs" />
+ <Compile Include="$(TestSourceFolder)..\..\System.Runtime.Serialization.Xml\tests\SerializationTypes.CoreCLR.cs" />
+ </ItemGroup>
<ItemGroup>
<Compile Include="$(TestSourceFolder)..\..\System.Runtime.Serialization.Xml\tests\Utils.cs" />
<Compile Include="$(TestSourceFolder)..\..\System.Runtime.Serialization.Xml\tests\SerializationTypes.cs" />
- <Compile Include="$(TestSourceFolder)..\..\System.Runtime.Serialization.Xml\tests\SerializationTypes.CoreCLR.cs" />
<Compile Include="$(TestSourceFolder)DataContractJsonSerializer.cs" />
- <Compile Include="$(TestSourceFolder)DataContractJsonSerializer.CoreCLR.cs" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
</Project> \ No newline at end of file
diff --git a/src/System.Runtime.Serialization.Xml/tests/Configurations.props b/src/System.Runtime.Serialization.Xml/tests/Configurations.props
index 77a4b65bc9..f2e3342d5b 100644
--- a/src/System.Runtime.Serialization.Xml/tests/Configurations.props
+++ b/src/System.Runtime.Serialization.Xml/tests/Configurations.props
@@ -4,6 +4,7 @@
<BuildConfigurations>
netstandard;
netcoreapp;
+ uap;
</BuildConfigurations>
</PropertyGroup>
</Project> \ No newline at end of file
diff --git a/src/System.Runtime.Serialization.Xml/tests/DataContractSerializer.CoreCLR.cs b/src/System.Runtime.Serialization.Xml/tests/DataContractSerializer.CoreCLR.cs
index f232af85cc..ce148091a0 100644
--- a/src/System.Runtime.Serialization.Xml/tests/DataContractSerializer.CoreCLR.cs
+++ b/src/System.Runtime.Serialization.Xml/tests/DataContractSerializer.CoreCLR.cs
@@ -10,7 +10,6 @@ using Xunit;
public static partial class DataContractSerializerTests
{
-#if FALSE
[Fact]
public static void DCS_DifferentCollectionsOfSameTypeAsKnownTypes()
{
@@ -18,5 +17,4 @@ public static partial class DataContractSerializerTests
(new DataContractSerializer(typeof(TypeWithKnownTypesOfCollectionsWithConflictingXmlName))).WriteObject(new MemoryStream(), new TypeWithKnownTypesOfCollectionsWithConflictingXmlName());
});
}
-#endif
}
diff --git a/src/System.Runtime.Serialization.Xml/tests/DataContractSerializer.cs b/src/System.Runtime.Serialization.Xml/tests/DataContractSerializer.cs
index 1be400bbf5..20b3f84fbf 100644
--- a/src/System.Runtime.Serialization.Xml/tests/DataContractSerializer.cs
+++ b/src/System.Runtime.Serialization.Xml/tests/DataContractSerializer.cs
@@ -23,16 +23,6 @@ using Xunit;
public static partial class DataContractSerializerTests
{
-#if ReflectionOnly
- private static readonly string SerializationOptionSetterName = "set_Option";
-
- static DataContractSerializerTests()
- {
- var method = typeof(DataContractSerializer).GetMethod(SerializationOptionSetterName, BindingFlags.NonPublic | BindingFlags.Static);
- Assert.True(method != null, $"No method named {SerializationOptionSetterName}");
- method.Invoke(null, new object[] { 1 });
- }
-#endif
[Fact]
public static void DCS_DateTimeOffsetAsRoot()
{
@@ -2760,6 +2750,17 @@ public static partial class DataContractSerializerTests
Assert.Equal(value.Area, actual.Area);
}
+ [Fact]
+ public static void DCS_TypeWithDelegate()
+ {
+ var value = new TypeWithDelegate();
+ value.IntProperty = 3;
+ var actual = SerializeAndDeserialize(value, "<TypeWithDelegate xmlns=\"http://schemas.datacontract.org/2004/07/\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:x=\"http://www.w3.org/2001/XMLSchema\"><IntValue i:type=\"x:int\" xmlns=\"\">3</IntValue></TypeWithDelegate>");
+ Assert.NotNull(actual);
+ Assert.Null(actual.DelegateProperty);
+ Assert.Equal(value.IntProperty, actual.IntProperty);
+ }
+
private static T SerializeAndDeserialize<T>(T value, string baseline, DataContractSerializerSettings settings = null, Func<DataContractSerializer> serializerFactory = null, bool skipStringCompare = false)
{
DataContractSerializer dcs;
diff --git a/src/System.Runtime.Serialization.Xml/tests/DataContractSerializer.netcoreapp.cs b/src/System.Runtime.Serialization.Xml/tests/DataContractSerializer.netcoreapp.cs
index 05fe359d13..4d0cb5ff16 100644
--- a/src/System.Runtime.Serialization.Xml/tests/DataContractSerializer.netcoreapp.cs
+++ b/src/System.Runtime.Serialization.Xml/tests/DataContractSerializer.netcoreapp.cs
@@ -4,11 +4,23 @@
using SerializationTypes;
using System.IO;
+using System.Reflection;
using System.Runtime.Serialization;
using Xunit;
public static partial class DataContractSerializerTests
{
+#if ReflectionOnly
+ private static readonly string SerializationOptionSetterName = "set_Option";
+
+ static DataContractSerializerTests()
+ {
+ var method = typeof(DataContractSerializer).GetMethod(SerializationOptionSetterName, BindingFlags.NonPublic | BindingFlags.Static);
+ Assert.True(method != null, $"No method named {SerializationOptionSetterName}");
+ method.Invoke(null, new object[] { 1 });
+ }
+#endif
+
[Fact]
public static void DCS_MyPersonSurrogate()
{
diff --git a/src/System.Runtime.Serialization.Xml/tests/ReflectionOnly/Configurations.props b/src/System.Runtime.Serialization.Xml/tests/ReflectionOnly/Configurations.props
index 77a4b65bc9..f2e3342d5b 100644
--- a/src/System.Runtime.Serialization.Xml/tests/ReflectionOnly/Configurations.props
+++ b/src/System.Runtime.Serialization.Xml/tests/ReflectionOnly/Configurations.props
@@ -4,6 +4,7 @@
<BuildConfigurations>
netstandard;
netcoreapp;
+ uap;
</BuildConfigurations>
</PropertyGroup>
</Project> \ No newline at end of file
diff --git a/src/System.Runtime.Serialization.Xml/tests/ReflectionOnly/System.Runtime.Serialization.Xml.ReflectionOnly.Tests.csproj b/src/System.Runtime.Serialization.Xml/tests/ReflectionOnly/System.Runtime.Serialization.Xml.ReflectionOnly.Tests.csproj
index ebdd1eba76..36a12e20c3 100644
--- a/src/System.Runtime.Serialization.Xml/tests/ReflectionOnly/System.Runtime.Serialization.Xml.ReflectionOnly.Tests.csproj
+++ b/src/System.Runtime.Serialization.Xml/tests/ReflectionOnly/System.Runtime.Serialization.Xml.ReflectionOnly.Tests.csproj
@@ -9,6 +9,8 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Release|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Release|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'uap-Debug|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'uap-Release|AnyCPU'" />
<ItemGroup Condition="'$(TargetGroup)' == 'netcoreapp'">
<Compile Include="$(TestSourceFolder)..\SerializationTypes.netcoreapp.cs" />
<Compile Include="$(TestSourceFolder)..\DataContractSerializer.netcoreapp.cs" />
@@ -17,13 +19,15 @@
<ItemGroup>
<Compile Include="$(TestSourceFolder)..\Utils.cs" />
<Compile Include="$(TestSourceFolder)..\SerializationTypes.cs" />
- <Compile Include="$(TestSourceFolder)..\SerializationTypes.CoreCLR.cs" />
<Compile Include="$(TestSourceFolder)..\DataContractSerializer.cs" />
- <Compile Include="$(TestSourceFolder)..\DataContractSerializer.CoreCLR.cs" />
<Compile Include="$(TestSourceFolder)..\DataContractSerializerTestData.cs" />
<Compile Include="$(TestSourceFolder)..\MyResolver.cs" />
<Compile Include="$(TestSourceFolder)..\XmlDictionaryReaderTests.cs" />
<Compile Include="$(TestSourceFolder)..\XmlDictionaryWriterTest.cs" />
</ItemGroup>
+ <ItemGroup Condition="'$(TargetGroup)' != 'uap'">
+ <Compile Include="$(TestSourceFolder)..\SerializationTypes.CoreCLR.cs" />
+ <Compile Include="$(TestSourceFolder)..\DataContractSerializer.CoreCLR.cs" />
+ </ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
</Project> \ No newline at end of file
diff --git a/src/System.Runtime.Serialization.Xml/tests/SerializationTypes.cs b/src/System.Runtime.Serialization.Xml/tests/SerializationTypes.cs
index 8c85a3635f..53e48bf5a2 100644
--- a/src/System.Runtime.Serialization.Xml/tests/SerializationTypes.cs
+++ b/src/System.Runtime.Serialization.Xml/tests/SerializationTypes.cs
@@ -4181,3 +4181,28 @@ public partial class CompositeTypeForXmlMembersMapping
}
}
}
+
+public delegate void MyDelegate();
+
+[Serializable]
+public class TypeWithDelegate : ISerializable
+{
+ public TypeWithDelegate()
+ {
+
+ }
+
+ public TypeWithDelegate(SerializationInfo info, StreamingContext context)
+ {
+ IntProperty = info.GetInt32("IntValue");
+ }
+
+ public int IntProperty { get; set; }
+
+ public MyDelegate DelegateProperty { get; set; }
+
+ public void GetObjectData(SerializationInfo info, StreamingContext context)
+ {
+ info.AddValue("IntValue", IntProperty);
+ }
+}
diff --git a/src/System.Runtime.Serialization.Xml/tests/System.Runtime.Serialization.Xml.Tests.csproj b/src/System.Runtime.Serialization.Xml/tests/System.Runtime.Serialization.Xml.Tests.csproj
index b603cae800..600d8198db 100644
--- a/src/System.Runtime.Serialization.Xml/tests/System.Runtime.Serialization.Xml.Tests.csproj
+++ b/src/System.Runtime.Serialization.Xml/tests/System.Runtime.Serialization.Xml.Tests.csproj
@@ -8,6 +8,8 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Release|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Release|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'uap-Debug|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'uap-Release|AnyCPU'" />
<ItemGroup Condition="'$(TargetGroup)' == 'netcoreapp'">
<Compile Include="$(TestSourceFolder)SerializationTypes.netcoreapp.cs" />
<Compile Include="$(TestSourceFolder)DataContractSerializer.netcoreapp.cs" />
@@ -16,13 +18,15 @@
<ItemGroup>
<Compile Include="$(TestSourceFolder)Utils.cs" />
<Compile Include="$(TestSourceFolder)SerializationTypes.cs" />
- <Compile Include="$(TestSourceFolder)SerializationTypes.CoreCLR.cs" />
<Compile Include="$(TestSourceFolder)DataContractSerializer.cs" />
- <Compile Include="$(TestSourceFolder)DataContractSerializer.CoreCLR.cs" />
<Compile Include="$(TestSourceFolder)DataContractSerializerTestData.cs" />
<Compile Include="$(TestSourceFolder)MyResolver.cs" />
<Compile Include="$(TestSourceFolder)XmlDictionaryReaderTests.cs" />
<Compile Include="$(TestSourceFolder)XmlDictionaryWriterTest.cs" />
</ItemGroup>
+ <ItemGroup Condition="'$(TargetGroup)' != 'uap'">
+ <Compile Include="$(TestSourceFolder)SerializationTypes.CoreCLR.cs" />
+ <Compile Include="$(TestSourceFolder)DataContractSerializer.CoreCLR.cs" />
+ </ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
</Project> \ No newline at end of file
diff --git a/src/System.Runtime/src/ApiCompatBaseline.uapaot.txt b/src/System.Runtime/src/ApiCompatBaseline.uapaot.txt
index 35068fd994..001d478364 100644
--- a/src/System.Runtime/src/ApiCompatBaseline.uapaot.txt
+++ b/src/System.Runtime/src/ApiCompatBaseline.uapaot.txt
@@ -1,29 +1,8 @@
Compat issues with assembly System.Runtime:
-TypesMustExist : Type 'System.AppContext' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.ArgIterator' does not exist in the implementation but it does exist in the contract.
-CannotRemoveBaseTypeOrInterface : Type 'System.Decimal' does not implement interface 'System.Runtime.Serialization.IDeserializationCallback' in the implementation but it does in the contract.
-MembersMustExist : Member 'System.Decimal.FromOACurrency(System.Int64)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Decimal.Round(System.Decimal)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Decimal.Round(System.Decimal, System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Decimal.Round(System.Decimal, System.Int32, System.MidpointRounding)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Decimal.Round(System.Decimal, System.MidpointRounding)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Decimal.ToOACurrency(System.Decimal)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Exception.add_SerializeObjectState(System.EventHandler<System.Runtime.Serialization.SafeSerializationEventArgs>)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Exception.remove_SerializeObjectState(System.EventHandler<System.Runtime.Serialization.SafeSerializationEventArgs>)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Exception.TargetSite.get()' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.GC.GetAllocatedBytesForCurrentThread()' does not exist in the implementation but it does exist in the contract.
-CannotRemoveBaseTypeOrInterface : Type 'System.IntPtr' does not implement interface 'System.Runtime.Serialization.ISerializable' in the implementation but it does in the contract.
-TypesMustExist : Type 'System.RuntimeArgumentHandle' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.String..ctor(System.SByte*)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.String..ctor(System.SByte*, System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.String..ctor(System.SByte*, System.Int32, System.Int32, System.Text.Encoding)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.String.Concat(System.Object, System.Object, System.Object, System.Object, __arglist)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.String.EndsWith(System.Char)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.String.StartsWith(System.Char)' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.TimeZone' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.TypedReference' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.TypeUnloadedException' does not exist in the implementation but it does exist in the contract.
-CannotRemoveBaseTypeOrInterface : Type 'System.UIntPtr' does not implement interface 'System.Runtime.Serialization.ISerializable' in the implementation but it does in the contract.
MembersMustExist : Member 'System.ComponentModel.DefaultValueAttribute..ctor(System.SByte)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.ComponentModel.DefaultValueAttribute..ctor(System.UInt16)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.ComponentModel.DefaultValueAttribute..ctor(System.UInt32)' does not exist in the implementation but it does exist in the contract.
@@ -34,8 +13,6 @@ CannotRemoveBaseTypeOrInterface : Type 'System.IO.Stream' does not inherit from
MembersMustExist : Member 'System.IO.Stream.CreateWaitHandle()' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.IO.Stream.ObjectInvariant()' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.IO.Stream.Synchronized(System.IO.Stream)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Reflection.FieldInfo.GetValueDirect(System.TypedReference)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Reflection.FieldInfo.SetValueDirect(System.TypedReference, System.Object)' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Runtime.MemoryFailPoint' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.Text.Decoder.GetCharCount(System.Byte*, System.Int32, System.Boolean)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.Text.Decoder.GetChars(System.Byte*, System.Int32, System.Char*, System.Int32, System.Boolean)' does not exist in the implementation but it does exist in the contract.
@@ -52,4 +29,4 @@ MembersMustExist : Member 'System.Text.Encoding.IsMailNewsDisplay.get()' does no
MembersMustExist : Member 'System.Text.Encoding.IsMailNewsSave.get()' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.Text.Encoding.WindowsCodePage.get()' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Text.EncodingInfo' does not exist in the implementation but it does exist in the contract.
-Total Issues: 53
+Total Issues: 30
diff --git a/src/System.Runtime/tests/System/GuidTests.cs b/src/System.Runtime/tests/System/GuidTests.cs
index bd97a452f9..23d4bf2cd4 100644
--- a/src/System.Runtime/tests/System/GuidTests.cs
+++ b/src/System.Runtime/tests/System/GuidTests.cs
@@ -36,11 +36,17 @@ namespace System.Tests
}
[Fact]
- public static void Ctor_ByteArray_Invalid()
+ public static void Ctor_NullByteArray_ThrowsArgumentNullException()
{
- Assert.Throws<ArgumentNullException>("b", () => new Guid((byte[])null)); // Byte array is null
- Assert.Throws<ArgumentException>("b", () => new Guid(new byte[15])); // Byte array is not 16 bytes long
- Assert.Throws<ArgumentException>("b", () => new Guid(new byte[17])); // Byte array is not 16 bytes long
+ Assert.Throws<ArgumentNullException>("b", () => new Guid((byte[])null));
+ }
+
+ [Theory]
+ [InlineData(15)]
+ [InlineData(17)]
+ public static void Ctor_InvalidLengthByteArray_ThrowsArgumentException(int length)
+ {
+ AssertExtensions.Throws<ArgumentException>("b", null, () => new Guid(new byte[length]));
}
[Theory]
@@ -52,6 +58,7 @@ namespace System.Tests
[Theory]
[MemberData(nameof(GuidStrings_Invalid_TestData))]
+ [MemberData(nameof(GuidStrings_TryParseThrows_TestData))]
public static void Ctor_String_Invalid(string value, Type exceptionType)
{
Assert.Throws(exceptionType, () => new Guid(value));
@@ -73,11 +80,16 @@ namespace System.Tests
}
[Fact]
- public static void Ctor_Int_Short_Short_ByteArray_Invalid()
+ public static void Ctor_Int_Short_Short_ByteArray_NullByteArray_ThrowsArgumentNullException()
+ {
+ Assert.Throws<ArgumentNullException>("d", () => new Guid(0, 0, 0, null));
+ }
+
+ [Fact]
+ public static void Ctor_Int_Short_Short_ByteArray_InvalidLengthByteArray_ThrowsArgumentException()
{
- Assert.Throws<ArgumentNullException>("d", () => new Guid(0, 0, 0, null)); // Byte array is null
- Assert.Throws<ArgumentException>("d", () => new Guid(0, 0, 0, new byte[7])); // Byte array is not 8 bytes long
- Assert.Throws<ArgumentException>("d", () => new Guid(0, 0, 0, new byte[9])); // Byte array is not 8 bytes long
+ AssertExtensions.Throws<ArgumentException>("d", null, () => new Guid(0, 0, 0, new byte[7]));
+ AssertExtensions.Throws<ArgumentException>("d", null, () => new Guid(0, 0, 0, new byte[9]));
}
[Fact]
@@ -149,6 +161,25 @@ namespace System.Tests
}
[Theory]
+ [SkipOnTargetFramework(TargetFrameworkMonikers.Netcoreapp, "The coreclr fixed a bug where Guid.TryParse throws a format or overflow exception (https://github.com/dotnet/corefx/issues/6316)")]
+ [MemberData(nameof(GuidStrings_TryParseThrows_TestData))]
+ public static void Parse_Invalid_Netfx(string input, Type exceptionType)
+ {
+ Guid result = default(Guid);
+ Assert.Throws(exceptionType, () => Guid.TryParse(input, out result));
+ Assert.Equal(default(Guid), result);
+
+ Assert.Throws(exceptionType, () => Guid.Parse(input));
+ }
+
+ [Theory]
+ [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "The full .NET framework has a bug where Guid.TryParse throws a format or overflow exception")]
+ public static void Parse_Invalid_NetcoreApp(string input, Type exceptionType)
+ {
+ Parse_Invalid(input, exceptionType);
+ }
+
+ [Theory]
[MemberData(nameof(GuidStrings_Invalid_TestData))]
public static void Parse_Invalid(string input, Type exceptionType)
{
@@ -267,7 +298,7 @@ namespace System.Tests
public static void CompareTo_ValueNotGuid_ThrowsArgumentException()
{
IComparable comparable = s_testGuid;
- Assert.Throws<ArgumentException>("value", () => comparable.CompareTo("a8a110d5-fc49-43c5-bf46-802db8f843ff")); // Value is not a guid
+ AssertExtensions.Throws<ArgumentException>("value", null, () => comparable.CompareTo("a8a110d5-fc49-43c5-bf46-802db8f843ff"));
}
public static IEnumerable<object[]> Equals_TestData()
@@ -447,7 +478,6 @@ namespace System.Tests
yield return new object[] { "{dddddddd-dddd-dddd-dddd-dddddddd)", typeof(FormatException) }; // 8-4-4-4-8 with trailing parenthesis and leading brace
yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) }; // 8-4-4-{2-2-2-2-2-2-2-2} - missing group
- yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) }; // 8-4-4-{2-2-2-2-2-2-2-2} - extra group
yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd", typeof(FormatException) }; // 8-4-4-{2-2-2-2-2-2-2-2} without a trailing brace
yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}", typeof(FormatException) }; // 8-4-4-{2-2-2-2-2-2-2-2} without a trailing brace
@@ -502,54 +532,40 @@ namespace System.Tests
yield return new object[] { "{0xdddddddd, 0xdddd, 0xddddd,{0xdd,0xddd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
// Invalid length of 4th argument
- yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xddddddddd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(OverflowException) };
yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdddddddd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xddd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
// Invalid length of 5th argument
- yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xddddddddd,0xdd,0xddd,0xdd,0xdd,0xdd,0xdd}}", typeof(OverflowException) };
yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdddddddd,0xdd,0xddd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xddd,0xdd,0xddd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
// Invalid length of 6th argument
- yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xddddddddd,0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(OverflowException) };
yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdddddddd,0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xddd,0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
// Invalid length of 7th argument
- yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xddddddddd,0xdd,0xdd,0xdd,0xdd}}", typeof(OverflowException) };
yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdddddddd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xddd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
// Invalid length of 8th argument
- yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd,0xddddddddd,0xdd,0xdd,0xdd}}", typeof(OverflowException) };
yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdddddddd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd,0xddd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
// Invalid length of 9th argument
- yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xddddddddd,0xdd,0xdd}}", typeof(OverflowException) };
- yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd0xdddddddd,0xdd,0xdd}}", typeof(FormatException) };
yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xddd,0xdd,0xdd}}", typeof(FormatException) };
// Invalid length of 10th argument
- yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xddddddddd,0xdd}}", typeof(OverflowException) };
yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdddddddd,0xdd}}", typeof(FormatException) };
yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xddd,0xdd}}", typeof(FormatException) };
// Invalid length of 11th argument
- yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xddddddddd}}", typeof(OverflowException) };
yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdddddddd}}", typeof(FormatException) };
yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xddd}}", typeof(FormatException) };
// Missing a comma
- yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
- yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
- yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
- yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
- yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd0xdd,0xdd,0xdd}}", typeof(FormatException) };
- yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd0xdd,0xdd}}", typeof(FormatException) };
yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd0xdd}}", typeof(FormatException) };
+ // Extra characters at the end
yield return new object[] { "{0xdddddddd,0xdddd,0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}}abc", typeof(FormatException) };
// Missing all components (ordered)
@@ -632,38 +648,71 @@ namespace System.Tests
yield return new object[] { "{0xdddddddd,0xdddd,0xGddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
yield return new object[] { "{0xdddddddd,0xdddd,0xdGdd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
yield return new object[] { "{0xddddddd,0xdddd,0x-dddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
+ yield return new object[] { "{0xddddddd,0xdddd,0xdddd,{0x-dd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
+ yield return new object[] { "{0xdddddddd,0xdddd,0xdddd,{0xdd,0x-dd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
+ yield return new object[] { "{0xdddddddd,0xdddd,0xdddd,{0xdd,0xdd,0x-dd,0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
+ yield return new object[] { "{0xdddddddd,0xdddd,0xdddd,{0xdd,0xdd,0xdd,0x-dd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
+ yield return new object[] { "{0xdddddddd,0xdddd,0xdddd,{0xdd,0xdd,0xdd,0xdd,0x-dd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
+ yield return new object[] { "{0xdddddddd,0xdddd,0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0x-dd,0xdd,0xdd}}", typeof(FormatException) };
+ yield return new object[] { "{0xdddddddd,0xdddd,0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x-dd,0xdd}}", typeof(FormatException) };
+
+ yield return new object[] { "{0xdddddddd,0xdddd,0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x-dd}}", typeof(FormatException) };
+ }
+
+ public static IEnumerable<object[]> GuidStrings_TryParseThrows_TestData()
+ {
+ // 8-4-4-{2-2-2-2-2-2-2-2} - extra group
+ yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
+
+ // Missing a comma
+ yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd0xdddddddd,0xdd,0xdd}}", typeof(FormatException) };
+ yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
+ yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
+ yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
+ yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
+ yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd0xdd,0xdd,0xdd}}", typeof(FormatException) };
+ yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd0xdd,0xdd}}", typeof(FormatException) };
yield return new object[] { "{0xdddddddd,0xdddd,0xdddd,{0xGd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
yield return new object[] { "{0xdddddddd,0xdddd,0xdddd,{0xdG,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
- yield return new object[] { "{0xddddddd,0xdddd,0xdddd,{0x-dd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
yield return new object[] { "{0xdddddddd,0xdddd,0xdddd,{0xdd,0xGd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
yield return new object[] { "{0xdddddddd,0xdddd,0xdddd,{0xdd,0xdG,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
- yield return new object[] { "{0xdddddddd,0xdddd,0xdddd,{0xdd,0x-dd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
yield return new object[] { "{0xdddddddd,0xdddd,0xdddd,{0xdd,0xdd,0xGd,0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
yield return new object[] { "{0xdddddddd,0xdddd,0xdddd,{0xdd,0xdd,0xdG,0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
- yield return new object[] { "{0xdddddddd,0xdddd,0xdddd,{0xdd,0xdd,0x-dd,0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
yield return new object[] { "{0xdddddddd,0xdddd,0xdddd,{0xdd,0xdd,0xdd,0xGd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
yield return new object[] { "{0xdddddddd,0xdddd,0xdddd,{0xdd,0xdd,0xdd,0xdG,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
- yield return new object[] { "{0xdddddddd,0xdddd,0xdddd,{0xdd,0xdd,0xdd,0x-dd,0xdd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
yield return new object[] { "{0xdddddddd,0xdddd,0xdddd,{0xdd,0xdd,0xdd,0xdd,0xGd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
yield return new object[] { "{0xdddddddd,0xdddd,0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdG,0xdd,0xdd,0xdd}}", typeof(FormatException) };
- yield return new object[] { "{0xdddddddd,0xdddd,0xdddd,{0xdd,0xdd,0xdd,0xdd,0x-dd,0xdd,0xdd,0xdd}}", typeof(FormatException) };
yield return new object[] { "{0xdddddddd,0xdddd,0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xGd,0xdd,0xdd}}", typeof(FormatException) };
yield return new object[] { "{0xdddddddd,0xdddd,0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdG,0xdd,0xdd}}", typeof(FormatException) };
- yield return new object[] { "{0xdddddddd,0xdddd,0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0x-dd,0xdd,0xdd}}", typeof(FormatException) };
yield return new object[] { "{0xdddddddd,0xdddd,0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xGd,0xdd}}", typeof(FormatException) };
yield return new object[] { "{0xdddddddd,0xdddd,0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdG,0xdd}}", typeof(FormatException) };
- yield return new object[] { "{0xdddddddd,0xdddd,0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x-dd,0xdd}}", typeof(FormatException) };
-
yield return new object[] { "{0xdddddddd,0xdddd,0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xGd}}", typeof(FormatException) };
yield return new object[] { "{0xdddddddd,0xdddd,0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdG}}", typeof(FormatException) };
- yield return new object[] { "{0xdddddddd,0xdddd,0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x-dd}}", typeof(FormatException) };
+ yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xddddddddd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(OverflowException) };
+ yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xddddddddd,0xdd,0xddd,0xdd,0xdd,0xdd,0xdd}}", typeof(OverflowException) };
+ yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xddddddddd,0xdd,0xdd,0xdd,0xdd,0xdd}}", typeof(OverflowException) };
+
+ // Invalid length of 7th element
+ yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xddddddddd,0xdd,0xdd,0xdd,0xdd}}", typeof(OverflowException) };
+
+ // Invalid length of 8th element
+ yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd,0xddddddddd,0xdd,0xdd,0xdd}}", typeof(OverflowException) };
+
+ // Invalid length of 9th element
+ yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xddddddddd,0xdd,0xdd}}", typeof(OverflowException) };
+
+ // Invalid length of 10th element
+ yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xddddddddd,0xdd}}", typeof(OverflowException) };
+
+ // Invalid length of 11th element
+ yield return new object[] { "{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xddddddddd}}", typeof(OverflowException) };
}
public static IEnumerable<object[]> GuidStrings_Format_Invalid_TestData()
diff --git a/src/System.Runtime/tests/System/HandleTests.cs b/src/System.Runtime/tests/System/HandleTests.cs
index ac911ece06..1f62b02dce 100644
--- a/src/System.Runtime/tests/System/HandleTests.cs
+++ b/src/System.Runtime/tests/System/HandleTests.cs
@@ -10,6 +10,7 @@ using Xunit;
public static class HandleTests
{
+ [Fact]
public static void RuntimeFieldHandleTest()
{
Type t = typeof(Derived);
@@ -18,6 +19,7 @@ public static class HandleTests
Assert.True(h.Value != null);
}
+ [Fact]
public static void RuntimeMethodHandleTest()
{
MethodInfo minfo = typeof( Co6006LateBoundDelegate).GetMethod( "Method1" );
@@ -30,10 +32,21 @@ public static class HandleTests
Assert.True(Co6006LateBoundDelegate.iInvokeCount == 1);
}
+ [Fact]
+ public static void GenericMethodRuntimeMethodHandleTest()
+ {
+ // Make sure uninstantiated generic method has a valid handle
+ MethodInfo mi1 = typeof(Base).GetMethod("GenericMethod");
+ MethodInfo mi2 = (MethodInfo)MethodBase.GetMethodFromHandle(mi1.MethodHandle);
+ Assert.Equal(mi1, mi2);
+ }
+
+ [Fact]
public static void RuntimeTypeHandleTest()
{
RuntimeTypeHandle r1 = typeof(int).TypeHandle;
- Assert.True(r1 != null);
+ RuntimeTypeHandle r2 = typeof(uint).TypeHandle;
+ Assert.NotEqual(r1, r2);
}
private class Base
@@ -47,6 +60,7 @@ public static class HandleTests
public int MyProperty1 { get; private set; }
public int MyProperty2 { private get; set; }
+ public static void GenericMethod<T>() { }
}
private class Derived : Base
diff --git a/src/System.Runtime/tests/System/TypeTests.cs b/src/System.Runtime/tests/System/TypeTests.cs
index 93b1deb21d..1b7b961aa6 100644
--- a/src/System.Runtime/tests/System/TypeTests.cs
+++ b/src/System.Runtime/tests/System/TypeTests.cs
@@ -304,26 +304,11 @@ namespace System.Tests
public string Value = "The Value property.";
}
- static string sourceTestAssemblyPath = Path.Combine(Environment.CurrentDirectory, "TestLoadAssembly.dll");
- static string destTestAssemblyPath = Path.Combine(Environment.CurrentDirectory, "TestLoadAssembly", "TestLoadAssembly.dll");
+ static string s_testAssemblyPath = Path.Combine(Environment.CurrentDirectory, "TestLoadAssembly.dll");
static string testtype = "System.Collections.Generic.Dictionary`2[[Program, Foo], [Program, Foo]]";
- static TypeTestsExtended()
- {
- // Move TestLoadAssembly.dll to subfolder TestLoadAssembly
- try
- {
- Directory.CreateDirectory(Path.GetDirectoryName(destTestAssemblyPath));
- File.Move(sourceTestAssemblyPath, destTestAssemblyPath);
- }
- catch (System.Exception) { }
- finally
- {
- File.Delete(sourceTestAssemblyPath);
- }
- }
private static Func<AssemblyName, Assembly> assemblyloader = (aName) => aName.Name == "TestLoadAssembly" ?
- Assembly.LoadFrom(@".\TestLoadAssembly\TestLoadAssembly.dll") :
+ Assembly.LoadFrom(@".\TestLoadAssembly.dll") :
null;
private static Func<Assembly, String, Boolean, Type> typeloader = (assem, name, ignore) => assem == null ?
Type.GetType(name, false, ignore) :
@@ -337,7 +322,7 @@ namespace System.Tests
string test1 = testtype;
Type t1 = Type.GetType(test1,
(aName) => aName.Name == "Foo" ?
- Assembly.LoadFrom(destTestAssemblyPath) : null,
+ Assembly.LoadFrom(s_testAssemblyPath) : null,
typeloader,
true
);
@@ -365,7 +350,7 @@ namespace System.Tests
Assert.Throws<System.IO.FileNotFoundException>(() =>
Type.GetType(test1,
(aName) => aName.Name == "Foo" ?
- Assembly.LoadFrom(@".\TestLoadAssembly.dll") : null,
+ Assembly.LoadFrom(@".\NoSuchTestLoadAssembly.dll") : null,
typeloader,
true
));
diff --git a/src/System.Security.Cryptography.Algorithms/ref/System.Security.Cryptography.Algorithms.cs b/src/System.Security.Cryptography.Algorithms/ref/System.Security.Cryptography.Algorithms.cs
index 2e3b505bac..af616897f4 100644
--- a/src/System.Security.Cryptography.Algorithms/ref/System.Security.Cryptography.Algorithms.cs
+++ b/src/System.Security.Cryptography.Algorithms/ref/System.Security.Cryptography.Algorithms.cs
@@ -99,7 +99,9 @@ namespace System.Security.Cryptography
{
protected DSA() { }
public static new System.Security.Cryptography.DSA Create() { throw null; }
+ public static System.Security.Cryptography.DSA Create(int keySizeInBits) { throw null; }
public static new System.Security.Cryptography.DSA Create(string algName) { throw null; }
+ public static System.Security.Cryptography.DSA Create(System.Security.Cryptography.DSAParameters parameters) { throw null; }
public abstract byte[] CreateSignature(byte[] rgbHash);
public abstract System.Security.Cryptography.DSAParameters ExportParameters(bool includePrivateParameters);
public override void FromXmlString(string xmlString) { }
@@ -395,7 +397,9 @@ namespace System.Security.Cryptography
public override string KeyExchangeAlgorithm { get { throw null; } }
public override string SignatureAlgorithm { get { throw null; } }
public static new System.Security.Cryptography.RSA Create() { throw null; }
+ public static System.Security.Cryptography.RSA Create(int keySizeInBits) { throw null; }
public static new System.Security.Cryptography.RSA Create(string algName) { throw null; }
+ public static System.Security.Cryptography.RSA Create(System.Security.Cryptography.RSAParameters parameters) { throw null; }
public virtual byte[] Decrypt(byte[] data, System.Security.Cryptography.RSAEncryptionPadding padding) { throw null; }
public virtual byte[] DecryptValue(byte[] rgb) { throw null; }
public virtual byte[] Encrypt(byte[] data, System.Security.Cryptography.RSAEncryptionPadding padding) { throw null; }
diff --git a/src/System.Security.Cryptography.Algorithms/src/System/Security/Cryptography/DSA.cs b/src/System.Security.Cryptography.Algorithms/src/System/Security/Cryptography/DSA.cs
index d68bd709b1..f4e12670ca 100644
--- a/src/System.Security.Cryptography.Algorithms/src/System/Security/Cryptography/DSA.cs
+++ b/src/System.Security.Cryptography.Algorithms/src/System/Security/Cryptography/DSA.cs
@@ -19,6 +19,38 @@ namespace System.Security.Cryptography
return (DSA)CryptoConfig.CreateFromName(algName);
}
+ public static DSA Create(int keySizeInBits)
+ {
+ DSA dsa = Create();
+
+ try
+ {
+ dsa.KeySize = keySizeInBits;
+ return dsa;
+ }
+ catch
+ {
+ dsa.Dispose();
+ throw;
+ }
+ }
+
+ public static DSA Create(DSAParameters parameters)
+ {
+ DSA dsa = Create();
+
+ try
+ {
+ dsa.ImportParameters(parameters);
+ return dsa;
+ }
+ catch
+ {
+ dsa.Dispose();
+ throw;
+ }
+ }
+
// DSA does not encode the algorithm identifier into the signature blob, therefore CreateSignature and
// VerifySignature do not need the HashAlgorithmName value, only SignData and VerifyData do.
abstract public byte[] CreateSignature(byte[] rgbHash);
diff --git a/src/System.Security.Cryptography.Algorithms/src/System/Security/Cryptography/RSA.cs b/src/System.Security.Cryptography.Algorithms/src/System/Security/Cryptography/RSA.cs
index 599ab8cd6d..d14bedea10 100644
--- a/src/System.Security.Cryptography.Algorithms/src/System/Security/Cryptography/RSA.cs
+++ b/src/System.Security.Cryptography.Algorithms/src/System/Security/Cryptography/RSA.cs
@@ -15,6 +15,38 @@ namespace System.Security.Cryptography
return (RSA)CryptoConfig.CreateFromName(algName);
}
+ public static RSA Create(int keySizeInBits)
+ {
+ RSA rsa = Create();
+
+ try
+ {
+ rsa.KeySize = keySizeInBits;
+ return rsa;
+ }
+ catch
+ {
+ rsa.Dispose();
+ throw;
+ }
+ }
+
+ public static RSA Create(RSAParameters parameters)
+ {
+ RSA rsa = Create();
+
+ try
+ {
+ rsa.ImportParameters(parameters);
+ return rsa;
+ }
+ catch
+ {
+ rsa.Dispose();
+ throw;
+ }
+ }
+
public abstract RSAParameters ExportParameters(bool includePrivateParameters);
public abstract void ImportParameters(RSAParameters parameters);
public virtual byte[] Encrypt(byte[] data, RSAEncryptionPadding padding) { throw DerivedClassMustOverride(); }
diff --git a/src/System.Security.Cryptography.Algorithms/tests/DSACreateTests.cs b/src/System.Security.Cryptography.Algorithms/tests/DSACreateTests.cs
new file mode 100644
index 0000000000..c18ba66509
--- /dev/null
+++ b/src/System.Security.Cryptography.Algorithms/tests/DSACreateTests.cs
@@ -0,0 +1,94 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Security.Cryptography.Dsa.Tests;
+using Xunit;
+
+namespace System.Security.Cryptography.Algorithms.Tests
+{
+ public static class DSACreateTests
+ {
+ public static bool SupportsKeyGeneration => DSAFactory.SupportsKeyGeneration;
+ public static bool SupportsFips186_3 => DSAFactory.SupportsFips186_3;
+
+ [ConditionalTheory(nameof(SupportsKeyGeneration))]
+ [InlineData(512)]
+ [InlineData(960)]
+ [InlineData(1024)]
+ public static void CreateWithKeysize(int keySizeInBits)
+ {
+ using (DSA dsa = DSA.Create(keySizeInBits))
+ {
+ Assert.Equal(keySizeInBits, dsa.KeySize);
+
+ DSAParameters parameters = dsa.ExportParameters(false);
+ Assert.Equal(keySizeInBits, parameters.Y.Length << 3);
+ Assert.Equal(keySizeInBits, dsa.KeySize);
+ }
+ }
+
+ [ConditionalTheory(nameof(SupportsKeyGeneration), nameof(SupportsFips186_3))]
+ [InlineData(1088)]
+ public static void CreateWithKeysize_BigKeys(int keySizeInBits)
+ {
+ using (DSA dsa = DSA.Create(keySizeInBits))
+ {
+ Assert.Equal(keySizeInBits, dsa.KeySize);
+
+ DSAParameters parameters = dsa.ExportParameters(false);
+ Assert.Equal(keySizeInBits, parameters.Y.Length << 3);
+ Assert.Equal(keySizeInBits, dsa.KeySize);
+ }
+ }
+
+ [Theory]
+ [InlineData(0)]
+ [InlineData(1)]
+ [InlineData(1023)]
+ public static void CreateWithKeysize_InvalidKeySize(int keySizeInBits)
+ {
+ Assert.Throws<CryptographicException>(() => DSA.Create(keySizeInBits));
+ }
+
+ [Fact]
+ public static void CreateWithParameters_512()
+ {
+ CreateWithParameters(DSATestData.Dsa512Parameters);
+ }
+
+ [Fact]
+ public static void CreateWithParameters_1024()
+ {
+ CreateWithParameters(DSATestData.GetDSA1024Params());
+ }
+
+ [ConditionalFact(nameof(SupportsFips186_3))]
+ public static void CreateWithParameters_2048()
+ {
+ CreateWithParameters(DSATestData.GetDSA2048Params());
+ }
+
+ private static void CreateWithParameters(DSAParameters parameters)
+ {
+ DSAParameters exportedPrivate;
+
+ using (DSA dsa = DSA.Create(parameters))
+ {
+ exportedPrivate = dsa.ExportParameters(true);
+ }
+
+ DSAImportExport.AssertKeyEquals(ref parameters, ref exportedPrivate);
+ }
+
+ [Fact]
+ public static void CreateWithInvalidParameters()
+ {
+ DSAParameters parameters = DSATestData.GetDSA1024Params();
+ parameters.X = null;
+ parameters.Y = null;
+
+ Assert.Throws<ArgumentException>(() => DSA.Create(parameters));
+ }
+ }
+}
diff --git a/src/System.Security.Cryptography.Algorithms/tests/DefaultDSAProvider.cs b/src/System.Security.Cryptography.Algorithms/tests/DefaultDSAProvider.cs
index c2939fd13b..ad29060de8 100644
--- a/src/System.Security.Cryptography.Algorithms/tests/DefaultDSAProvider.cs
+++ b/src/System.Security.Cryptography.Algorithms/tests/DefaultDSAProvider.cs
@@ -13,9 +13,13 @@ namespace System.Security.Cryptography.Dsa.Tests
public DSA Create(int keySize)
{
+#if netcoreapp
+ return DSA.Create(keySize);
+#else
DSA dsa = Create();
dsa.KeySize = keySize;
return dsa;
+#endif
}
public bool SupportsFips186_3
diff --git a/src/System.Security.Cryptography.Algorithms/tests/DefaultRSAProvider.cs b/src/System.Security.Cryptography.Algorithms/tests/DefaultRSAProvider.cs
index b46fcda007..747a09183d 100644
--- a/src/System.Security.Cryptography.Algorithms/tests/DefaultRSAProvider.cs
+++ b/src/System.Security.Cryptography.Algorithms/tests/DefaultRSAProvider.cs
@@ -17,9 +17,13 @@ namespace System.Security.Cryptography.Rsa.Tests
public RSA Create(int keySize)
{
+#if netcoreapp
+ return RSA.Create(keySize);
+#else
RSA rsa = Create();
rsa.KeySize = keySize;
return rsa;
+#endif
}
public bool Supports384PrivateKey
diff --git a/src/System.Security.Cryptography.Algorithms/tests/RSACreateTests.cs b/src/System.Security.Cryptography.Algorithms/tests/RSACreateTests.cs
new file mode 100644
index 0000000000..72e7842a24
--- /dev/null
+++ b/src/System.Security.Cryptography.Algorithms/tests/RSACreateTests.cs
@@ -0,0 +1,81 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Security.Cryptography.Rsa.Tests;
+using Xunit;
+
+namespace System.Security.Cryptography.Algorithms.Tests
+{
+ public static class RSACreateTests
+ {
+ // macOS has the highest smallest key value, 1024.
+ // Windows CNG has the highest step size, 64.
+ // This needs to take both into account.
+ [Theory]
+ [InlineData(1024)]
+ [InlineData(1088)]
+ [InlineData(1152)]
+ [InlineData(2048)]
+ public static void CreateWithKeysize(int keySizeInBits)
+ {
+ using (RSA rsa = RSA.Create(keySizeInBits))
+ {
+ Assert.Equal(keySizeInBits, rsa.KeySize);
+
+ RSAParameters parameters = rsa.ExportParameters(false);
+ Assert.Equal(keySizeInBits, parameters.Modulus.Length << 3);
+ Assert.Equal(keySizeInBits, rsa.KeySize);
+ }
+ }
+
+ [Theory]
+ [InlineData(0)]
+ [InlineData(1)]
+ [InlineData(1023)]
+ [InlineData(1025)]
+ public static void CreateWithKeysize_InvalidKeySize(int keySizeInBits)
+ {
+ Assert.Throws<CryptographicException>(() => RSA.Create(keySizeInBits));
+ }
+
+ [Fact]
+ public static void CreateWithParameters_1032()
+ {
+ CreateWithParameters(TestData.RSA1032Parameters);
+ }
+
+ [Fact]
+ public static void CreateWithParameters_UnusualExponent()
+ {
+ CreateWithParameters(TestData.UnusualExponentParameters);
+ }
+
+ [Fact]
+ public static void CreateWithParameters_2048()
+ {
+ CreateWithParameters(TestData.RSA2048Params);
+ }
+
+ private static void CreateWithParameters(RSAParameters parameters)
+ {
+ RSAParameters exportedPrivate;
+
+ using (RSA rsa = RSA.Create(parameters))
+ {
+ exportedPrivate = rsa.ExportParameters(true);
+ }
+
+ ImportExport.AssertKeyEquals(ref parameters, ref exportedPrivate);
+ }
+
+ [Fact]
+ public static void CreateWithInvalidParameters()
+ {
+ RSAParameters parameters = TestData.RSA1032Parameters;
+ parameters.Exponent = null;
+
+ Assert.Throws<CryptographicException>(() => RSA.Create(parameters));
+ }
+ }
+}
diff --git a/src/System.Security.Cryptography.Algorithms/tests/System.Security.Cryptography.Algorithms.Tests.csproj b/src/System.Security.Cryptography.Algorithms/tests/System.Security.Cryptography.Algorithms.Tests.csproj
index e27b7a5171..9d148ef42a 100644
--- a/src/System.Security.Cryptography.Algorithms/tests/System.Security.Cryptography.Algorithms.Tests.csproj
+++ b/src/System.Security.Cryptography.Algorithms/tests/System.Security.Cryptography.Algorithms.Tests.csproj
@@ -140,6 +140,7 @@
<Compile Include="DefaultDSAProvider.cs" />
<Compile Include="DESProvider.cs" />
<Compile Include="DESTests.cs" />
+ <Compile Include="DSACreateTests.cs" />
<Compile Include="DSASignatureFormatterTests.cs" />
<Compile Include="ECDiffieHellmanPublicKeyTests.cs" />
<Compile Include="PaddingModeTests.cs" />
@@ -147,6 +148,7 @@
<Compile Include="RC2Provider.cs" />
<Compile Include="RC2Tests.cs" />
<Compile Include="RijndaelTests.cs" />
+ <Compile Include="RSACreateTests.cs" />
<Compile Include="RSAKeyExchangeFormatterTests.cs" />
<Compile Include="RSASignatureFormatterTests.cs" />
<Compile Include="Sha1ManagedTests.cs" />
diff --git a/src/System.Security.Cryptography.Cng/tests/System.Security.Cryptography.Cng.Tests.csproj b/src/System.Security.Cryptography.Cng/tests/System.Security.Cryptography.Cng.Tests.csproj
index 02cd1148c4..93e85ea2aa 100644
--- a/src/System.Security.Cryptography.Cng/tests/System.Security.Cryptography.Cng.Tests.csproj
+++ b/src/System.Security.Cryptography.Cng/tests/System.Security.Cryptography.Cng.Tests.csproj
@@ -8,8 +8,6 @@
<!-- Default configurations to help VS understand the configurations -->
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Windows_NT-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Windows_NT-Release|AnyCPU'" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Windows_NT-Debug|AnyCPU'" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Windows_NT-Release|AnyCPU'" />
<ItemGroup>
<Compile Include="CreateTests.cs" />
<Compile Include="HandleTests.cs" />
diff --git a/src/System.Security.Cryptography.Csp/ref/System.Security.Cryptography.Csp.cs b/src/System.Security.Cryptography.Csp/ref/System.Security.Cryptography.Csp.cs
index 90f0cdeb3b..956737dbec 100644
--- a/src/System.Security.Cryptography.Csp/ref/System.Security.Cryptography.Csp.cs
+++ b/src/System.Security.Cryptography.Csp/ref/System.Security.Cryptography.Csp.cs
@@ -223,6 +223,33 @@ namespace System.Security.Cryptography
public override void Initialize() { }
}
[System.ComponentModel.EditorBrowsableAttribute((System.ComponentModel.EditorBrowsableState)(1))]
+ public sealed partial class SHA256CryptoServiceProvider : System.Security.Cryptography.SHA256
+ {
+ public SHA256CryptoServiceProvider() { }
+ protected sealed override void Dispose(bool disposing) { }
+ protected override void HashCore(byte[] array, int ibStart, int cbSize) { }
+ protected override byte[] HashFinal() { throw null; }
+ public override void Initialize() { }
+ }
+ [System.ComponentModel.EditorBrowsableAttribute((System.ComponentModel.EditorBrowsableState)(1))]
+ public sealed partial class SHA384CryptoServiceProvider : System.Security.Cryptography.SHA384
+ {
+ public SHA384CryptoServiceProvider() { }
+ protected sealed override void Dispose(bool disposing) { }
+ protected override void HashCore(byte[] array, int ibStart, int cbSize) { }
+ protected override byte[] HashFinal() { throw null; }
+ public override void Initialize() { }
+ }
+ [System.ComponentModel.EditorBrowsableAttribute((System.ComponentModel.EditorBrowsableState)(1))]
+ public sealed partial class SHA512CryptoServiceProvider : System.Security.Cryptography.SHA512
+ {
+ public SHA512CryptoServiceProvider() { }
+ protected sealed override void Dispose(bool disposing) { }
+ protected override void HashCore(byte[] array, int ibStart, int cbSize) { }
+ protected override byte[] HashFinal() { throw null; }
+ public override void Initialize() { }
+ }
+ [System.ComponentModel.EditorBrowsableAttribute((System.ComponentModel.EditorBrowsableState)(1))]
public sealed partial class TripleDESCryptoServiceProvider : System.Security.Cryptography.TripleDES
{
public TripleDESCryptoServiceProvider() { }
diff --git a/src/System.Security.Cryptography.Csp/src/System.Security.Cryptography.Csp.csproj b/src/System.Security.Cryptography.Csp/src/System.Security.Cryptography.Csp.csproj
index 72b950fa23..8d6eb7bad0 100644
--- a/src/System.Security.Cryptography.Csp/src/System.Security.Cryptography.Csp.csproj
+++ b/src/System.Security.Cryptography.Csp/src/System.Security.Cryptography.Csp.csproj
@@ -32,6 +32,9 @@
<Compile Include="System\Security\Cryptography\RNGCryptoServiceProvider.cs" />
<Compile Include="System\Security\Cryptography\RSACryptoServiceProvider.cs" />
<Compile Include="System\Security\Cryptography\SHA1CryptoServiceProvider.cs" />
+ <Compile Include="System\Security\Cryptography\SHA256CryptoServiceProvider.cs" />
+ <Compile Include="System\Security\Cryptography\SHA384CryptoServiceProvider.cs" />
+ <Compile Include="System\Security\Cryptography\SHA512CryptoServiceProvider.cs" />
<Compile Include="System\Security\Cryptography\SafeCryptoHandles.cs" />
<Compile Include="System\Security\Cryptography\TripleDESCryptoServiceProvider.cs" />
<Compile Include="System\Security\Cryptography\Utils.cs" />
@@ -81,4 +84,4 @@
<Reference Include="System.Threading.Thread" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
-</Project> \ No newline at end of file
+</Project>
diff --git a/src/System.Security.Cryptography.Csp/src/System/Security/Cryptography/SHA1CryptoServiceProvider.cs b/src/System.Security.Cryptography.Csp/src/System/Security/Cryptography/SHA1CryptoServiceProvider.cs
index 8ad5bee4ec..1194fc371c 100644
--- a/src/System.Security.Cryptography.Csp/src/System/Security/Cryptography/SHA1CryptoServiceProvider.cs
+++ b/src/System.Security.Cryptography.Csp/src/System/Security/Cryptography/SHA1CryptoServiceProvider.cs
@@ -6,6 +6,9 @@ using System.ComponentModel;
namespace System.Security.Cryptography
{
+ //
+ // If you change this file, make the corresponding changes to all of the SHA*CryptoServiceProvider.cs files.
+ //
[EditorBrowsable(EditorBrowsableState.Never)]
public sealed class SHA1CryptoServiceProvider : SHA1
{
@@ -41,8 +44,8 @@ namespace System.Security.Cryptography
if (disposing)
{
_incrementalHash.Dispose();
- base.Dispose(disposing);
}
+ base.Dispose(disposing);
}
}
}
diff --git a/src/System.Security.Cryptography.Csp/src/System/Security/Cryptography/SHA256CryptoServiceProvider.cs b/src/System.Security.Cryptography.Csp/src/System/Security/Cryptography/SHA256CryptoServiceProvider.cs
new file mode 100644
index 0000000000..22c8bcc690
--- /dev/null
+++ b/src/System.Security.Cryptography.Csp/src/System/Security/Cryptography/SHA256CryptoServiceProvider.cs
@@ -0,0 +1,51 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.ComponentModel;
+
+namespace System.Security.Cryptography
+{
+ //
+ // If you change this file, make the corresponding changes to all of the SHA*CryptoServiceProvider.cs files.
+ //
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public sealed class SHA256CryptoServiceProvider : SHA256
+ {
+ private const int HashSizeBits = 256;
+ private readonly IncrementalHash _incrementalHash;
+
+ public SHA256CryptoServiceProvider()
+ {
+ _incrementalHash = IncrementalHash.CreateHash(HashAlgorithmName.SHA256);
+ HashSizeValue = HashSizeBits;
+ }
+
+ public override void Initialize()
+ {
+ // Nothing to do here. We expect HashAlgorithm to invoke HashFinal() and Initialize() as a pair. This reflects the
+ // reality that our native crypto providers (e.g. CNG) expose hash finalization and object reinitialization as an atomic operation.
+ }
+
+ protected override void HashCore(byte[] array, int ibStart, int cbSize)
+ {
+ _incrementalHash.AppendData(array, ibStart, cbSize);
+ }
+
+ protected override byte[] HashFinal()
+ {
+ return _incrementalHash.GetHashAndReset();
+ }
+
+ // The Hash and HashSize properties are not overridden since the correct values are returned from base.
+
+ protected sealed override void Dispose(bool disposing)
+ {
+ if (disposing)
+ {
+ _incrementalHash.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+ }
+}
diff --git a/src/System.Security.Cryptography.Csp/src/System/Security/Cryptography/SHA384CryptoServiceProvider.cs b/src/System.Security.Cryptography.Csp/src/System/Security/Cryptography/SHA384CryptoServiceProvider.cs
new file mode 100644
index 0000000000..859fd7e55c
--- /dev/null
+++ b/src/System.Security.Cryptography.Csp/src/System/Security/Cryptography/SHA384CryptoServiceProvider.cs
@@ -0,0 +1,51 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.ComponentModel;
+
+namespace System.Security.Cryptography
+{
+ //
+ // If you change this file, make the corresponding changes to all of the SHA*CryptoServiceProvider.cs files.
+ //
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public sealed class SHA384CryptoServiceProvider : SHA384
+ {
+ private const int HashSizeBits = 384;
+ private readonly IncrementalHash _incrementalHash;
+
+ public SHA384CryptoServiceProvider()
+ {
+ _incrementalHash = IncrementalHash.CreateHash(HashAlgorithmName.SHA384);
+ HashSizeValue = HashSizeBits;
+ }
+
+ public override void Initialize()
+ {
+ // Nothing to do here. We expect HashAlgorithm to invoke HashFinal() and Initialize() as a pair. This reflects the
+ // reality that our native crypto providers (e.g. CNG) expose hash finalization and object reinitialization as an atomic operation.
+ }
+
+ protected override void HashCore(byte[] array, int ibStart, int cbSize)
+ {
+ _incrementalHash.AppendData(array, ibStart, cbSize);
+ }
+
+ protected override byte[] HashFinal()
+ {
+ return _incrementalHash.GetHashAndReset();
+ }
+
+ // The Hash and HashSize properties are not overridden since the correct values are returned from base.
+
+ protected sealed override void Dispose(bool disposing)
+ {
+ if (disposing)
+ {
+ _incrementalHash.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+ }
+}
diff --git a/src/System.Security.Cryptography.Csp/src/System/Security/Cryptography/SHA512CryptoServiceProvider.cs b/src/System.Security.Cryptography.Csp/src/System/Security/Cryptography/SHA512CryptoServiceProvider.cs
new file mode 100644
index 0000000000..2ba7a40bc5
--- /dev/null
+++ b/src/System.Security.Cryptography.Csp/src/System/Security/Cryptography/SHA512CryptoServiceProvider.cs
@@ -0,0 +1,51 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.ComponentModel;
+
+namespace System.Security.Cryptography
+{
+ //
+ // If you change this file, make the corresponding changes to all of the SHA*CryptoServiceProvider.cs files.
+ //
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public sealed class SHA512CryptoServiceProvider : SHA512
+ {
+ private const int HashSizeBits = 512;
+ private readonly IncrementalHash _incrementalHash;
+
+ public SHA512CryptoServiceProvider()
+ {
+ _incrementalHash = IncrementalHash.CreateHash(HashAlgorithmName.SHA512);
+ HashSizeValue = HashSizeBits;
+ }
+
+ public override void Initialize()
+ {
+ // Nothing to do here. We expect HashAlgorithm to invoke HashFinal() and Initialize() as a pair. This reflects the
+ // reality that our native crypto providers (e.g. CNG) expose hash finalization and object reinitialization as an atomic operation.
+ }
+
+ protected override void HashCore(byte[] array, int ibStart, int cbSize)
+ {
+ _incrementalHash.AppendData(array, ibStart, cbSize);
+ }
+
+ protected override byte[] HashFinal()
+ {
+ return _incrementalHash.GetHashAndReset();
+ }
+
+ // The Hash and HashSize properties are not overridden since the correct values are returned from base.
+
+ protected sealed override void Dispose(bool disposing)
+ {
+ if (disposing)
+ {
+ _incrementalHash.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+ }
+}
diff --git a/src/System.Security.Cryptography.Csp/tests/SHA1CryptoServiceProviderTests.cs b/src/System.Security.Cryptography.Csp/tests/SHA1CryptoServiceProviderTests.cs
deleted file mode 100644
index 8c3ad8ede1..0000000000
--- a/src/System.Security.Cryptography.Csp/tests/SHA1CryptoServiceProviderTests.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using Test.Cryptography;
-using Xunit;
-
-namespace System.Security.Cryptography.Encryption.SHA1.Tests
-{
- /// <summary>
- /// Since SHA1CryptoServiceProvider wraps IncrementalHash from Algorithms assembly, we only test minimally here.
- /// </summary>
- public class MD5CryptoServiceProviderTests
- {
- [Fact]
- public void Sha1_Empty()
- {
- Verify(string.Empty, "DA39A3EE5E6B4B0D3255BFEF95601890AFD80709");
- }
-
- [Fact]
- public void Sha1_Rfc3174_2()
- {
- Verify(
- "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
- "84983E441C3BD26EBAAE4AA1F95129E5E54670F1");
- }
-
- private void Verify(string rawText, string expected)
- {
- byte[] inputBytes = ByteUtils.AsciiBytes(rawText);
- byte[] expectedBytes = ByteUtils.HexToByteArray(expected);
-
- using (var hash = new SHA1CryptoServiceProvider())
- {
- Assert.True(hash.HashSize > 0);
- byte[] actual = hash.ComputeHash(inputBytes, 0, inputBytes.Length);
-
- Assert.Equal(expectedBytes, actual);
-
- actual = hash.Hash;
- Assert.Equal(expectedBytes, actual);
- }
- }
- }
-}
diff --git a/src/System.Security.Cryptography.Csp/tests/SHAxCryptoServiceProviderTests.cs b/src/System.Security.Cryptography.Csp/tests/SHAxCryptoServiceProviderTests.cs
new file mode 100644
index 0000000000..d4bbc8615a
--- /dev/null
+++ b/src/System.Security.Cryptography.Csp/tests/SHAxCryptoServiceProviderTests.cs
@@ -0,0 +1,88 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using Test.Cryptography;
+using Xunit;
+
+namespace System.Security.Cryptography.Encryption.SHA1.Tests
+{
+ /// <summary>
+ /// Since SHAxCryptoServiceProvider types wraps IncrementalHash from Algorithms assembly, we only test minimally here.
+ /// </summary>
+ public class SHAxCryptoServiceProviderTests
+ {
+ [Fact]
+ public void Sha1_Empty()
+ {
+ Verify<SHA1CryptoServiceProvider>(string.Empty, "DA39A3EE5E6B4B0D3255BFEF95601890AFD80709");
+ }
+
+ [Fact]
+ public void Sha256_Empty()
+ {
+ Verify<SHA256CryptoServiceProvider>(string.Empty, "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855");
+ }
+
+ [Fact]
+ public void Sha384_Empty()
+ {
+ Verify<SHA384CryptoServiceProvider>(string.Empty, "38B060A751AC96384CD9327EB1B1E36A21FDB71114BE07434C0CC7BF63F6E1DA274EDEBFE76F65FBD51AD2F14898B95B");
+ }
+
+ [Fact]
+ public void Sha512_Empty()
+ {
+ Verify<SHA512CryptoServiceProvider>(string.Empty, "CF83E1357EEFB8BDF1542850D66D8007D620E4050B5715DC83F4A921D36CE9CE47D0D13C5D85F2B0FF8318D2877EEC2F63B931BD47417A81A538327AF927DA3E");
+ }
+
+ [Fact]
+ public void Sha1_Rfc3174_2()
+ {
+ Verify<SHA1CryptoServiceProvider>(
+ "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
+ "84983E441C3BD26EBAAE4AA1F95129E5E54670F1");
+ }
+
+ [Fact]
+ public void Sha256_Rfc3174_2()
+ {
+ Verify<SHA256CryptoServiceProvider>(
+ "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
+ "248D6A61D20638B8E5C026930C3E6039A33CE45964FF2167F6ECEDD419DB06C1");
+ }
+
+ [Fact]
+ public void Sha384_Rfc3174_2()
+ {
+ Verify<SHA384CryptoServiceProvider>(
+ "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
+ "3391FDDDFC8DC7393707A65B1B4709397CF8B1D162AF05ABFE8F450DE5F36BC6B0455A8520BC4E6F5FE95B1FE3C8452B");
+ }
+
+ [Fact]
+ public void Sha512_Rfc3174_2()
+ {
+ Verify<SHA512CryptoServiceProvider>(
+ "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
+ "204A8FC6DDA82F0A0CED7BEB8E08A41657C16EF468B228A8279BE331A703C33596FD15C13B1B07F9AA1D3BEA57789CA031AD85C7A71DD70354EC631238CA3445");
+ }
+
+ private void Verify<T>(string rawText, string expected) where T:HashAlgorithm, new()
+ {
+ byte[] inputBytes = ByteUtils.AsciiBytes(rawText);
+ byte[] expectedBytes = ByteUtils.HexToByteArray(expected);
+
+ using (HashAlgorithm hash = new T())
+ {
+ Assert.True(hash.HashSize > 0);
+ byte[] actual = hash.ComputeHash(inputBytes, 0, inputBytes.Length);
+
+ Assert.Equal(expectedBytes, actual);
+
+ actual = hash.Hash;
+ Assert.Equal(expectedBytes, actual);
+ }
+ }
+ }
+}
diff --git a/src/System.Security.Cryptography.Csp/tests/System.Security.Cryptography.Csp.Tests.csproj b/src/System.Security.Cryptography.Csp/tests/System.Security.Cryptography.Csp.Tests.csproj
index 064ddf9e6d..09296df3f4 100644
--- a/src/System.Security.Cryptography.Csp/tests/System.Security.Cryptography.Csp.Tests.csproj
+++ b/src/System.Security.Cryptography.Csp/tests/System.Security.Cryptography.Csp.Tests.csproj
@@ -53,7 +53,7 @@
<Compile Include="RC2CryptoServiceProviderProvider.cs" />
<Compile Include="RC2CryptoServiceProviderTests.cs" />
<Compile Include="RNGCryptoServiceProviderTests.cs" />
- <Compile Include="SHA1CryptoServiceProviderTests.cs" />
+ <Compile Include="SHAxCryptoServiceProviderTests.cs" />
<Compile Include="TripleDESCryptoServiceProviderTests.cs" />
<Compile Include="$(CommonTestPath)\System\Security\Cryptography\AsymmetricSignatureFormatter.cs">
<Link>CommonTest\System\Security\Cryptography\AsymmetricSignatureFormatter.cs</Link>
@@ -108,4 +108,4 @@
</Compile>
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
-</Project> \ No newline at end of file
+</Project>
diff --git a/src/System.Security.Cryptography.X509Certificates/tests/System.Security.Cryptography.X509Certificates.Tests.csproj b/src/System.Security.Cryptography.X509Certificates/tests/System.Security.Cryptography.X509Certificates.Tests.csproj
index 8a6692e076..3be0000d8d 100644
--- a/src/System.Security.Cryptography.X509Certificates/tests/System.Security.Cryptography.X509Certificates.Tests.csproj
+++ b/src/System.Security.Cryptography.X509Certificates/tests/System.Security.Cryptography.X509Certificates.Tests.csproj
@@ -12,12 +12,6 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Unix-Release|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Windows_NT-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Windows_NT-Release|AnyCPU'" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-OSX-Debug|AnyCPU'" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-OSX-Release|AnyCPU'" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Unix-Debug|AnyCPU'" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Unix-Release|AnyCPU'" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Windows_NT-Debug|AnyCPU'" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Windows_NT-Release|AnyCPU'" />
<ItemGroup>
<Compile Include="Cert.cs" />
<Compile Include="CertTests.cs" />
@@ -79,4 +73,4 @@
<SupplementalTestData Include="$(PackagesDir)System.Security.Cryptography.X509Certificates.TestData\1.0.2-prerelease\content\**\*.*" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
-</Project>
+</Project> \ No newline at end of file
diff --git a/src/System.Security.Cryptography.X509Certificates/tests/X509FilesystemTests.Unix.cs b/src/System.Security.Cryptography.X509Certificates/tests/X509FilesystemTests.Unix.cs
index 912909a082..492fcf0979 100644
--- a/src/System.Security.Cryptography.X509Certificates/tests/X509FilesystemTests.Unix.cs
+++ b/src/System.Security.Cryptography.X509Certificates/tests/X509FilesystemTests.Unix.cs
@@ -15,7 +15,7 @@ namespace System.Security.Cryptography.X509Certificates.Tests
[Collection("X509Filesystem")]
public static class X509FilesystemTests
{
- // #9293: Our Fedora23 and Ubuntu1610 CI machines use NTFS for "tmphome", which causes our filesystem permissions checks to fail.
+ // #9293: Our Fedora and Ubuntu1610 CI machines use NTFS for "tmphome", which causes our filesystem permissions checks to fail.
private static bool IsReliableInCI { get; } = ChainTests.IsReliableInCI;
[ActiveIssue(12833, TestPlatforms.AnyUnix)]
diff --git a/src/System.Security.Cryptography.Xml/src/Configurations.props b/src/System.Security.Cryptography.Xml/src/Configurations.props
index a89c4e6a40..a06d816d25 100644
--- a/src/System.Security.Cryptography.Xml/src/Configurations.props
+++ b/src/System.Security.Cryptography.Xml/src/Configurations.props
@@ -2,7 +2,8 @@
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<BuildConfigurations>
- netcoreapp
+ netcoreapp;
+ uap;
</BuildConfigurations>
</PropertyGroup>
</Project>
diff --git a/src/System.Security.Cryptography.Xml/src/System.Security.Cryptography.Xml.csproj b/src/System.Security.Cryptography.Xml/src/System.Security.Cryptography.Xml.csproj
index 539d54c09e..1ca596304d 100644
--- a/src/System.Security.Cryptography.Xml/src/System.Security.Cryptography.Xml.csproj
+++ b/src/System.Security.Cryptography.Xml/src/System.Security.Cryptography.Xml.csproj
@@ -9,6 +9,8 @@
<!-- Help VS understand available configurations -->
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Release|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'uap-Debug|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'uap-Release|AnyCPU'" />
<ItemGroup Condition="'$(IsPartialFacadeAssembly)' != 'true'">
<Compile Include="System\Security\Cryptography\Xml\AncestralNamespaceContextManager.cs" />
<Compile Include="System\Security\Cryptography\Xml\AttributeSortOrder.cs" />
diff --git a/src/System.Security.Cryptography.Xml/src/System/Security/Cryptography/Xml/EncryptionMethod.cs b/src/System.Security.Cryptography.Xml/src/System/Security/Cryptography/Xml/EncryptionMethod.cs
index 87c95e150b..f0adcaa76c 100644
--- a/src/System.Security.Cryptography.Xml/src/System/Security/Cryptography/Xml/EncryptionMethod.cs
+++ b/src/System.Security.Cryptography.Xml/src/System/Security/Cryptography/Xml/EncryptionMethod.cs
@@ -39,7 +39,7 @@ namespace System.Security.Cryptography.Xml
set
{
if (value <= 0)
- throw new ArgumentOutOfRangeException(SR.Cryptography_Xml_InvalidKeySize);
+ throw new ArgumentOutOfRangeException(nameof(value), SR.Cryptography_Xml_InvalidKeySize);
_keySize = value;
_cachedXml = null;
}
diff --git a/src/System.Security.Cryptography.Xml/src/System/Security/Cryptography/Xml/SignedXml.cs b/src/System.Security.Cryptography.Xml/src/System/Security/Cryptography/Xml/SignedXml.cs
index c43e1e2e98..9c743bb092 100644
--- a/src/System.Security.Cryptography.Xml/src/System/Security/Cryptography/Xml/SignedXml.cs
+++ b/src/System.Security.Cryptography.Xml/src/System/Security/Cryptography/Xml/SignedXml.cs
@@ -790,7 +790,8 @@ namespace System.Security.Cryptography.Xml
private byte[] GetC14NDigest(HashAlgorithm hash)
{
- if (!_bCacheValid || !SignedInfo.CacheValid)
+ bool isKeyedHashAlgorithm = hash is KeyedHashAlgorithm;
+ if (isKeyedHashAlgorithm || !_bCacheValid || !SignedInfo.CacheValid)
{
string baseUri = (_containingDocument == null ? null : _containingDocument.BaseURI);
XmlResolver resolver = (_bResolverSet ? _xmlResolver : new XmlSecureResolver(new XmlUrlResolver(), baseUri));
@@ -810,7 +811,7 @@ namespace System.Security.Cryptography.Xml
SignedXmlDebugLog.LogCanonicalizedOutput(this, c14nMethodTransform);
_digestedSignedInfo = c14nMethodTransform.GetDigestedOutput(hash);
- _bCacheValid = true;
+ _bCacheValid = !isKeyedHashAlgorithm;
}
return _digestedSignedInfo;
}
diff --git a/src/System.Security.Cryptography.Xml/src/System/Security/Cryptography/Xml/XmlLicenseTransform.cs b/src/System.Security.Cryptography.Xml/src/System/Security/Cryptography/Xml/XmlLicenseTransform.cs
index 1bfcb7c3f5..bb1f49201b 100644
--- a/src/System.Security.Cryptography.Xml/src/System/Security/Cryptography/Xml/XmlLicenseTransform.cs
+++ b/src/System.Security.Cryptography.Xml/src/System/Security/Cryptography/Xml/XmlLicenseTransform.cs
@@ -125,7 +125,7 @@ namespace System.Security.Cryptography.Xml
public override object GetOutput(Type type)
{
- if ((type != typeof(XmlDocument)) || (!type.IsSubclassOf(typeof(XmlDocument))))
+ if ((type != typeof(XmlDocument)) && (!type.IsSubclassOf(typeof(XmlDocument))))
throw new ArgumentException(SR.Cryptography_Xml_TransformIncorrectInputType, nameof(type));
return GetOutput();
diff --git a/src/System.Security.Cryptography.Xml/tests/Configurations.props b/src/System.Security.Cryptography.Xml/tests/Configurations.props
index a89c4e6a40..a06d816d25 100644
--- a/src/System.Security.Cryptography.Xml/tests/Configurations.props
+++ b/src/System.Security.Cryptography.Xml/tests/Configurations.props
@@ -2,7 +2,8 @@
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<BuildConfigurations>
- netcoreapp
+ netcoreapp;
+ uap;
</BuildConfigurations>
</PropertyGroup>
</Project>
diff --git a/src/System.Security.Cryptography.Xml/tests/EncryptedXmlTest.cs b/src/System.Security.Cryptography.Xml/tests/EncryptedXmlTest.cs
index 5ae3400cde..847a8e31e2 100644
--- a/src/System.Security.Cryptography.Xml/tests/EncryptedXmlTest.cs
+++ b/src/System.Security.Cryptography.Xml/tests/EncryptedXmlTest.cs
@@ -79,7 +79,7 @@ namespace System.Security.Cryptography.Xml.Tests
XmlDocument doc = new XmlDocument();
doc.PreserveWhitespace = true;
string originalXml;
- using (Stream stream = LoadResourceStream(resourceName))
+ using (Stream stream = TestHelpers.LoadResourceStream(resourceName))
using (StreamReader streamReader = new StreamReader(stream))
{
originalXml = streamReader.ReadToEnd();
@@ -131,7 +131,7 @@ namespace System.Security.Cryptography.Xml.Tests
XmlDocument doc = new XmlDocument();
doc.PreserveWhitespace = true;
- doc.Load(LoadResourceStream("System.Security.Cryptography.Xml.Tests.EncryptedXmlSample2.xml"));
+ doc.Load(TestHelpers.LoadResourceStream("System.Security.Cryptography.Xml.Tests.EncryptedXmlSample2.xml"));
EncryptedXml encxml = new EncryptedXml(doc);
EncryptedData edata = new EncryptedData();
edata.LoadXml(doc.DocumentElement);
@@ -976,22 +976,6 @@ namespace System.Security.Cryptography.Xml.Tests
Assert.Equal("Recipient", exml.Recipient);
}
- private Stream LoadResourceStream(string resourceName)
- {
- return Assembly.GetCallingAssembly().GetManifestResourceStream(resourceName);
- }
-
- private byte[] LoadResource(string resourceName)
- {
- using (Stream stream = Assembly.GetCallingAssembly().GetManifestResourceStream(resourceName))
- {
- long length = stream.Length;
- byte[] buffer = new byte[length];
- stream.Read(buffer, 0, (int)length);
- return buffer;
- }
- }
-
private void CheckEncryptionMethod(object algorithm, string uri)
{
XmlDocument doc = new XmlDocument();
diff --git a/src/System.Security.Cryptography.Xml/tests/EncryptionMethodTests.cs b/src/System.Security.Cryptography.Xml/tests/EncryptionMethodTests.cs
new file mode 100644
index 0000000000..153dc961d7
--- /dev/null
+++ b/src/System.Security.Cryptography.Xml/tests/EncryptionMethodTests.cs
@@ -0,0 +1,167 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Collections.Generic;
+using System.Xml;
+using Xunit;
+
+namespace System.Security.Cryptography.Xml.Tests
+{
+ public class EncryptionMethodTests
+ {
+ [Fact]
+ public void Ctor_Default()
+ {
+ EncryptionMethod method = new EncryptionMethod();
+ Assert.Equal(0, method.KeySize);
+ Assert.Null(method.KeyAlgorithm);
+ }
+
+ [Theory]
+ [InlineData(null)]
+ [InlineData("")]
+ [InlineData("algorithm")]
+ public void Ctor_String(string algorithm)
+ {
+ EncryptionMethod method = new EncryptionMethod(algorithm);
+ Assert.Equal(0, method.KeySize);
+ Assert.Equal(algorithm, method.KeyAlgorithm);
+ }
+
+ [Theory]
+ [InlineData(1)]
+ [InlineData(int.MaxValue)]
+ public void KeySize_Set_SetsValue(int value)
+ {
+ EncryptionMethod method = new EncryptionMethod() { KeySize = value };
+ Assert.Equal(value, method.KeySize);
+ }
+
+ [Theory]
+ [InlineData(-1)]
+ [InlineData(0)]
+ public void KeySize_SetNegativeValue_ThrowsArgumentOutOfRangeException(int value)
+ {
+ EncryptionMethod method = new EncryptionMethod();
+ Assert.Throws<ArgumentOutOfRangeException>("value", () => method.KeySize = value);
+ }
+
+ [Theory]
+ [InlineData(null)]
+ [InlineData("")]
+ [InlineData("algorithm")]
+ public void KeyAlgorithm_Set_SetsValue(string value)
+ {
+ EncryptionMethod method = new EncryptionMethod() { KeyAlgorithm = value };
+ Assert.Equal(value, method.KeyAlgorithm);
+ }
+
+ public static IEnumerable<object[]> GetXml_TestData()
+ {
+ yield return new object[]
+ {
+ new EncryptionMethod(),
+ "<EncryptionMethod xmlns=\"http://www.w3.org/2001/04/xmlenc#\" />"
+ };
+
+ yield return new object[]
+ {
+ new EncryptionMethod("algorithm"),
+ "<EncryptionMethod Algorithm=\"algorithm\" xmlns=\"http://www.w3.org/2001/04/xmlenc#\" />"
+ };
+
+ yield return new object[]
+ {
+ new EncryptionMethod("algorithm") { KeySize = 1 },
+ "<EncryptionMethod Algorithm=\"algorithm\" xmlns=\"http://www.w3.org/2001/04/xmlenc#\"><KeySize>1</KeySize></EncryptionMethod>"
+ };
+ }
+
+ [Theory]
+ [MemberData(nameof(GetXml_TestData))]
+ public void GetXml(EncryptionMethod method, string xml)
+ {
+ XmlElement element = method.GetXml();
+ Assert.Equal(xml, element.OuterXml);
+ }
+
+ [Fact]
+ public void GetXml_FromConstructor_DoesntCacheXml()
+ {
+ EncryptionMethod method = new EncryptionMethod();
+ Assert.NotSame(method.GetXml(), method.GetXml());
+ }
+
+ [Fact]
+ public void GetXml_FromLoadXml_CachesXml()
+ {
+ EncryptionMethod method = new EncryptionMethod();
+
+ XmlDocument document = new XmlDocument();
+ XmlElement value = document.CreateElement("EncryptionMethod");
+
+ method.LoadXml(value);
+ Assert.Same(method.GetXml(), method.GetXml());
+ }
+
+ public static IEnumerable<object[]> LoadXml_TestData()
+ {
+ yield return new object[] { "<name />", null, 0 };
+ yield return new object[] { "<name Algorithm=\"algorithm\"/>", "algorithm", 0 };
+ yield return new object[] { "<name xmlns:enc=\"http://www.w3.org/2001/04/xmlenc#\"><enc:KeySize>1</enc:KeySize></name>", null, 1 };
+ yield return new object[] { "<name xmlns:enc=\"http://www.w3.org/2001/04/xmlenc#\"><enc:KeySize> 1 </enc:KeySize></name>", null, 1 };
+ yield return new object[] { "<name xmlns:enc=\"http://www.w3.org/2001/04/xmlenc#\" Algorithm=\"algorithm\" ><enc:KeySize>1</enc:KeySize></name>", "algorithm", 1 };
+
+ // Custom namespace
+ yield return new object[] { "<name xmlns:enc=\"http://www.w3.org/2001/04/xmlenc#\" enc:Algorithm=\"algorithm\"/>", "algorithm", 0 };
+ yield return new object[] { "<name xmlns:abc=\"http://www.w3.org/2001/04/xmlenc#\" abc:Algorithm=\"algorithm\"/>", "algorithm", 0 };
+ yield return new object[] { "<name xmlns:abc=\"http://www.w3.org/2001/04/xmlenc#\"><abc:KeySize>1</abc:KeySize></name>", null, 1 };
+ yield return new object[] { "<name Algorithm=\"originalAlgorithm\" xmlns:enc=\"http://www.w3.org/2001/04/xmlenc#\" enc:Algorithm=\"namespacedAlgorith\"/>", "originalAlgorithm", 0 };
+ yield return new object[] { "<name xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:Algorithm=\"algorithm\"/>", null, 0 };
+
+
+ yield return new object[] { "<name algorithm=\"algorithm\"/>", null, 0 };
+ yield return new object[] { "<name Algorithm=\"algorithm\"><KeySize>1</KeySize></name>", "algorithm", 0 };
+ yield return new object[] { "<name xmlns:enc=\"http://www.w3.org/2001/04/xmlenc#\"><KeySize>1</KeySize></name>", null, 0 };
+ }
+
+ [Theory]
+ [MemberData(nameof(LoadXml_TestData))]
+ public void LoadXml(string xml, string expectedKeyAlgorithm, int expectedKeySize)
+ {
+ XmlDocument document = new XmlDocument();
+ document.LoadXml(xml);
+ XmlElement value = (XmlElement)document.FirstChild;
+
+ EncryptionMethod method = new EncryptionMethod();
+ method.LoadXml(value);
+
+ Assert.Equal(expectedKeyAlgorithm, method.KeyAlgorithm);
+ Assert.Equal(expectedKeySize, method.KeySize);
+
+ Assert.Same(value, method.GetXml());
+ }
+
+ [Fact]
+ public void LoadXml_NullValue_ThrowsArgumentNullException()
+ {
+ Assert.Throws<ArgumentNullException>("value", () => new EncryptionMethod().LoadXml(null));
+ }
+
+ [Theory]
+ [InlineData("-1", typeof(ArgumentOutOfRangeException))]
+ [InlineData("0", typeof(ArgumentOutOfRangeException))]
+ [InlineData("abc", typeof(FormatException))]
+ [InlineData("2147483648", typeof(OverflowException))]
+ public void LoadXml_NegativeKeySize_Throws(string keySize, Type exceptionType)
+ {
+ XmlDocument document = new XmlDocument();
+ document.LoadXml($"<name xmlns:enc=\"http://www.w3.org/2001/04/xmlenc#\"><enc:KeySize>{keySize}</enc:KeySize></name>");
+ XmlElement value = (XmlElement)document.FirstChild;
+
+ EncryptionMethod method = new EncryptionMethod();
+ Assert.Throws(exceptionType, () => method.LoadXml(value));
+ }
+ }
+} \ No newline at end of file
diff --git a/src/System.Security.Cryptography.Xml/tests/SignedXmlTest.cs b/src/System.Security.Cryptography.Xml/tests/SignedXmlTest.cs
index 07db1ef2b1..d04ad9cdf5 100644
--- a/src/System.Security.Cryptography.Xml/tests/SignedXmlTest.cs
+++ b/src/System.Security.Cryptography.Xml/tests/SignedXmlTest.cs
@@ -1239,10 +1239,8 @@ namespace System.Security.Cryptography.Xml.Tests
Assert.Equal(more256, sign.SignatureMethod);
}
- [Theory]
- [InlineData(false)]
- [InlineData(true)]
- public void VerifyHMAC_SHA256(bool useGoodKey)
+ [Fact]
+ public void VerifyHMAC_SHA256()
{
string xml = "<?xml version=\"1.0\" encoding=\"Windows-1252\"?><foo><Signature xmlns=\"http://www.w3.org/2000/09/xmldsig#\"><SignedInfo><CanonicalizationMethod Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\" /><SignatureMethod Algorithm=\"http://www.w3.org/2001/04/xmldsig-more#hmac-sha256\" /><Reference URI=\"\"><Transforms><Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\" /></Transforms><DigestMethod Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha256\" /><DigestValue>sKG2hDPEHiPrzpd3QA8BZ0eMzMbSEPPMh9QqXgkP7Cs=</DigestValue></Reference></SignedInfo><SignatureValue>Faad3KInJdIpaGcBn5e04Zv080u45fSjAKqrgevdWQw=</SignatureValue></Signature></foo>";
XmlDocument doc = new XmlDocument();
@@ -1252,7 +1250,8 @@ namespace System.Security.Cryptography.Xml.Tests
sign.LoadXml(doc.DocumentElement["Signature"]);
// verify MS-generated signature
- Assert.Equal(useGoodKey, sign.CheckSignature(new HMACSHA256(useGoodKey ? emptyHmacKey : badKey)));
+ Assert.False(sign.CheckSignature(new HMACSHA256(badKey)));
+ Assert.True(sign.CheckSignature(new HMACSHA256(emptyHmacKey)));
}
[Theory, MemberData(nameof(HmacKeys))]
@@ -1272,10 +1271,8 @@ namespace System.Security.Cryptography.Xml.Tests
Assert.Equal(more512, sign.SignatureMethod);
}
- [Theory]
- [InlineData(false)]
- [InlineData(true)]
- public void VerifyHMAC_SHA512(bool useGoodKey)
+ [Fact]
+ public void VerifyHMAC_SHA512()
{
string xml = "<?xml version=\"1.0\" encoding=\"Windows-1252\"?><foo><Signature xmlns=\"http://www.w3.org/2000/09/xmldsig#\"><SignedInfo><CanonicalizationMethod Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\" /><SignatureMethod Algorithm=\"http://www.w3.org/2001/04/xmldsig-more#hmac-sha512\" /><Reference URI=\"\"><Transforms><Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\" /></Transforms><DigestMethod Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha512\" /><DigestValue>2dvMkpTUE8Z76ResJG9pwPpVJNYo7t6s2L02V81xUVJ0oF8yJ7v8CTojjuL76s0iVdBxAOhP80Ambd1YaSkwSw==</DigestValue></Reference></SignedInfo><SignatureValue>wFenihRlm1x5/n0cifdX/TDOYqlbg2oVIbD/gyrAc0Q2hiIUTtwfBIMY5rQhKcErSz6YNoIl8RBQBmww/0rv5g==</SignatureValue></Signature></foo>";
XmlDocument doc = new XmlDocument();
@@ -1285,7 +1282,8 @@ namespace System.Security.Cryptography.Xml.Tests
sign.LoadXml(doc.DocumentElement["Signature"]);
// verify MS-generated signature
- Assert.Equal(useGoodKey, sign.CheckSignature(new HMACSHA512(useGoodKey ? emptyHmacKey : badKey)));
+ Assert.False(sign.CheckSignature(new HMACSHA512(badKey)));
+ Assert.True(sign.CheckSignature(new HMACSHA512(emptyHmacKey)));
}
[Theory, MemberData(nameof(HmacKeys))]
@@ -1308,10 +1306,8 @@ namespace System.Security.Cryptography.Xml.Tests
Assert.Equal(more384, sign.SignatureMethod);
}
- [Theory]
- [InlineData(false)]
- [InlineData(true)]
- public void VerifyHMAC_SHA384(bool useGoodKey)
+ [Fact]
+ public void VerifyHMAC_SHA384()
{
string xml = "<?xml version=\"1.0\" encoding=\"Windows-1252\"?><foo><Signature xmlns=\"http://www.w3.org/2000/09/xmldsig#\"><SignedInfo><CanonicalizationMethod Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\" /><SignatureMethod Algorithm=\"http://www.w3.org/2001/04/xmldsig-more#hmac-sha384\" /><Reference URI=\"\"><Transforms><Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\" /></Transforms><DigestMethod Algorithm=\"SHA384\" /><DigestValue>kH9C0LeZocNVXhjfzpz00M5fc3WJf0QU8gxK4I7pAN7HN602yHo8yYDSlG14b5YS</DigestValue></Reference></SignedInfo><SignatureValue>LgydOfhv8nqpFLFPC+xg3ZnjC8D+V3mpzxv6GOdH1HDdw1r+LH/BFM2U7dntxgf0</SignatureValue></Signature></foo>";
XmlDocument doc = new XmlDocument();
@@ -1321,7 +1317,8 @@ namespace System.Security.Cryptography.Xml.Tests
sign.LoadXml(doc.DocumentElement["Signature"]);
// verify MS-generated signature
- Assert.Equal(useGoodKey, sign.CheckSignature(new HMACSHA384(useGoodKey ? emptyHmacKey : badKey)));
+ Assert.False(sign.CheckSignature(new HMACSHA384(badKey)));
+ Assert.True(sign.CheckSignature(new HMACSHA384(emptyHmacKey)));
}
[Theory, MemberData(nameof(HmacKeys))]
@@ -1344,10 +1341,8 @@ namespace System.Security.Cryptography.Xml.Tests
Assert.Equal(moreHmacMD5, sign.SignatureMethod);
}
- [Theory]
- [InlineData(false)]
- [InlineData(true)]
- public void VerifyHMAC_MD5(bool useGoodKey)
+ [Fact]
+ public void VerifyHMAC_MD5()
{
string xml = @"<?xml version=""1.0"" encoding=""Windows-1252""?><foo><Signature xmlns=""http://www.w3.org/2000/09/xmldsig#""><SignedInfo><CanonicalizationMethod Algorithm=""http://www.w3.org/TR/2001/REC-xml-c14n-20010315"" /><SignatureMethod Algorithm=""http://www.w3.org/2001/04/xmldsig-more#hmac-md5"" /><Reference URI=""""><Transforms><Transform Algorithm=""http://www.w3.org/2000/09/xmldsig#enveloped-signature"" /></Transforms><DigestMethod Algorithm=""MD5"" /><DigestValue>TH7ysbozJWVIWh/1K5bP1w==</DigestValue></Reference></SignedInfo><SignatureValue>tJ6m5YVu1jN1WgKWv3AXFQ==</SignatureValue></Signature></foo>";
XmlDocument doc = new XmlDocument();
@@ -1357,7 +1352,8 @@ namespace System.Security.Cryptography.Xml.Tests
sign.LoadXml(doc.DocumentElement["Signature"]);
// verify MS-generated signature
- Assert.Equal(useGoodKey, sign.CheckSignature(new HMACMD5(useGoodKey ? emptyHmacKey : badKey)));
+ Assert.False(sign.CheckSignature(new HMACMD5(badKey)));
+ Assert.True(sign.CheckSignature(new HMACMD5(emptyHmacKey)));
}
// CVE-2009-0217
diff --git a/src/System.Security.Cryptography.Xml/tests/System.Security.Cryptography.Xml.Tests.csproj b/src/System.Security.Cryptography.Xml/tests/System.Security.Cryptography.Xml.Tests.csproj
index 47b1664dd5..3dfcf3b8ba 100644
--- a/src/System.Security.Cryptography.Xml/tests/System.Security.Cryptography.Xml.Tests.csproj
+++ b/src/System.Security.Cryptography.Xml/tests/System.Security.Cryptography.Xml.Tests.csproj
@@ -16,6 +16,7 @@
<Compile Include="DataReferenceTest.cs" />
<Compile Include="DSAKeyValueTest.cs" />
<Compile Include="EncryptedXmlEqualityComparer.cs" />
+ <Compile Include="EncryptionMethodTests.cs" />
<Compile Include="EncryptedXmlTest.cs" />
<Compile Include="KeyInfoNameTest.cs" />
<Compile Include="KeyInfoNodeTest.cs" />
@@ -48,14 +49,18 @@
<Compile Include="XmlDsigExcC14NWithCommentsTransformTest.cs" />
<Compile Include="XmlDsigXPathTransformTest.cs" />
<Compile Include="XmlDsigXsltTransformTest.cs" />
+ <Compile Include="XmlLicenseEncryptedRef.cs" />
<Compile Include="XmlLicenseTransformTest.cs" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="EncryptedXmlSample3.xml" />
<EmbeddedResource Include="EncryptedXmlSample2.xml" />
<EmbeddedResource Include="EncryptedXmlSample1.xml" />
+ <EmbeddedResource Include="XmlLicenseSample.xml" />
</ItemGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Release|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'uap-Debug|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'uap-Release|AnyCPU'" />
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
</Project> \ No newline at end of file
diff --git a/src/System.Security.Cryptography.Xml/tests/TestHelpers.cs b/src/System.Security.Cryptography.Xml/tests/TestHelpers.cs
index 1308c8fbf4..3256ca503c 100644
--- a/src/System.Security.Cryptography.Xml/tests/TestHelpers.cs
+++ b/src/System.Security.Cryptography.Xml/tests/TestHelpers.cs
@@ -5,6 +5,7 @@
using System;
using System.Collections.Generic;
using System.IO;
+using System.Reflection;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Xml;
@@ -191,5 +192,21 @@ namespace System.Security.Cryptography.Xml.Tests
{
return new X509Certificate2(SamplePfx, "mono");
}
+
+ public static Stream LoadResourceStream(string resourceName)
+ {
+ return Assembly.GetCallingAssembly().GetManifestResourceStream(resourceName);
+ }
+
+ public static byte[] LoadResource(string resourceName)
+ {
+ using (Stream stream = Assembly.GetCallingAssembly().GetManifestResourceStream(resourceName))
+ {
+ long length = stream.Length;
+ byte[] buffer = new byte[length];
+ stream.Read(buffer, 0, (int)length);
+ return buffer;
+ }
+ }
}
}
diff --git a/src/System.Security.Cryptography.Xml/tests/XmlLicenseEncryptedRef.cs b/src/System.Security.Cryptography.Xml/tests/XmlLicenseEncryptedRef.cs
new file mode 100644
index 0000000000..e1e0b75df1
--- /dev/null
+++ b/src/System.Security.Cryptography.Xml/tests/XmlLicenseEncryptedRef.cs
@@ -0,0 +1,213 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Xunit;
+
+namespace System.Security.Cryptography.Xml.Tests
+{
+ public class XmlLicenseEncryptedRef : IRelDecryptor
+ {
+ List<AsymmetricAlgorithm> _asymmetricKeys = new List<AsymmetricAlgorithm>();
+
+ public XmlLicenseEncryptedRef()
+ {
+ }
+
+ public void AddAsymmetricKey(AsymmetricAlgorithm key)
+ {
+ if (key == null)
+ throw new ArgumentNullException(nameof(key));
+
+ _asymmetricKeys.Add(key);
+ }
+
+ private static bool PublicKeysEqual(RSAParameters a, RSAParameters b)
+ {
+ return a.Exponent.SequenceEqual(b.Exponent) && a.Modulus.SequenceEqual(b.Modulus);
+ }
+
+ public Stream Decrypt(EncryptionMethod encryptionMethod, KeyInfo keyInfo, Stream toDecrypt)
+ {
+ Assert.NotNull(encryptionMethod);
+ Assert.NotNull(keyInfo);
+ Assert.NotNull(toDecrypt);
+ Assert.True(encryptionMethod.KeyAlgorithm == EncryptedXml.XmlEncAES128Url
+ || encryptionMethod.KeyAlgorithm == EncryptedXml.XmlEncAES192Url
+ || encryptionMethod.KeyAlgorithm == EncryptedXml.XmlEncAES256Url);
+
+ Assert.Equal(keyInfo.Count, 1);
+
+ byte[] decryptedKey = null;
+
+ foreach (KeyInfoClause clause in keyInfo)
+ {
+ if (clause is KeyInfoEncryptedKey)
+ {
+ KeyInfoEncryptedKey encryptedKeyInfo = clause as KeyInfoEncryptedKey;
+ EncryptedKey encryptedKey = encryptedKeyInfo.EncryptedKey;
+
+ Assert.Equal(encryptedKey.EncryptionMethod.KeyAlgorithm, EncryptedXml.XmlEncRSAOAEPUrl);
+ Assert.Equal(encryptedKey.KeyInfo.Count, 1);
+ Assert.NotEqual(_asymmetricKeys.Count, 0);
+
+ RSAParameters rsaParams = new RSAParameters();
+ RSAParameters rsaInputParams = new RSAParameters();
+
+ foreach (KeyInfoClause rsa in encryptedKey.KeyInfo)
+ {
+ if (rsa is RSAKeyValue)
+ {
+ rsaParams = (rsa as RSAKeyValue).Key.ExportParameters(false);
+ break;
+ }
+ else
+ {
+ Assert.True(false, "Invalid License - MalformedKeyInfoClause");
+ }
+ }
+
+ bool keyMismatch = true;
+ foreach (AsymmetricAlgorithm key in _asymmetricKeys)
+ {
+ RSA rsaKey = key as RSA;
+ Assert.NotNull(rsaKey);
+
+ rsaInputParams = rsaKey.ExportParameters(false);
+
+ if (!PublicKeysEqual(rsaParams, rsaInputParams))
+ {
+ continue;
+ }
+
+ keyMismatch = false;
+
+ // Decrypt session key
+ byte[] encryptedKeyValue = encryptedKey.CipherData.CipherValue;
+
+ if (encryptedKeyValue == null)
+ throw new CryptographicException("MissingKeyCipher");
+
+ decryptedKey = EncryptedXml.DecryptKey(encryptedKeyValue,
+ rsaKey, true);
+ break;
+ }
+
+ if (keyMismatch)
+ {
+ throw new Exception("Invalid License - AsymmetricKeyMismatch");
+ }
+ }
+ else if (clause is KeyInfoName)
+ {
+ Assert.True(false, "This test should not have KeyInfoName clauses");
+ }
+ else
+ {
+ throw new CryptographicException("MalformedKeyInfoClause");
+ }
+
+ break;
+ }
+
+ if (decryptedKey == null)
+ {
+ throw new CryptographicException("KeyDecryptionFailure");
+ }
+
+ using (Aes aes = Aes.Create())
+ {
+ aes.Key = decryptedKey;
+ aes.Padding = PaddingMode.PKCS7;
+ aes.Mode = CipherMode.CBC;
+ return DecryptStream(toDecrypt, aes);
+ }
+ }
+
+ private static Stream DecryptStream(Stream toDecrypt, SymmetricAlgorithm alg)
+ {
+ Assert.NotNull(alg);
+
+ byte[] IV = new byte[alg.BlockSize / 8];
+
+ // Get the IV from the encrypted content.
+ toDecrypt.Read(IV, 0, IV.Length);
+ byte[] encryptedContentValue = new byte[toDecrypt.Length - IV.Length];
+
+ // Get the encrypted content following the IV.
+ toDecrypt.Read(encryptedContentValue, 0, encryptedContentValue.Length);
+
+ var msDecrypt = new MemoryStream();
+
+ using (ICryptoTransform decryptor = alg.CreateDecryptor(alg.Key, IV))
+ using (var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Write, leaveOpen: true))
+ {
+ csDecrypt.Write(encryptedContentValue, 0, encryptedContentValue.Length);
+ }
+
+ msDecrypt.Position = 0;
+ return msDecrypt;
+ }
+
+ public static void Encrypt(Stream toEncrypt, RSA key, out KeyInfo keyInfo, out EncryptionMethod encryptionMethod, out CipherData cipherData)
+ {
+ using (Aes sessionKey = Aes.Create())
+ {
+ sessionKey.KeySize = 128;
+ encryptionMethod = new EncryptionMethod(EncryptedXml.XmlEncAES128Url);
+ keyInfo = new KeyInfo();
+
+ EncryptedKey encKey;
+ keyInfo.AddClause(
+ new KeyInfoEncryptedKey(
+ encKey = new EncryptedKey()
+ {
+ CipherData = new CipherData(EncryptedXml.EncryptKey(sessionKey.Key, key, useOAEP: true)),
+ EncryptionMethod = new EncryptionMethod(EncryptedXml.XmlEncRSAOAEPUrl)
+ }));
+
+ encKey.KeyInfo.AddClause(new RSAKeyValue(key));
+
+ byte[] dataToEncrypt = new byte[toEncrypt.Length];
+ toEncrypt.Read(dataToEncrypt, 0, (int)toEncrypt.Length);
+
+ var encryptedXml = new EncryptedXml();
+ encryptedXml.Padding = PaddingMode.PKCS7;
+ encryptedXml.Mode = CipherMode.CBC;
+ byte[] encryptedData = encryptedXml.EncryptData(dataToEncrypt, sessionKey);
+ cipherData = new CipherData(encryptedData);
+ }
+ }
+
+ [Fact]
+ public static void ItRoundTrips()
+ {
+ byte[] input = new byte[] { 1, 2, 7, 4 };
+ MemoryStream ms = new MemoryStream(input);
+ KeyInfo keyInfo;
+ EncryptionMethod encMethod;
+ CipherData cipherData;
+ using (RSA rsa = RSA.Create())
+ {
+ Encrypt(ms, rsa, out keyInfo, out encMethod, out cipherData);
+
+ XmlLicenseEncryptedRef decr = new XmlLicenseEncryptedRef();
+ decr.AddAsymmetricKey(rsa);
+ using (var encrypted = new MemoryStream(cipherData.CipherValue))
+ using (Stream decrypted = decr.Decrypt(encMethod, keyInfo, encrypted))
+ {
+ byte[] decryptedBytes = new byte[decrypted.Length];
+ decrypted.Read(decryptedBytes, 0, (int)decrypted.Length);
+ Assert.Equal(input, decryptedBytes);
+ }
+ }
+ }
+ }
+}
diff --git a/src/System.Security.Cryptography.Xml/tests/XmlLicenseSample.xml b/src/System.Security.Cryptography.Xml/tests/XmlLicenseSample.xml
new file mode 100644
index 0000000000..2fd844d89f
--- /dev/null
+++ b/src/System.Security.Cryptography.Xml/tests/XmlLicenseSample.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<r:license xmlns:r="urn:mpeg:mpeg21:2003:01-REL-R-NS" licenseId="{00000000-0000-0000-0000-123456789012}">
+ <r:title>Test License</r:title>
+ <r:grant>
+ <r:encryptedGrant>
+ <EncryptionMethod xmlns="http://www.w3.org/2001/04/xmlenc#" Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc" />
+ <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
+ <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
+ <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p" />
+ <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
+ <KeyValue xmlns="http://www.w3.org/2000/09/xmldsig#">
+ <RSAKeyValue>
+ <Modulus>9DC4XNdQJwMRnz5pP2a6U51MHCODRilaIoVXqUPhCUb0lJdGroeqVYT84ZyIVrcarzD7Tqs3aEOIa3rKox0N1bxQpZPqayVQeLAkjLLtzJW/ScRJx3uEDJdgT1JnM1FH0GZTinmEdCUXdLc7+Y/c/qqIkTfbwHbRZjW0bBJyExM=</Modulus>
+ <Exponent>AQAB</Exponent>
+ </RSAKeyValue>
+ </KeyValue>
+ </KeyInfo>
+ <CipherData>
+ <CipherValue>RGVjb2Rl</CipherValue>
+ </CipherData>
+ </EncryptedKey>
+ </KeyInfo>
+ <CipherData xmlns="http://www.w3.org/2001/04/xmlenc#">
+ <CipherValue>RGVjb2Rl</CipherValue>
+ </CipherData>
+ </r:encryptedGrant>
+ </r:grant>
+ <r:issuer>
+ <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
+ <SignedInfo>
+ <CanonicalizationMethod Algorithm="http://www.microsoft.com/xrml/lwc14n" />
+ <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
+ <Reference>
+ <Transforms>
+ <Transform Algorithm="urn:mpeg:mpeg21:2003:01-REL-R-NS:licenseTransform" />
+ <Transform Algorithm="http://www.microsoft.com/xrml/lwc14n" />
+ </Transforms>
+ <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
+ <DigestValue>xByYONj0RUGSJ5kQWQO3KzqFZps=</DigestValue>
+ </Reference>
+ </SignedInfo>
+ <SignatureValue>qJrCl/NkSZ66MqR/vzDHVDWT6N75UTjPmEz6wOYH1uEWQsUW4IrBxrdUxUicadFVdobxmQZRO/kazhWzSZjLGOhu+cbwgYJ+fnAAz699ZA7ObqNhQgtSKFA54hl/SbedygHJbFRIHeWOCm5P6WagodJ23258T1g1geaYtIqSdD8L8WRB/hQc8WMcNzSPYp0Dy8E3GDyDeiyK0WWnfF814H4RONYZkxwPfU7zy3jngABZQaFKoCnt2PFjCKfLiSrZgEwEgfnW+GmtCrL8W+Rkis+AV9LvPQpHg/tn4WdG4PW+9oGvxriMWAR30V8hAooiEOQ0yUBe+BlvBBvWWOZ/Aw==</SignatureValue>
+ <KeyInfo>
+ <KeyValue>
+ <RSAKeyValue>
+ <Modulus>9DC4XNdQJwMRnz5pP2a6U51MHCODRilaIoVXqUPhCUb0lJdGroeqVYT84ZyIVrcarzD7Tqs3aEOIa3rKox0N1bxQpZPqayVQeLAkjLLtzJW/ScRJx3uEDJdgT1JnM1FH0GZTinmEdCUXdLc7+Y/c/qqIkTfbwHbRZjW0bBJyExM=</Modulus>
+ <Exponent>AQAB</Exponent>
+ </RSAKeyValue>
+ </KeyValue>
+ </KeyInfo>
+ </Signature>
+ <r:details>
+ <r:timeOfIssue>2017-01-71T00:00:00Z</r:timeOfIssue>
+ </r:details>
+ </r:issuer>
+</r:license>
diff --git a/src/System.Security.Cryptography.Xml/tests/XmlLicenseTransformTest.cs b/src/System.Security.Cryptography.Xml/tests/XmlLicenseTransformTest.cs
index f7132de1a9..9fdca09a8c 100644
--- a/src/System.Security.Cryptography.Xml/tests/XmlLicenseTransformTest.cs
+++ b/src/System.Security.Cryptography.Xml/tests/XmlLicenseTransformTest.cs
@@ -15,6 +15,7 @@
// Licensed to the .NET Foundation under one or more agreements.
// See the LICENSE file in the project root for more information.
+using System.IO;
using System.Xml;
using Xunit;
@@ -28,8 +29,25 @@ namespace System.Security.Cryptography.Xml.Tests
}
}
+ public class DummyDecryptor : IRelDecryptor
+ {
+ public string ContentToReturn { get; set; }
+
+ public Stream Decrypt(EncryptionMethod encryptionMethod, KeyInfo keyInfo, Stream toDecrypt)
+ {
+ MemoryStream stream = new MemoryStream();
+ StreamWriter writer = new StreamWriter(stream);
+ writer.Write(ContentToReturn);
+ writer.Flush();
+ stream.Position = 0;
+ return stream;
+ }
+ }
+
public class XmlLicenseTransformTest
{
+ public const string LicenseTransformNsUrl = "urn:mpeg:mpeg21:2003:01-REL-R-NS";
+ public const string LicenseTransformUrl = LicenseTransformNsUrl + ":licenseTransform";
private UnprotectedXmlLicenseTransform transform;
public XmlLicenseTransformTest()
@@ -40,8 +58,7 @@ namespace System.Security.Cryptography.Xml.Tests
[Fact] // ctor ()
public void Constructor1()
{
- Assert.Equal("urn:mpeg:mpeg21:2003:01-REL-R-NS:licenseTransform",
- transform.Algorithm);
+ Assert.Equal(LicenseTransformUrl, transform.Algorithm);
Assert.Null(transform.Decryptor);
Type[] input = transform.InputTypes;
@@ -83,6 +100,245 @@ namespace System.Security.Cryptography.Xml.Tests
transform = new UnprotectedXmlLicenseTransform();
Assert.NotNull(transform.OutputTypes[0]);
}
+
+ [Fact]
+ public void Context_Null()
+ {
+ XmlDocument doc = GetDocumentFromResource("System.Security.Cryptography.Xml.Tests.XmlLicenseSample.xml");
+
+ Assert.Throws<CryptographicException>(() => transform.LoadInput(doc));
+ }
+
+ [Fact]
+ public void NoLicenseXml()
+ {
+ XmlDocument doc = new XmlDocument();
+ doc.LoadXml("<root />");
+ transform.Context = doc.DocumentElement;
+
+ Assert.Throws<CryptographicException>(() => transform.LoadInput(doc));
+ }
+
+ [Fact]
+ public void Decryptor_Null()
+ {
+ XmlDocument doc = GetDocumentFromResource("System.Security.Cryptography.Xml.Tests.XmlLicenseSample.xml");
+
+ XmlNamespaceManager namespaceManager = new XmlNamespaceManager(doc.NameTable);
+ namespaceManager.AddNamespace("r", "urn:mpeg:mpeg21:2003:01-REL-R-NS");
+ transform.Context = doc.DocumentElement.SelectSingleNode("//r:issuer[1]", namespaceManager) as XmlElement;
+
+ Assert.Throws<CryptographicException>(() => transform.LoadInput(doc));
+ }
+
+ [Fact]
+ public void ValidLicense()
+ {
+ XmlDocument doc = GetDocumentFromResource("System.Security.Cryptography.Xml.Tests.XmlLicenseSample.xml");
+
+ XmlNamespaceManager namespaceManager = new XmlNamespaceManager(doc.NameTable);
+ namespaceManager.AddNamespace("r", "urn:mpeg:mpeg21:2003:01-REL-R-NS");
+ transform.Context = doc.DocumentElement.SelectSingleNode("//r:issuer[1]", namespaceManager) as XmlElement;
+ DummyDecryptor decryptor = new DummyDecryptor { ContentToReturn = "Encrypted Content" };
+ transform.Decryptor = decryptor;
+ transform.LoadInput(doc);
+ XmlDocument output = transform.GetOutput(typeof(XmlDocument)) as XmlDocument;
+
+ string decodedXml = @"<r:license xmlns:r=""urn:mpeg:mpeg21:2003:01-REL-R-NS"" licenseId=""{00000000-0000-0000-0000-123456789012}"">";
+ decodedXml += "<r:title>Test License</r:title><r:grant>Encrypted Content</r:grant>";
+ decodedXml += "<r:issuer><r:details><r:timeOfIssue>2017-01-71T00:00:00Z</r:timeOfIssue></r:details></r:issuer></r:license>";
+ Assert.NotNull(output);
+ Assert.Equal(decodedXml, output.OuterXml);
+ }
+
+ [Fact]
+ public void GetOutput_InvalidType()
+ {
+ Assert.Throws<ArgumentException>(() => transform.GetOutput(typeof(string)));
+ }
+
+ [Fact]
+ public static void ItDecryptsLicense()
+ {
+ using (var key = RSA.Create())
+ {
+ string expected;
+ string encryptedLicenseWithGrants = GenerateLicenseXmlWithEncryptedGrants(key, out expected);
+
+ Assert.Contains("hello", expected);
+ Assert.DoesNotContain("hello", encryptedLicenseWithGrants);
+
+ XmlNamespaceManager nsManager;
+ XmlDocument toDecrypt = LoadXmlWithLicenseNs(encryptedLicenseWithGrants, out nsManager);
+
+ var decryptor = new XmlLicenseEncryptedRef();
+ var transform = new XmlLicenseTransform()
+ {
+ Decryptor = decryptor,
+ Context = FindLicenseTransformContext(toDecrypt, nsManager)
+ };
+
+ decryptor.AddAsymmetricKey(key);
+
+ // Context is the input for this transform, argument is always ignored
+ transform.LoadInput(null);
+
+ XmlDocument decryptedDoc = transform.GetOutput() as XmlDocument;
+ Assert.NotNull(decryptedDoc);
+ string decrypted = decryptedDoc.OuterXml;
+ Assert.Equal(expected, decrypted);
+ }
+ }
+
+ private XmlDocument GetDocumentFromResource(string resourceName)
+ {
+ XmlDocument doc = new XmlDocument();
+ using (Stream stream = TestHelpers.LoadResourceStream(resourceName))
+ using (StreamReader streamReader = new StreamReader(stream))
+ {
+ string originalXml = streamReader.ReadToEnd();
+ doc.LoadXml(originalXml);
+ }
+
+ return doc;
+ }
+
+ private static string GenerateLicenseXmlWithEncryptedGrants(RSA key, out string plainTextLicense)
+ {
+ plainTextLicense = @"<r:license xmlns:r=""urn:mpeg:mpeg21:2003:01-REL-R-NS"">
+ <r:title>Test License</r:title>
+ <r:grant>
+ <r:forAll varName=""licensor"" />
+ <r:forAll varName=""property"" />
+ <r:forAll varName=""p0"">
+ <r:propertyPossessor>
+ <r:propertyAbstract varRef=""property"" />
+ </r:propertyPossessor>
+ </r:forAll>
+ <r:keyHolder varRef=""licensor"" />
+ <r:issue />
+ <r:grant>
+ <r:principal varRef=""p0"" />
+ <x:bar xmlns:x=""urn:foo"" />
+ <r:digitalResource>
+ <testItem>hello</testItem>
+ </r:digitalResource>
+ <renderer xmlns=""urn:mpeg:mpeg21:2003:01-REL-MX-NS"">
+ <mx:wildcard xmlns:mx=""urn:mpeg:mpeg21:2003:01-REL-MX-NS"">
+ <r:anXmlExpression>some-xpath-expression</r:anXmlExpression>
+ </mx:wildcard>
+ <mx:wildcard xmlns:mx=""urn:mpeg:mpeg21:2003:01-REL-MX-NS"">
+ <r:anXmlExpression>some-other-xpath-expression</r:anXmlExpression>
+ </mx:wildcard>
+ </renderer>
+ </r:grant>
+ <validityIntervalFloating xmlns=""urn:mpeg:mpeg21:2003:01-REL-SX-NS"">
+ <sx:duration xmlns:sx=""urn:mpeg:mpeg21:2003:01-REL-SX-NS"">P2D</sx:duration>
+ </validityIntervalFloating>
+ </r:grant>
+ <r:grant>
+ <r:possessProperty />
+ <emailName xmlns=""urn:mpeg:mpeg21:2003:01-REL-SX-NS"">test@test</emailName>
+ </r:grant>
+ <r:issuer xmlns:r=""urn:mpeg:mpeg21:2003:01-REL-R-NS"">
+ <r:details>
+ <r:timeOfIssue>2099-11-11T11:11:11Z</r:timeOfIssue>
+ </r:details>
+ </r:issuer>
+</r:license>".Replace("\r\n", "\n");
+
+ XmlNamespaceManager nsManager;
+ XmlDocument doc = LoadXmlWithLicenseNs(plainTextLicense, out nsManager);
+
+ EncryptLicense(FindLicenseTransformContext(doc, nsManager), key);
+
+ return doc.OuterXml;
+ }
+
+ private static XmlElement FindLicenseTransformContext(XmlDocument doc, XmlNamespaceManager nsManager)
+ {
+ XmlNodeList issuerList = doc.SelectNodes("//r:issuer", nsManager);
+ return issuerList[0] as XmlElement;
+ }
+
+ private static XmlDocument LoadXmlWithLicenseNs(string xml, out XmlNamespaceManager nsManager)
+ {
+ XmlDocument doc = new XmlDocument();
+ doc.PreserveWhitespace = true;
+ nsManager = new XmlNamespaceManager(doc.NameTable);
+ nsManager.AddNamespace("r", LicenseTransformNsUrl);
+ doc.LoadXml(xml);
+ return doc;
+ }
+
+ private static void EncryptGrant(XmlNode grant, RSA key, XmlNamespaceManager nsMgr)
+ {
+ using (var ms = new MemoryStream())
+ using (var sw = new StreamWriter(ms))
+ {
+ sw.Write(grant.InnerXml);
+ sw.Flush();
+ ms.Position = 0;
+
+ KeyInfo keyInfo;
+ EncryptionMethod encryptionMethod;
+ CipherData cipherData;
+ XmlLicenseEncryptedRef.Encrypt(ms, key, out keyInfo, out encryptionMethod, out cipherData);
+ grant.RemoveAll();
+ XmlDocument doc = grant.OwnerDocument;
+ XmlElement encryptedGrant = doc.CreateElement("encryptedGrant", LicenseTransformNsUrl);
+ grant.AppendChild(encryptedGrant);
+
+ encryptedGrant.AppendChild(doc.ImportNode(keyInfo.GetXml(), true));
+ encryptedGrant.AppendChild(doc.ImportNode(encryptionMethod.GetXml(), true));
+ encryptedGrant.AppendChild(doc.ImportNode(cipherData.GetXml(), true));
+ }
+ }
+
+ private static void EncryptLicense(XmlElement context, RSA key)
+ {
+ XmlDocument doc = context.OwnerDocument;
+
+ var nsMgr = new XmlNamespaceManager(doc.NameTable);
+ nsMgr.AddNamespace("dsig", SignedXml.XmlDsigNamespaceUrl);
+ nsMgr.AddNamespace("enc", EncryptedXml.XmlEncNamespaceUrl);
+ nsMgr.AddNamespace("r", LicenseTransformNsUrl);
+
+ XmlElement currentIssuerContext = context.SelectSingleNode("ancestor-or-self::r:issuer[1]", nsMgr) as XmlElement;
+ Assert.NotEqual(currentIssuerContext, null);
+
+ XmlElement signatureNode = currentIssuerContext.SelectSingleNode("descendant-or-self::dsig:Signature[1]", nsMgr) as XmlElement;
+ if (signatureNode != null)
+ {
+ signatureNode.ParentNode.RemoveChild(signatureNode);
+ }
+
+ XmlElement currentLicenseContext = currentIssuerContext.SelectSingleNode("ancestor-or-self::r:license[1]", nsMgr) as XmlElement;
+ Assert.NotEqual(currentLicenseContext, null);
+
+ XmlNodeList issuerList = currentLicenseContext.SelectNodes("descendant-or-self::r:license[1]/r:issuer", nsMgr);
+ for (int i = 0; i < issuerList.Count; i++)
+ {
+ XmlNode issuer = issuerList[i];
+ if (issuer == currentIssuerContext)
+ {
+ continue;
+ }
+
+ if (issuer.LocalName == "issuer"
+ && issuer.NamespaceURI == LicenseTransformNsUrl)
+ {
+ issuer.ParentNode.RemoveChild(issuer);
+ }
+ }
+
+ XmlNodeList encryptedGrantList = currentLicenseContext.SelectNodes("/r:license/r:grant", nsMgr);
+
+ for (int i = 0; i < encryptedGrantList.Count; i++)
+ {
+ EncryptGrant(encryptedGrantList[i], key, nsMgr);
+ }
+ }
}
}
diff --git a/src/System.Security.SecureString/dir.props b/src/System.Security.SecureString/dir.props
index bfbc5bd9e0..83a5a15522 100644
--- a/src/System.Security.SecureString/dir.props
+++ b/src/System.Security.SecureString/dir.props
@@ -4,5 +4,6 @@
<PropertyGroup>
<AssemblyVersion>4.1.0.0</AssemblyVersion>
<IsNETCoreApp>true</IsNETCoreApp>
+ <IsUAP>true</IsUAP>
</PropertyGroup>
</Project> \ No newline at end of file
diff --git a/src/System.Text.Encoding/tests/Performance/Perf.Encoding.cs b/src/System.Text.Encoding/tests/Performance/Perf.Encoding.cs
index d83314d179..32a9fcdd6e 100644
--- a/src/System.Text.Encoding/tests/Performance/Perf.Encoding.cs
+++ b/src/System.Text.Encoding/tests/Performance/Perf.Encoding.cs
@@ -13,7 +13,7 @@ namespace System.Text.Tests
{
public static IEnumerable<object[]> EncodingSizeData()
{
- int[] sizes = new int[] { 10000, 1000000 };
+ int[] sizes = new int[] { 16, 32, 64, 128, 256, 512, 10000, 1000000 };
string[] encs = new string[] { "utf-8", "ascii" };
foreach (int size in sizes)
foreach (string enc in encs)
diff --git a/src/System.Threading.Tasks.Dataflow/src/Base/DataflowBlock.cs b/src/System.Threading.Tasks.Dataflow/src/Base/DataflowBlock.cs
index 08e6b7ba7d..447df5f921 100644
--- a/src/System.Threading.Tasks.Dataflow/src/Base/DataflowBlock.cs
+++ b/src/System.Threading.Tasks.Dataflow/src/Base/DataflowBlock.cs
@@ -15,12 +15,12 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Diagnostics.Contracts;
-using System.Linq;
using System.Runtime.CompilerServices;
-using System.Runtime.ExceptionServices;
-using System.Security;
using System.Threading.Tasks.Dataflow.Internal;
+
+#if USE_INTERNAL_THREADING
using System.Threading.Tasks.Dataflow.Internal.Threading;
+#endif
namespace System.Threading.Tasks.Dataflow
{
@@ -132,35 +132,7 @@ namespace System.Threading.Tasks.Dataflow
{
Debug.Assert(_userProvidedPredicate != null, "User-provided predicate is required.");
- return _userProvidedPredicate(item); // avoid state object allocation if execution context isn't needed
- }
-
- /// <summary>Manually closes over state necessary in FilteredLinkPropagator.</summary>
- private sealed class PredicateContextState
- {
- /// <summary>The input to be filtered.</summary>
- internal readonly T Input;
- /// <summary>The predicate function.</summary>
- internal readonly Predicate<T> Predicate;
- /// <summary>The result of the filtering operation.</summary>
- internal bool Output;
-
- /// <summary>Initializes the predicate state.</summary>
- /// <param name="input">The input to be filtered.</param>
- /// <param name="predicate">The predicate function.</param>
- internal PredicateContextState(T input, Predicate<T> predicate)
- {
- Debug.Assert(predicate != null, "A predicate with which to filter is required.");
- this.Input = input;
- this.Predicate = predicate;
- }
-
- /// <summary>Runs the predicate function over the input and stores the result into the output.</summary>
- internal void Run()
- {
- Debug.Assert(Predicate != null, "Non-null predicate required");
- Output = Predicate(Input);
- }
+ return _userProvidedPredicate(item);
}
/// <include file='XmlDocs/CommonXmlDocComments.xml' path='CommonXmlDocComments/Targets/Member[@name="OfferMessage"]/*' />
diff --git a/src/System.Threading.Tasks.Dataflow/src/Internal/Common.cs b/src/System.Threading.Tasks.Dataflow/src/Internal/Common.cs
index ff6ae30b67..ec695b30cf 100644
--- a/src/System.Threading.Tasks.Dataflow/src/Internal/Common.cs
+++ b/src/System.Threading.Tasks.Dataflow/src/Internal/Common.cs
@@ -14,10 +14,12 @@
using System.Collections.Generic;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
-using System.Security;
using System.Collections;
using System.Runtime.ExceptionServices;
+
+#if USE_INTERNAL_THREADING
using System.Threading.Tasks.Dataflow.Internal.Threading;
+#endif
namespace System.Threading.Tasks.Dataflow.Internal
{
diff --git a/src/System.Threading.Tasks.Dataflow/src/Internal/ProducerConsumerQueues.cs b/src/System.Threading.Tasks.Dataflow/src/Internal/ProducerConsumerQueues.cs
index 83e85d92f8..d14fd60cec 100644
--- a/src/System.Threading.Tasks.Dataflow/src/Internal/ProducerConsumerQueues.cs
+++ b/src/System.Threading.Tasks.Dataflow/src/Internal/ProducerConsumerQueues.cs
@@ -24,10 +24,10 @@
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
using System.Collections;
-#if CONCURRENT_COLLECTIONS
-using System.Collections.Concurrent;
-#else
+#if USE_INTERNAL_CONCURRENT_COLLECTIONS
using System.Threading.Tasks.Dataflow.Internal.Collections;
+#else
+using System.Collections.Concurrent;
#endif
using System.Collections.Generic;
using System.Diagnostics;
diff --git a/src/System.Threading.Tasks.Dataflow/src/System.Threading.Tasks.Dataflow.csproj b/src/System.Threading.Tasks.Dataflow/src/System.Threading.Tasks.Dataflow.csproj
index 387a90baa9..2edd7c0fcb 100644
--- a/src/System.Threading.Tasks.Dataflow/src/System.Threading.Tasks.Dataflow.csproj
+++ b/src/System.Threading.Tasks.Dataflow/src/System.Threading.Tasks.Dataflow.csproj
@@ -5,7 +5,9 @@
<ProjectGuid>{2E2F7224-7C72-4A81-9625-A5241F8D836D}</ProjectGuid>
<RootNamespace>System.Threading.Tasks.Dataflow</RootNamespace>
<DocumentationFile>$(OutputPath)$(MSBuildProjectName).xml</DocumentationFile>
- <DefineConstants Condition="'$(TargetGroup)' == 'netstandard1.1' OR '$(TargetGroup)' == 'netstandard'">$(DefineConstants);CONCURRENT_COLLECTIONS;FEATURE_TRACING</DefineConstants>
+ <DefineConstants Condition="'$(TargetGroup)' == 'netstandard1.1' OR '$(TargetGroup)' == 'netstandard'">$(DefineConstants);FEATURE_TRACING</DefineConstants>
+ <DefineConstants Condition="'$(TargetGroup)' == 'netstandard1.0'">$(DefineConstants);USE_INTERNAL_CONCURRENT_COLLECTIONS</DefineConstants>
+ <DefineConstants Condition="'$(TargetGroup)' == 'netstandard1.0' OR '$(TargetGroup)' == 'netstandard1.1'">$(DefineConstants);USE_INTERNAL_THREADING</DefineConstants>
<PackageTargetFramework Condition="'$(TargetGroup)' == 'netstandard1.1'">netstandard1.1;portable-net45+win8+wpa81</PackageTargetFramework>
</PropertyGroup>
<!-- Default configurations to help VS understand the configurations -->
@@ -49,6 +51,8 @@
<Compile Include="Internal\SpscTargetCore.cs" />
<Compile Include="Internal\TargetCore.cs" />
<Compile Include="Internal\TargetRegistry.cs" />
+ </ItemGroup>
+ <ItemGroup Condition="'$(TargetGroup)' == 'netstandard1.0' OR '$(TargetGroup)' == 'netstandard1.1'">
<Compile Include="Internal\Threading.cs" />
</ItemGroup>
<ItemGroup Condition="'$(TargetGroup)' == 'netstandard1.0'">
@@ -80,4 +84,4 @@
<Reference Include="System.Threading.Tasks" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
-</Project> \ No newline at end of file
+</Project>
diff --git a/src/System.Threading.Tasks.Dataflow/tests/System.Threading.Tasks.Dataflow.Tests.csproj b/src/System.Threading.Tasks.Dataflow/tests/System.Threading.Tasks.Dataflow.Tests.csproj
index 3d13505025..ef9b10eda3 100644
--- a/src/System.Threading.Tasks.Dataflow/tests/System.Threading.Tasks.Dataflow.Tests.csproj
+++ b/src/System.Threading.Tasks.Dataflow/tests/System.Threading.Tasks.Dataflow.Tests.csproj
@@ -7,7 +7,23 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Release|AnyCPU'" />
<ItemGroup>
- <Compile Include="Dataflow\*.cs" />
+ <Compile Include="Dataflow\ActionBlockTests.cs" />
+ <Compile Include="Dataflow\BatchBlockTests.cs" />
+ <Compile Include="Dataflow\BatchedJoinBlockTests.cs" />
+ <Compile Include="Dataflow\BroadcastBlockTests.cs" />
+ <Compile Include="Dataflow\BufferBlockTests.cs" />
+ <Compile Include="Dataflow\ConcurrentTests.cs" />
+ <Compile Include="Dataflow\DataflowBlockExtensionTests.cs" />
+ <Compile Include="Dataflow\DataflowBlockOptionsTests.cs" />
+ <Compile Include="Dataflow\DataflowTestHelper.cs" />
+ <Compile Include="Dataflow\DebugAttributeTests.cs" />
+ <Compile Include="Dataflow\DelegateBasedMocks.cs" />
+ <Compile Include="Dataflow\EtwTests.cs" />
+ <Compile Include="Dataflow\JoinBlockTests.cs" />
+ <Compile Include="Dataflow\SimpleNetworkTests.cs" />
+ <Compile Include="Dataflow\TransformBlockTests.cs" />
+ <Compile Include="Dataflow\TransformManyBlockTests.cs" />
+ <Compile Include="Dataflow\WriteOnceBlockTests.cs" />
<Compile Include="$(CommonTestPath)\System\Diagnostics\RemoteExecutorTestBase.cs">
<Link>Common\System\Diagnostics\RemoteExecutorTestBase.cs</Link>
</Compile>
diff --git a/src/System.Threading.Tasks/tests/System.Threading.Tasks.Tests.csproj b/src/System.Threading.Tasks/tests/System.Threading.Tasks.Tests.csproj
index d1049b4060..f69b139c9e 100644
--- a/src/System.Threading.Tasks/tests/System.Threading.Tasks.Tests.csproj
+++ b/src/System.Threading.Tasks/tests/System.Threading.Tasks.Tests.csproj
@@ -31,6 +31,7 @@
<Compile Include="Task\TaskContinueWhenAllTests.cs" />
<Compile Include="Task\TaskFromAsyncWork.cs" />
<Compile Include="Task\TaskFromAsyncTest.cs" />
+ <Compile Include="Task\TaskFromAsyncTest2.cs" />
<Compile Include="Task\TaskCancelWaitTests.cs" />
<Compile Include="Task\TaskCancelWaitTest.cs" />
<Compile Include="Task\TaskRtTests.cs" />
diff --git a/src/System.Threading.Tasks/tests/Task/TaskFromAsyncWork.cs b/src/System.Threading.Tasks/tests/Task/TaskFromAsyncWork.cs
index 2310022da9..f6f6d3ce5a 100644
--- a/src/System.Threading.Tasks/tests/Task/TaskFromAsyncWork.cs
+++ b/src/System.Threading.Tasks/tests/Task/TaskFromAsyncWork.cs
@@ -29,7 +29,7 @@ namespace System.Threading.Tasks.Tests
/// <summary>
/// Defines the amount of time the thread should sleep (to simulate workload)
/// </summary>
- private const int DEFAULT_TIME = 1000; // 1s
+ private const int DEFAULT_TIME = 15;
private List<object> _inputs;
@@ -141,14 +141,15 @@ namespace System.Threading.Tasks.Tests
public IAsyncResult BeginInvoke(AsyncCallback cb, object state)
{
- return _action.BeginInvoke(cb, state);
+ Task task = Task.Factory.StartNew(_ => _action(), state, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default);
+ task.ContinueWith(_ => cb(task));
+ return task;
}
public void EndInvoke(IAsyncResult iar)
{
CheckState(iar.AsyncState);
-
- _action.EndInvoke(iar);
+ ((Task)iar).GetAwaiter().GetResult();
}
#endregion
@@ -178,14 +179,15 @@ namespace System.Threading.Tasks.Tests
public IAsyncResult BeginInvoke(T t, AsyncCallback cb, object state)
{
- return _action.BeginInvoke(t, cb, state);
+ Task task = Task.Factory.StartNew(_ => _action(t), state, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default);
+ task.ContinueWith(_ => cb(task));
+ return task;
}
public void EndInvoke(IAsyncResult iar)
{
CheckState(iar.AsyncState);
-
- _action.EndInvoke(iar);
+ ((Task)iar).GetAwaiter().GetResult();
}
#endregion
@@ -214,14 +216,15 @@ namespace System.Threading.Tasks.Tests
public IAsyncResult BeginInvoke(T1 t1, T2 t2, AsyncCallback cb, object state)
{
- return _action.BeginInvoke(t1, t2, cb, state);
+ Task task = Task.Factory.StartNew(_ => _action(t1, t2), state, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default);
+ task.ContinueWith(_ => cb(task));
+ return task;
}
public void EndInvoke(IAsyncResult iar)
{
CheckState(iar.AsyncState);
-
- _action.EndInvoke(iar);
+ ((Task)iar).GetAwaiter().GetResult();
}
#endregion
@@ -251,14 +254,15 @@ namespace System.Threading.Tasks.Tests
public IAsyncResult BeginInvoke(T1 t1, T2 t2, T3 t3, AsyncCallback cb, object state)
{
- return _action.BeginInvoke(t1, t2, t3, cb, state);
+ Task task = Task.Factory.StartNew(_ => _action(t1, t2, t3), state, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default);
+ task.ContinueWith(_ => cb(task));
+ return task;
}
public void EndInvoke(IAsyncResult iar)
{
CheckState(iar.AsyncState);
-
- _action.EndInvoke(iar);
+ ((Task)iar).GetAwaiter().GetResult();
}
#endregion
@@ -304,14 +308,15 @@ namespace System.Threading.Tasks.Tests
public IAsyncResult BeginInvoke(AsyncCallback cb, object state)
{
- return _func.BeginInvoke(cb, state);
+ Task<ReadOnlyCollection<object>> task = Task.Factory.StartNew(_ => _func(), state, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default);
+ task.ContinueWith(_ => cb(task));
+ return task;
}
public ReadOnlyCollection<object> EndInvoke(IAsyncResult iar)
{
CheckState(iar.AsyncState);
-
- return _func.EndInvoke(iar);
+ return ((Task<ReadOnlyCollection<object>>)iar).GetAwaiter().GetResult();
}
#endregion
@@ -339,14 +344,15 @@ namespace System.Threading.Tasks.Tests
public IAsyncResult BeginInvoke(T t, AsyncCallback cb, object state)
{
- return _func.BeginInvoke(t, cb, state);
+ Task<ReadOnlyCollection<object>> task = Task.Factory.StartNew(_ => _func(t), state, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default);
+ task.ContinueWith(_ => cb(task));
+ return task;
}
public ReadOnlyCollection<object> EndInvoke(IAsyncResult iar)
{
CheckState(iar.AsyncState);
-
- return _func.EndInvoke(iar);
+ return ((Task<ReadOnlyCollection<object>>)iar).GetAwaiter().GetResult();
}
#endregion
@@ -375,14 +381,15 @@ namespace System.Threading.Tasks.Tests
public IAsyncResult BeginInvoke(T1 t1, T2 t2, AsyncCallback cb, object state)
{
- return _func.BeginInvoke(t1, t2, cb, state);
+ Task<ReadOnlyCollection<object>> task = Task.Factory.StartNew(_ => _func(t1, t2), state, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default);
+ task.ContinueWith(_ => cb(task));
+ return task;
}
public ReadOnlyCollection<object> EndInvoke(IAsyncResult iar)
{
CheckState(iar.AsyncState);
-
- return _func.EndInvoke(iar);
+ return ((Task<ReadOnlyCollection<object>>)iar).GetAwaiter().GetResult();
}
#endregion
@@ -412,14 +419,15 @@ namespace System.Threading.Tasks.Tests
public IAsyncResult BeginInvoke(T1 t1, T2 t2, T3 t3, AsyncCallback cb, object state)
{
- return _func.BeginInvoke(t1, t2, t3, cb, state);
+ Task<ReadOnlyCollection<object>> task = Task.Factory.StartNew(_ => _func(t1, t2, t3), state, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default);
+ task.ContinueWith(_ => cb(task));
+ return task;
}
public ReadOnlyCollection<object> EndInvoke(IAsyncResult iar)
{
CheckState(iar.AsyncState);
-
- return _func.EndInvoke(iar);
+ return ((Task<ReadOnlyCollection<object>>)iar).GetAwaiter().GetResult();
}
#endregion
diff --git a/src/System.ValueTuple/dir.props b/src/System.ValueTuple/dir.props
index ba7c08a94c..d352547194 100644
--- a/src/System.ValueTuple/dir.props
+++ b/src/System.ValueTuple/dir.props
@@ -3,5 +3,7 @@
<Import Project="..\dir.props" />
<PropertyGroup>
<AssemblyVersion>4.0.2.0</AssemblyVersion>
+ <IsNETCoreApp>true</IsNETCoreApp>
+ <IsUAP>true</IsUAP>
</PropertyGroup>
</Project> \ No newline at end of file
diff --git a/src/System.ValueTuple/ref/Configurations.props b/src/System.ValueTuple/ref/Configurations.props
index b07fde584c..0fd981012a 100644
--- a/src/System.ValueTuple/ref/Configurations.props
+++ b/src/System.ValueTuple/ref/Configurations.props
@@ -4,8 +4,6 @@
<BuildConfigurations>
netcoreapp;
uap;
- netstandard;
- netstandard1.0;
portable_net40+sl4+win8+wp8;
</BuildConfigurations>
</PropertyGroup>
diff --git a/src/System.ValueTuple/ref/System.ValueTuple.csproj b/src/System.ValueTuple/ref/System.ValueTuple.csproj
index ce6640054b..b3a51902c5 100644
--- a/src/System.ValueTuple/ref/System.ValueTuple.csproj
+++ b/src/System.ValueTuple/ref/System.ValueTuple.csproj
@@ -9,10 +9,6 @@
<!-- Default configurations to help VS understand the options -->
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Release|AnyCPU'" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Debug|AnyCPU'" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Release|AnyCPU'" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard1.0-Debug|AnyCPU'" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard1.0-Release|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'portable_net40+sl4+win8+wp8-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'portable_net40+sl4+win8+wp8-Release|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'uap-Debug|AnyCPU'" />
@@ -34,7 +30,7 @@
<ItemGroup Condition="'$(TargetGroup)' == 'netstandard1.0'">
<Reference Include="System.Runtime" />
</ItemGroup>
- <ItemGroup Condition="'$(TargetGroup)' == 'portable_net40+sl4+win8+wp8'">
+ <ItemGroup Condition="'$(TargetGroup)' == 'portable_net40+sl4+win8+wp8' or '$(TargetGroup)' == 'netfx'">
<Reference Include="mscorlib" />
<Reference Include="System" />
<Reference Include="System.Core" />
diff --git a/src/System.ValueTuple/src/Configurations.props b/src/System.ValueTuple/src/Configurations.props
index d095ea0061..f1260522e4 100644
--- a/src/System.ValueTuple/src/Configurations.props
+++ b/src/System.ValueTuple/src/Configurations.props
@@ -4,8 +4,8 @@
<BuildConfigurations>
portable_net40+sl4+win8+wp8;
netstandard1.0;
- netstandard;
netcoreapp;
+ netfx;
uap-Windows_NT;
</BuildConfigurations>
</PropertyGroup>
diff --git a/src/System.ValueTuple/src/System.ValueTuple.csproj b/src/System.ValueTuple/src/System.ValueTuple.csproj
index ad4a44bb4e..fa332a5474 100644
--- a/src/System.ValueTuple/src/System.ValueTuple.csproj
+++ b/src/System.ValueTuple/src/System.ValueTuple.csproj
@@ -12,8 +12,8 @@
<!-- Default configurations to help VS understand the options -->
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Release|AnyCPU'" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Debug|AnyCPU'" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard-Release|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netfx-Debug|AnyCPU'" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netfx-Release|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard1.0-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netstandard1.0-Release|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'portable_net40+sl4+win8+wp8-Debug|AnyCPU'" />
@@ -40,16 +40,16 @@
<Link>Common\System\Reflection\AssemblyMetadataAttribute.cs</Link>
</Compile>
</ItemGroup>
- <ItemGroup Condition="'$(TargetGroup)' == 'portable_net40+sl4+win8+wp8'">
+ <ItemGroup Condition="'$(TargetGroup)' == 'portable_net40+sl4+win8+wp8' OR '$(TargetGroup)' == 'netfx'">
<Reference Include="mscorlib" />
<Reference Include="System" />
<Reference Include="System.Core" />
</ItemGroup>
- <ItemGroup Condition="'$(TargetGroup)' != 'portable_net40+sl4+win8+wp8'">
+ <ItemGroup Condition="'$(TargetGroup)' == 'netstandard1.0' OR '$(TargetGroup)' == 'netcoreapp' OR '$(TargetGroup)' == 'uap'">
<Reference Include="System.Collections" />
<Reference Include="System.Diagnostics.Debug" />
<Reference Include="System.Resources.ResourceManager" />
<Reference Include="System.Runtime" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
-</Project>
+</Project> \ No newline at end of file
diff --git a/src/System.Xml.XPath.XmlDocument/ref/System.Xml.XPath.XmlDocument.Forwards.cs b/src/System.Xml.XPath.XmlDocument/ref/System.Xml.XPath.XmlDocument.Forwards.cs
deleted file mode 100644
index b327c32903..0000000000
--- a/src/System.Xml.XPath.XmlDocument/ref/System.Xml.XPath.XmlDocument.Forwards.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System.Runtime.CompilerServices;
-
-[assembly:TypeForwardedTo(typeof(System.Xml.XmlDocumentXPathExtensions))]
diff --git a/src/Tools/dir.targets b/src/Tools/dir.targets
new file mode 100644
index 0000000000..6aabb977f0
--- /dev/null
+++ b/src/Tools/dir.targets
@@ -0,0 +1,6 @@
+<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="..\dir.targets" />
+
+ <!-- this depends on the tasks and targets that we're building -->
+ <Target Name="GetBinPlaceConfiguration" />
+</Project>
diff --git a/src/packages.builds b/src/packages.builds
index 01e538bbe1..7a64b5729a 100644
--- a/src/packages.builds
+++ b/src/packages.builds
@@ -7,13 +7,7 @@
</PropertyGroup>
<ItemGroup>
- <Project Include="$(MSBuildThisFileDirectory)..\pkg\Microsoft.NETCore.Platforms\Microsoft.NETCore.Platforms.builds" Condition="'$(SkipManagedPackageBuild)' != 'true'">
- <AdditionalProperties>$(AdditionalProperties)</AdditionalProperties>
- </Project>
- <Project Include="$(MSBuildThisFileDirectory)..\pkg\Microsoft.Private.CoreFx.NETCoreApp\Microsoft.Private.CoreFx.NETCoreApp.builds" Condition="'$(SkipManagedPackageBuild)' != 'true'">
- <AdditionalProperties>$(AdditionalProperties)</AdditionalProperties>
- </Project>
- <Project Include="$(MSBuildThisFileDirectory)..\pkg\Microsoft.Private.CoreFx.UAP\Microsoft.Private.CoreFx.UAP.builds" Condition="'$(SkipManagedPackageBuild)' != 'true'">
+ <Project Include="$(MSBuildThisFileDirectory)..\pkg\*\*.builds" Condition="'$(SkipManagedPackageBuild)' != 'true'">
<AdditionalProperties>$(AdditionalProperties)</AdditionalProperties>
</Project>
<Project Include="*\pkg\**\*.pkgproj" Condition="'$(SkipManagedPackageBuild)' != 'true' AND '$(BuildAllConfigurations)' == 'true'">
diff --git a/src/shims/ApiCompatBaseline.netcoreapp.netfx461.ignore.txt b/src/shims/ApiCompatBaseline.netcoreapp.netfx461.ignore.txt
index 6e95899e9b..8251e71da7 100644
--- a/src/shims/ApiCompatBaseline.netcoreapp.netfx461.ignore.txt
+++ b/src/shims/ApiCompatBaseline.netcoreapp.netfx461.ignore.txt
@@ -5,14 +5,45 @@ CannotRemoveBaseTypeOrInterface : Type 'System.Reflection.Emit.GenericTypeParame
MembersMustExist : Member 'System.Reflection.Emit.GenericTypeParameterBuilder.IsAssignableFrom(System.Reflection.TypeInfo)' does not exist in the implementation but it does exist in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.Reflection.Emit.TypeBuilder' does not inherit from base type 'System.Reflection.TypeInfo' in the implementation but it does in the contract.
MembersMustExist : Member 'System.Reflection.Emit.TypeBuilder.IsAssignableFrom(System.Reflection.TypeInfo)' does not exist in the implementation but it does exist in the contract.
+
// HttpVersion changed to static class intentionally. See here: https://github.com/dotnet/standard/issues/91
CannotMakeTypeAbstract : Type 'System.Net.HttpVersion' is abstract in the implementation but is not abstract in the contract.
CannotSealType : Type 'System.Net.HttpVersion' is sealed in the implementation but not sealed in the contract.
MembersMustExist : Member 'System.Net.HttpVersion..ctor()' does not exist in the implementation but it does exist in the contract.
+
// RuntimeEnvironment changed to static class intentionally. See here: https://github.com/dotnet/standard/commit/d5fbcbeeeb7f15102fdac111bc8d7d5d72c32036#diff-2856a41639a1f4feb4e95ae667e069b7R10012
CannotMakeTypeAbstract : Type 'System.Runtime.InteropServices.RuntimeEnvironment' is abstract in the implementation but is not abstract in the contract.
CannotSealType : Type 'System.Runtime.InteropServices.RuntimeEnvironment' is sealed in the implementation but not sealed in the contract.
MembersMustExist : Member 'System.Runtime.InteropServices.RuntimeEnvironment..ctor()' does not exist in the implementation but it does exist in the contract.
+
+// Activator changed to static class intentionally. See here: https://github.com/dotnet/corefx/issues/11869
+CannotMakeTypeAbstract : Type 'System.Activator' is abstract in the implementation but is not abstract in the contract.
+
+// Debugger changed to static class intentionally. See here: https://github.com/dotnet/standard/commit/d5fbcbeeeb7f15102fdac111bc8d7d5d72c32036#diff-2856a41639a1f4feb4e95ae667e069b7R10012
+CannotMakeTypeAbstract : Type 'System.Diagnostics.Debugger' is abstract in the implementation but is not abstract in the contract.
+MembersMustExist : Member 'System.Diagnostics.Debugger..ctor()' does not exist in the implementation but it does exist in the contract.
+
+// IRemotingFormatter won't be implemented in netcore20
+CannotRemoveBaseTypeOrInterface : Type 'System.Runtime.Serialization.Formatters.Binary.BinaryFormatter' does not implement interface 'System.Runtime.Remoting.Messaging.IRemotingFormatter' in the implementation but it does in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Messaging.IRemotingFormatter' does not exist in the implementation but it does exist in the contract.
+
+// SchemaImporter won't be implemented in netcore20
+TypesMustExist : Type 'System.Xml.Serialization.SchemaImporter' does not exist in the implementation but it does exist in the contract.
+CannotRemoveBaseTypeOrInterface : Type 'System.Xml.Serialization.XmlSchemaImporter' does not inherit from base type 'System.Xml.Serialization.SchemaImporter' in the implementation but it does in the contract.
+
+// IServiceProvider won't be implemented by SqlClientFactory. See here: https://github.com/dotnet/corefx/issues/17708
+CannotRemoveBaseTypeOrInterface : Type 'System.Data.SqlClient.SqlClientFactory' does not implement interface 'System.IServiceProvider' in the implementation but it does in the contract.
+
+// DynData Win9x only. Not going to be implemented in any netcore versions. See here: https://github.com/dotnet/corefx/issues/15332
+MembersMustExist : Member 'Microsoft.Win32.RegistryKey Microsoft.Win32.Registry.DynData' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'Microsoft.Win32.RegistryHive Microsoft.Win32.RegistryHive.DynData' does not exist in the implementation but it does exist in the contract.
+
+// AppDomain.SetupInformation not going to be implemented in netcore20 as no remoting support:
+MembersMustExist : Member 'System.AppDomain.SetupInformation.get()' does not exist in the implementation but it does exist in the contract.
+
+// SetAccessControl in FileStream not going to be implemented in netcore20 as no ACL support:
+MembersMustExist : Member 'System.IO.FileStream.SetAccessControl(System.Security.AccessControl.FileSecurity)' does not exist in the implementation but it does exist in the contract.
+
// Interfaces were intentional removals
TypesMustExist : Type 'System.Runtime.InteropServices._Activator' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Runtime.InteropServices._Assembly' does not exist in the implementation but it does exist in the contract.
@@ -45,6 +76,11 @@ TypesMustExist : Type 'System.Runtime.InteropServices._SignatureHelper' does not
TypesMustExist : Type 'System.Runtime.InteropServices._Thread' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Runtime.InteropServices._Type' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Runtime.InteropServices._TypeBuilder' does not exist in the implementation but it does exist in the contract.
+CannotRemoveBaseTypeOrInterface : Type 'System.Net.NetworkInformation.PingException' does not implement interface 'System.Runtime.InteropServices._Exception' in the implementation but it does in the contract.
+CannotRemoveBaseTypeOrInterface : Type 'System.AccessViolationException' does not implement interface 'System.Runtime.InteropServices._Exception' in the implementation but it does in the contract.
+CannotRemoveBaseTypeOrInterface : Type 'System.Activator' does not implement interface 'System.Runtime.InteropServices._Activator' in the implementation but it does in the contract.
+CannotRemoveBaseTypeOrInterface : Type 'System.AggregateException' does not implement interface 'System.Runtime.InteropServices._Exception' in the implementation but it does in the contract.
+CannotRemoveBaseTypeOrInterface : Type 'System.AppDomain' does not implement interface 'System._AppDomain' in the implementation but it does in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.DataMisalignedException' does not implement interface 'System.Runtime.InteropServices._Exception' in the implementation but it does in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.DivideByZeroException' does not implement interface 'System.Runtime.InteropServices._Exception' in the implementation but it does in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.DllNotFoundException' does not implement interface 'System.Runtime.InteropServices._Exception' in the implementation but it does in the contract.
@@ -589,4 +625,2610 @@ CannotRemoveBaseTypeOrInterface : Type 'System.Xml.Serialization.XmlNamespaceDec
CannotRemoveBaseTypeOrInterface : Type 'System.Xml.Serialization.XmlRootAttribute' does not implement interface 'System.Runtime.InteropServices._Attribute' in the implementation but it does in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.Xml.Serialization.XmlSchemaProviderAttribute' does not implement interface 'System.Runtime.InteropServices._Attribute' in the implementation but it does in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.Xml.Serialization.XmlTextAttribute' does not implement interface 'System.Runtime.InteropServices._Attribute' in the implementation but it does in the contract.
-CannotRemoveBaseTypeOrInterface : Type 'System.Xml.Serialization.XmlTypeAttribute' does not implement interface 'System.Runtime.InteropServices._Attribute' in the implementation but it does in the contract. \ No newline at end of file
+CannotRemoveBaseTypeOrInterface : Type 'System.Xml.Serialization.XmlTypeAttribute' does not implement interface 'System.Runtime.InteropServices._Attribute' in the implementation but it does in the contract.
+
+// TypesMustExist isn't a goal for netcore20:
+TypesMustExist : Type 'System._AppDomain' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ActivationContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.AppDomainInitializer' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.AppDomainManager' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.AppDomainManagerInitializationOptions' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.AppDomainSetup' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.CrossAppDomainDelegate' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.IAppDomainSetup' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Configuration.Assemblies.AssemblyHash' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Deployment.Internal.InternalActivationContextHelper' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Deployment.Internal.InternalApplicationIdentityHelper' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Contracts.Internal.ContractHelper' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.IO.IsolatedStorage.IsolatedStorageSecurityOptions' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.IO.IsolatedStorage.IsolatedStorageSecurityState' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Reflection.Emit.DynamicILInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Reflection.Emit.EventToken' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Reflection.Emit.ExceptionHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Reflection.Emit.FieldToken' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Reflection.Emit.MethodRental' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Reflection.Emit.MethodToken' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Reflection.Emit.ParameterToken' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Reflection.Emit.PEFileKinds' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Reflection.Emit.PropertyToken' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Reflection.Emit.SignatureToken' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Reflection.Emit.StringToken' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Reflection.Emit.TypeToken' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Reflection.Emit.UnmanagedMarshal' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.ProfileOptimization' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.CompilerServices.IDispatchConstantAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.DesignerServices.WindowsRuntimeDesignerContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Hosting.ActivationArguments' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Hosting.ApplicationActivator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices._Activator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices._Assembly' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices._AssemblyBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices._AssemblyName' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices._Attribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices._ConstructorBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices._ConstructorInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices._CustomAttributeBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices._EnumBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices._EventBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices._EventInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices._Exception' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices._FieldBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices._FieldInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices._ILGenerator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices._LocalBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices._MemberInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices._MethodBase' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices._MethodBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices._MethodInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices._MethodRental' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices._Module' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices._ModuleBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices._ParameterBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices._ParameterInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices._PropertyBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices._PropertyInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices._SignatureHelper' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices._Thread' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices._Type' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices._TypeBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.AssemblyRegistrationFlags' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.BIND_OPTS' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.BINDPTR' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.CALLCONV' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.CONNECTDATA' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.DESCKIND' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.DISPPARAMS' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.ELEMDESC' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.EXCEPINFO' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.ExporterEventKind' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.ExtensibleClassFactory' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.FILETIME' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.FUNCDESC' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.FUNCFLAGS' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.FUNCKIND' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.IDispatchImplAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.IDispatchImplType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.IDLDESC' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.IDLFLAG' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.IMPLTYPEFLAGS' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.ImportedFromTypeLibAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.ImporterEventKind' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.INVOKEKIND' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.IRegistrationServices' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.ITypeLibConverter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.ITypeLibExporterNameProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.ITypeLibExporterNotifySink' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.ITypeLibImporterNotifySink' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.LIBFLAGS' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.ObjectCreationDelegate' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.PARAMDESC' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.PARAMFLAG' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.RegistrationClassContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.RegistrationConnectionType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.RegistrationServices' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.SetWin32ContextInIDispatchAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.STATSTG' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.SYSKIND' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.TYPEATTR' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.TYPEDESC' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.TYPEFLAGS' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.TYPEKIND' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.TYPELIBATTR' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.TypeLibConverter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.TypeLibExporterFlags' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.TypeLibFuncAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.TypeLibFuncFlags' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.TypeLibImportClassAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.TypeLibImporterFlags' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.TypeLibTypeAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.TypeLibTypeFlags' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.TypeLibVarAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.TypeLibVarFlags' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.TypeLibVersionAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.UCOMIBindCtx' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.UCOMIConnectionPoint' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.UCOMIConnectionPointContainer' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.UCOMIEnumConnectionPoints' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.UCOMIEnumConnections' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.UCOMIEnumMoniker' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.UCOMIEnumString' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.UCOMIEnumVARIANT' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.UCOMIMoniker' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.UCOMIPersistFile' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.UCOMIRunningObjectTable' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.UCOMIStream' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.UCOMITypeComp' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.UCOMITypeInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.UCOMITypeLib' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.VARDESC' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.VARFLAGS' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.Expando.IExpando' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.WindowsRuntime.DesignerNamespaceResolveEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.WindowsRuntime.NamespaceResolveEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMetadata' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.ActivatedClientTypeEntry' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.ActivatedServiceTypeEntry' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.CustomErrorsModes' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.IChannelInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.IEnvoyInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.InternalRemotingServices' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.IObjectHandle' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.IRemotingTypeInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.ObjectHandle' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.ObjRef' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.RemotingConfiguration' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.RemotingException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.RemotingServices' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.RemotingTimeoutException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.ServerException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.SoapServices' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.TypeEntry' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.WellKnownClientTypeEntry' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.WellKnownObjectMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.WellKnownServiceTypeEntry' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Activation.ActivatorLevel' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Activation.IActivator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Activation.IConstructionCallMessage' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Activation.IConstructionReturnMessage' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Activation.UrlAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Channels.BaseChannelObjectWithProperties' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Channels.BaseChannelSinkWithProperties' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Channels.BaseChannelWithProperties' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Channels.ChannelDataStore' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Channels.ChannelServices' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Channels.ClientChannelSinkStack' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Channels.IChannel' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Channels.IChannelDataStore' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Channels.IChannelReceiver' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Channels.IChannelReceiverHook' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Channels.IChannelSender' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Channels.IChannelSinkBase' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Channels.IClientChannelSink' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Channels.IClientChannelSinkProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Channels.IClientChannelSinkStack' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Channels.IClientFormatterSink' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Channels.IClientFormatterSinkProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Channels.IClientResponseChannelSinkStack' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Channels.ISecurableChannel' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Channels.IServerChannelSink' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Channels.IServerChannelSinkProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Channels.IServerChannelSinkStack' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Channels.IServerFormatterSinkProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Channels.IServerResponseChannelSinkStack' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Channels.ITransportHeaders' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Channels.ServerChannelSinkStack' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Channels.ServerProcessing' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Channels.SinkProviderData' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Channels.TransportHeaders' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Contexts.Context' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Contexts.ContextAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Contexts.ContextProperty' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Contexts.CrossContextDelegate' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Contexts.IContextAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Contexts.IContextProperty' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Contexts.IContextPropertyActivator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Contexts.IContributeClientContextSink' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Contexts.IContributeDynamicSink' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Contexts.IContributeEnvoySink' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Contexts.IContributeObjectSink' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Contexts.IContributeServerContextSink' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Contexts.IDynamicMessageSink' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Contexts.IDynamicProperty' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Contexts.SynchronizationAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Lifetime.ClientSponsor' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Lifetime.ILease' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Lifetime.ISponsor' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Lifetime.LeaseState' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Lifetime.LifetimeServices' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Messaging.AsyncResult' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Messaging.CallContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Messaging.ConstructionCall' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Messaging.ConstructionResponse' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Messaging.Header' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Messaging.HeaderHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Messaging.ILogicalThreadAffinative' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Messaging.IMessage' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Messaging.IMessageCtrl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Messaging.IMessageSink' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Messaging.IMethodCallMessage' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Messaging.IMethodMessage' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Messaging.IMethodReturnMessage' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Messaging.InternalMessageWrapper' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Messaging.IRemotingFormatter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Messaging.LogicalCallContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Messaging.MessageSurrogateFilter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Messaging.MethodCall' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Messaging.MethodCallMessageWrapper' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Messaging.MethodResponse' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Messaging.MethodReturnMessageWrapper' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Messaging.OneWayAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Messaging.RemotingSurrogateSelector' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Messaging.ReturnMessage' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.SoapAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.SoapFieldAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.SoapMethodAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.SoapOption' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.SoapParameterAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.SoapTypeAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.XmlFieldOrderOption' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.ISoapXsd' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.SoapAnyUri' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.SoapBase64Binary' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.SoapDate' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.SoapDateTime' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.SoapDay' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.SoapDuration' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.SoapEntities' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.SoapEntity' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.SoapHexBinary' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.SoapId' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.SoapIdref' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.SoapIdrefs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.SoapInteger' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.SoapLanguage' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.SoapMonth' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.SoapMonthDay' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.SoapName' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.SoapNcName' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.SoapNegativeInteger' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.SoapNmtoken' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.SoapNmtokens' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.SoapNonNegativeInteger' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.SoapNonPositiveInteger' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.SoapNormalizedString' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.SoapNotation' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.SoapPositiveInteger' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.SoapQName' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.SoapTime' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.SoapToken' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.SoapYear' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Metadata.W3cXsd2001.SoapYearMonth' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Proxies.ProxyAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Proxies.RealProxy' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Services.EnterpriseServicesHelper' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Services.ITrackingHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Remoting.Services.TrackingServices' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Serialization.Formatters.InternalRM' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Serialization.Formatters.InternalST' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Serialization.Formatters.ISoapMessage' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Serialization.Formatters.ServerFault' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Serialization.Formatters.SoapFault' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Serialization.Formatters.SoapMessage' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.ReadOnlyPermissionSet' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.AccessControl.CryptoKeyAccessRule' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.AccessControl.CryptoKeyAuditRule' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.AccessControl.CryptoKeyRights' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.AccessControl.CryptoKeySecurity' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Cryptography.CryptoAPITransform' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Cryptography.HMACRIPEMD160' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Cryptography.MACTripleDES' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Cryptography.RijndaelManagedTransform' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Cryptography.RIPEMD160' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Cryptography.RIPEMD160Managed' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Policy.ApplicationSecurityInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Policy.ApplicationSecurityManager' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Policy.IApplicationTrustManager' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Principal.WindowsAccountType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Principal.WindowsImpersonationContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.Win32.IntranetZoneCredentialPolicy' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.Win32.PowerModeChangedEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.Win32.PowerModeChangedEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.Win32.PowerModes' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.Win32.SessionEndedEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.Win32.SessionEndedEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.Win32.SessionEndingEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.Win32.SessionEndingEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.Win32.SessionEndReasons' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.Win32.SessionSwitchEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.Win32.SessionSwitchEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.Win32.SessionSwitchReason' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.Win32.SystemEvents' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.Win32.TimerElapsedEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.Win32.TimerElapsedEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.Win32.UserPreferenceCategory' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.Win32.UserPreferenceChangedEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.Win32.UserPreferenceChangedEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.Win32.UserPreferenceChangingEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.Win32.UserPreferenceChangingEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.ConsoleTraceListener' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.CounterCreationData' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.CounterCreationDataCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.CounterSampleCalculator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.DiagnosticsConfigurationHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.EntryWrittenEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.EntryWrittenEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.EventInstance' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.EventLog' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.EventLogEntry' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.EventLogEntryCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.EventLogEntryType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.EventLogPermission' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.EventLogPermissionAccess' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.EventLogPermissionAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.EventLogPermissionEntry' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.EventLogPermissionEntryCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.EventLogTraceListener' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.EventSourceCreationData' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.ICollectData' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.InstanceData' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.InstanceDataCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.InstanceDataCollectionCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.OverflowAction' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.PerformanceCounterCategory' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.PerformanceCounterCategoryType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.PerformanceCounterManager' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.PerformanceCounterPermission' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.PerformanceCounterPermissionAccess' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.PerformanceCounterPermissionAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.PerformanceCounterPermissionEntry' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.PerformanceCounterPermissionEntryCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.XmlWriterTraceListener' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.IO.IODescriptionAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Media.SoundPlayer' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Media.SystemSound' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Media.SystemSounds' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.DnsPermission' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.DnsPermissionAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.EndpointPermission' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.ICertificatePolicy' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.NetworkAccess' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.SocketPermission' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.SocketPermissionAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.TransportType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.WebPermission' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.WebPermissionAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.AuthenticationModuleElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.AuthenticationModuleElementCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.AuthenticationModulesSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.BypassElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.BypassElementCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.ConnectionManagementElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.ConnectionManagementElementCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.ConnectionManagementSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.DefaultProxySection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.FtpCachePolicyElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.HttpCachePolicyElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.HttpListenerElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.HttpListenerTimeoutsElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.HttpWebRequestElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.Ipv6Element' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.MailSettingsSectionGroup' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.ModuleElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.NetSectionGroup' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.PerformanceCountersElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.ProxyElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.RequestCachingSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.ServicePointManagerElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.SettingsSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.SmtpNetworkElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.SmtpSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.SmtpSpecifiedPickupDirectoryElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.SocketElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.UnicodeDecodingConformance' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.UnicodeEncodingConformance' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.WebProxyScriptElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.WebRequestModuleElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.WebRequestModuleElementCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.WebRequestModulesSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Configuration.WebUtilityElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Mail.SmtpAccess' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Mail.SmtpPermission' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Mail.SmtpPermissionAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Sockets.SocketClientAccessPolicyProtocol' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Reflection.ICustomTypeProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.InteropServices.StandardOleMarshalObject' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Authentication.ExtendedProtection.TokenBinding' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Authentication.ExtendedProtection.TokenBindingType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Authentication.ExtendedProtection.Configuration.ServiceNameElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Authentication.ExtendedProtection.Configuration.ServiceNameElementCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Claims.DynamicRoleClaimProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Text.RegularExpressions.RegexCompilationInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.AspNetHostingPermission' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.AspNetHostingPermissionAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.AspNetHostingPermissionLevel' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Windows.Markup.ValueSerializerAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.AttributedModelServices' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.CatalogReflectionContextAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.ChangeRejectedException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.CompositionContractMismatchException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.CompositionError' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.CompositionException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.CreationPolicy' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.ExportAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.ExportFactory<T>' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.ExportFactory<T, TMetadata>' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.ExportLifetimeContext<T>' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.ExportMetadataAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.ICompositionService' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.ImportAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.ImportCardinalityMismatchException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.ImportingConstructorAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.ImportManyAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.ImportSource' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.InheritedExportAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.IPartImportsSatisfiedNotification' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.MetadataAttributeAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.MetadataViewImplementationAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.PartCreationPolicyAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.PartMetadataAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.PartNotDiscoverableAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Hosting.AggregateCatalog' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Hosting.AggregateExportProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Hosting.ApplicationCatalog' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Hosting.AssemblyCatalog' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Hosting.AtomicComposition' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Hosting.CatalogExportProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Hosting.CatalogExtensions' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Hosting.ComposablePartCatalogChangeEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Hosting.ComposablePartExportProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Hosting.CompositionBatch' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Hosting.CompositionConstants' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Hosting.CompositionContainer' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Hosting.CompositionOptions' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Hosting.CompositionScopeDefinition' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Hosting.CompositionService' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Hosting.DirectoryCatalog' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Hosting.ExportProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Hosting.ExportsChangeEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Hosting.FilteredCatalog' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Hosting.ImportEngine' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Hosting.INotifyComposablePartCatalogChanged' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Hosting.ScopingExtensions' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Hosting.TypeCatalog' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Primitives.ComposablePart' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Primitives.ComposablePartCatalog' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Primitives.ComposablePartDefinition' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Primitives.ComposablePartException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Primitives.ContractBasedImportDefinition' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Primitives.Export' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Primitives.ExportDefinition' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Primitives.ExportedDelegate' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Primitives.ICompositionElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Primitives.ImportCardinality' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.Primitives.ImportDefinition' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.ReflectionModel.LazyMemberInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.Composition.ReflectionModel.ReflectionModelServices' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.DataAnnotations.AssociatedMetadataTypeTypeDescriptionProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.DataAnnotations.BindableTypeAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.DataAnnotations.MetadataTypeAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ComponentModel.DataAnnotations.ScaffoldTableAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.EventSchemaTraceListener' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.TraceLogRetentionOption' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.UnescapedXmlDiagnosticData' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.EventDescriptor' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.EventProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.EventProviderTraceListener' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.EventBookmark' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.EventKeyword' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.EventLevel' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.EventLogConfiguration' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.EventLogException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.EventLogInformation' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.EventLogInvalidDataException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.EventLogIsolation' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.EventLogLink' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.EventLogMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.EventLogNotFoundException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.EventLogPropertySelector' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.EventLogProviderDisabledException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.EventLogQuery' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.EventLogReader' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.EventLogReadingException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.EventLogRecord' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.EventLogSession' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.EventLogStatus' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.EventLogType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.EventLogWatcher' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.EventMetadata' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.EventOpcode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.EventProperty' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.EventRecord' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.EventRecordWrittenEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.EventTask' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.PathType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.ProviderMetadata' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.SessionAuthentication' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.StandardEventKeywords' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.StandardEventLevel' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.StandardEventOpcode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.Eventing.Reader.StandardEventTask' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.PerformanceData.CounterData' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.PerformanceData.CounterSet' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.PerformanceData.CounterSetInstance' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.PerformanceData.CounterSetInstanceCounterDataSet' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.PerformanceData.CounterSetInstanceType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Diagnostics.PerformanceData.CounterType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.IO.MemoryMappedFiles.MemoryMappedFileSecurity' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Management.Instrumentation.InstanceNotFoundException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Management.Instrumentation.InstrumentationBaseException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Management.Instrumentation.InstrumentationException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Management.Instrumentation.ManagementBindAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Management.Instrumentation.ManagementCommitAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Management.Instrumentation.ManagementConfigurationAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Management.Instrumentation.ManagementConfigurationType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Management.Instrumentation.ManagementCreateAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Management.Instrumentation.ManagementEntityAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Management.Instrumentation.ManagementEnumeratorAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Management.Instrumentation.ManagementHostingModel' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Management.Instrumentation.ManagementKeyAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Management.Instrumentation.ManagementMemberAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Management.Instrumentation.ManagementNameAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Management.Instrumentation.ManagementNewInstanceAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Management.Instrumentation.ManagementProbeAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Management.Instrumentation.ManagementReferenceAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Management.Instrumentation.ManagementRemoveAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Management.Instrumentation.ManagementTaskAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Management.Instrumentation.WmiConfigurationAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.CompilerServices.CallSiteOps' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.CompilerServices.Closure' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.CompilerServices.ExecutionScope' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.CompilerServices.RuntimeOps' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.ManifestKinds' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Cryptography.ECDiffieHellman' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Cryptography.ECDiffieHellmanCng' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Cryptography.ECDiffieHellmanCngPublicKey' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Cryptography.ECDiffieHellmanKeyDerivationFunction' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Cryptography.ECKeyXmlFormat' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Cryptography.ManifestSignatureInformation' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Cryptography.ManifestSignatureInformationCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Cryptography.MD5Cng' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Cryptography.SHA1Cng' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Cryptography.SHA256Cng' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Cryptography.SHA384Cng' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Cryptography.SHA512Cng' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Cryptography.SignatureVerificationResult' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Cryptography.StrongNameSignatureInformation' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Cryptography.X509Certificates.AuthenticodeSignatureInformation' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Cryptography.X509Certificates.TimestampInformation' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Security.Cryptography.X509Certificates.TrustStatus' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.SqlServer.Server.DataAccessKind' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.SqlServer.Server.Format' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.SqlServer.Server.IBinarySerialize' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.SqlServer.Server.InvalidUdtException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.SqlServer.Server.SqlContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.SqlServer.Server.SqlFacetAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.SqlServer.Server.SqlFunctionAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.SqlServer.Server.SqlMethodAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.SqlServer.Server.SqlPipe' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.SqlServer.Server.SqlProcedureAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.SqlServer.Server.SqlTriggerAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.SqlServer.Server.SqlTriggerContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.SqlServer.Server.SqlUserDefinedAggregateAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.SqlServer.Server.SystemDataAccessKind' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'Microsoft.SqlServer.Server.TriggerAction' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.DataSetSchemaImporterExtension' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.PropertyAttributes' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.TypedDataSetGenerator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.TypedDataSetGeneratorException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.Common.DBDataPermission' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.Common.DBDataPermissionAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.Common.DbProviderConfigurationHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.Common.DbProviderFactories' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.Common.DbProviderFactoriesConfigurationHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.Odbc.OdbcPermission' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.Odbc.OdbcPermissionAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.OleDb.OleDbCommand' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.OleDb.OleDbCommandBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.OleDb.OleDbConnection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.OleDb.OleDbConnectionStringBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.OleDb.OleDbDataAdapter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.OleDb.OleDbDataReader' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.OleDb.OleDbEnumerator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.OleDb.OleDbError' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.OleDb.OleDbErrorCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.OleDb.OleDbException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.OleDb.OleDbFactory' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.OleDb.OleDbInfoMessageEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.OleDb.OleDbInfoMessageEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.OleDb.OleDbLiteral' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.OleDb.OleDbMetaDataCollectionNames' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.OleDb.OleDbMetaDataColumnNames' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.OleDb.OleDbParameter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.OleDb.OleDbParameterCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.OleDb.OleDbPermission' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.OleDb.OleDbPermissionAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.OleDb.OleDbRowUpdatedEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.OleDb.OleDbRowUpdatedEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.OleDb.OleDbRowUpdatingEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.OleDb.OleDbRowUpdatingEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.OleDb.OleDbSchemaGuid' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.OleDb.OleDbTransaction' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.OleDb.OleDbType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.Sql.SqlDataSourceEnumerator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.Sql.SqlNotificationRequest' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlClient.OnChangeEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlClient.SqlAuthenticationMethod' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlClient.SqlClientMetaDataCollectionNames' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlClient.SqlClientPermission' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlClient.SqlClientPermissionAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlClient.SqlColumnEncryptionCertificateStoreProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlClient.SqlColumnEncryptionCngProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlClient.SqlColumnEncryptionCspProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlClient.SqlColumnEncryptionKeyStoreProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlClient.SqlCommandBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlClient.SqlCommandColumnEncryptionSetting' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlClient.SqlConnectionColumnEncryptionSetting' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlClient.SqlCredential' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlClient.SQLDebugging' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlClient.SqlDependency' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlClient.SqlNotificationEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlClient.SqlNotificationInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlClient.SqlNotificationSource' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlClient.SqlNotificationType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlTypes.SqlFileStream' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlTypes.SqlTypesSchemaImporterExtensionHelper' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlTypes.TypeBigIntSchemaImporterExtension' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlTypes.TypeBinarySchemaImporterExtension' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlTypes.TypeBitSchemaImporterExtension' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlTypes.TypeCharSchemaImporterExtension' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlTypes.TypeDateTimeSchemaImporterExtension' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlTypes.TypeDecimalSchemaImporterExtension' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlTypes.TypeFloatSchemaImporterExtension' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlTypes.TypeIntSchemaImporterExtension' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlTypes.TypeMoneySchemaImporterExtension' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlTypes.TypeNCharSchemaImporterExtension' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlTypes.TypeNTextSchemaImporterExtension' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlTypes.TypeNumericSchemaImporterExtension' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlTypes.TypeNVarCharSchemaImporterExtension' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlTypes.TypeRealSchemaImporterExtension' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlTypes.TypeSmallDateTimeSchemaImporterExtension' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlTypes.TypeSmallIntSchemaImporterExtension' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlTypes.TypeSmallMoneySchemaImporterExtension' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlTypes.TypeTextSchemaImporterExtension' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlTypes.TypeTinyIntSchemaImporterExtension' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlTypes.TypeUniqueIdentifierSchemaImporterExtension' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlTypes.TypeVarBinarySchemaImporterExtension' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlTypes.TypeVarCharSchemaImporterExtension' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Data.SqlTypes.TypeVarImageSchemaImporterExtension' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Xml.XmlDataDocument' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Bitmap' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.BitmapSuffixInSameAssemblyAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.BitmapSuffixInSatelliteAssemblyAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Brush' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Brushes' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.BufferedGraphics' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.BufferedGraphicsContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.BufferedGraphicsManager' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.CharacterRange' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.ColorTranslator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.ContentAlignment' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.CopyPixelOperation' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Font' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.FontConverter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.FontFamily' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.FontStyle' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Graphics' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.GraphicsUnit' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Icon' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.IconConverter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.IDeviceContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Image' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.ImageAnimator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.ImageConverter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.ImageFormatConverter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Pen' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Pens' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Region' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.RotateFlipType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.SolidBrush' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.StringAlignment' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.StringDigitSubstitute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.StringFormat' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.StringFormatFlags' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.StringTrimming' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.StringUnit' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.SystemBrushes' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.SystemFonts' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.SystemIcons' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.SystemPens' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.TextureBrush' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.ToolboxBitmapAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Configuration.SystemDrawingSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Design.CategoryNameCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Design.IPropertyValueUIService' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Design.IToolboxItemProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Design.IToolboxService' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Design.IToolboxUser' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Design.PaintValueEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Design.PropertyValueUIHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Design.PropertyValueUIItem' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Design.PropertyValueUIItemInvokeHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Design.ToolboxComponentsCreatedEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Design.ToolboxComponentsCreatedEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Design.ToolboxComponentsCreatingEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Design.ToolboxComponentsCreatingEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Design.ToolboxItem' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Design.ToolboxItemCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Design.ToolboxItemCreatorCallback' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Design.UITypeEditor' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Design.UITypeEditorEditStyle' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.AdjustableArrowCap' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.Blend' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.ColorBlend' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.CombineMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.CompositingMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.CompositingQuality' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.CoordinateSpace' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.CustomLineCap' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.DashCap' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.DashStyle' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.FillMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.FlushIntention' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.GraphicsContainer' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.GraphicsPath' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.GraphicsPathIterator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.GraphicsState' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.HatchBrush' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.HatchStyle' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.InterpolationMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.LinearGradientBrush' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.LinearGradientMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.LineCap' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.LineJoin' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.Matrix' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.MatrixOrder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.PathData' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.PathGradientBrush' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.PathPointType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.PenAlignment' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.PenType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.PixelOffsetMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.QualityMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.RegionData' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.SmoothingMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.WarpMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Drawing2D.WrapMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.BitmapData' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.ColorAdjustType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.ColorChannelFlag' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.ColorMap' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.ColorMapType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.ColorMatrix' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.ColorMatrixFlag' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.ColorMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.ColorPalette' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.EmfPlusRecordType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.EmfType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.Encoder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.EncoderParameter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.EncoderParameters' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.EncoderParameterValueType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.EncoderValue' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.FrameDimension' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.ImageAttributes' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.ImageCodecFlags' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.ImageCodecInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.ImageFlags' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.ImageFormat' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.ImageLockMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.Metafile' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.MetafileFrameUnit' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.MetafileHeader' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.MetafileType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.MetaHeader' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.PaletteFlags' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.PixelFormat' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.PlayRecordCallback' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.PropertyItem' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Imaging.WmfPlaceableFileHeader' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Printing.Duplex' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Printing.InvalidPrinterException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Printing.Margins' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Printing.MarginsConverter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Printing.PageSettings' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Printing.PaperKind' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Printing.PaperSize' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Printing.PaperSource' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Printing.PaperSourceKind' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Printing.PreviewPageInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Printing.PreviewPrintController' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Printing.PrintAction' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Printing.PrintController' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Printing.PrintDocument' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Printing.PrinterResolution' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Printing.PrinterResolutionKind' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Printing.PrinterSettings' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Printing.PrinterUnit' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Printing.PrinterUnitConvert' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Printing.PrintEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Printing.PrintEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Printing.PrintingPermission' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Printing.PrintingPermissionAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Printing.PrintingPermissionLevel' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Printing.PrintPageEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Printing.PrintPageEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Printing.PrintRange' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Printing.QueryPageSettingsEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Printing.QueryPageSettingsEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Printing.StandardPrintController' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Text.FontCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Text.GenericFontFamilies' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Text.HotkeyPrefix' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Text.InstalledFontCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Text.PrivateFontCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Drawing.Text.TextRenderingHint' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.INetworkProgress' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.IPEndPointCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.IUnsafeWebRequestCreate' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.NetworkProgressChangedEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.UiSynchronizationContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Cloud' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.CloudCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.PeerName' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.PeerNameRecord' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.PeerNameRecordCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.PeerNameRegistration' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.PeerNameResolver' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.PeerNameType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.PeerToPeerException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.PnrpPermission' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.PnrpPermissionAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.PnrpScope' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.ResolveCompletedEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.ResolveProgressChangedEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.ApplicationChangedEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.ContactManager' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.CreateContactCompletedEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.InviteCompletedEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.NameChangedEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.ObjectChangedEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.Peer' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.PeerApplication' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.PeerApplicationCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.PeerApplicationLaunchInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.PeerApplicationRegistrationType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.PeerChangeType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.PeerCollaboration' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.PeerCollaborationPermission' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.PeerCollaborationPermissionAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.PeerContact' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.PeerContactCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.PeerEndPoint' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.PeerEndPointCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.PeerInvitationResponse' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.PeerInvitationResponseType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.PeerNearMe' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.PeerNearMeChangedEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.PeerNearMeCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.PeerObject' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.PeerObjectCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.PeerPresenceInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.PeerPresenceStatus' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.PeerScope' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.PresenceChangedEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.RefreshDataCompletedEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.SubscribeCompletedEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.SubscriptionListChangedEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.PeerToPeer.Collaboration.SubscriptionType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Sockets.HttpPolicyDownloaderProtocol' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Sockets.SecurityCriticalAction' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Sockets.SocketPolicy' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Sockets.UdpAnySourceMulticastClient' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Net.Sockets.UdpSingleSourceMulticastClient' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Serialization.IDataContractSurrogate' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Serialization.ImportOptions' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Serialization.NetDataContractSerializer' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Serialization.XsdDataContractImporter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Serialization.Configuration.DataContractSerializerSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Serialization.Configuration.DeclaredTypeElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Serialization.Configuration.DeclaredTypeElementCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Serialization.Configuration.NetDataContractSerializerSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Serialization.Configuration.ParameterElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Serialization.Configuration.ParameterElementCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Serialization.Configuration.SerializationSectionGroup' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Serialization.Configuration.TypeElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Runtime.Serialization.Configuration.TypeElementCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Xml.IXmlMtomReaderInitializer' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Xml.IXmlMtomWriterInitializer' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.WebHttpBinding' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.WebHttpSecurity' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.WebHttpSecurityMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Activation.WebScriptServiceHostFactory' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Activation.WebServiceHostFactory' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Channels.JavascriptCallbackResponseMessageProperty' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Channels.StreamBodyWriter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Channels.WebBodyFormatMessageProperty' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Channels.WebContentFormat' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Channels.WebContentTypeMapper' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Channels.WebMessageEncodingBindingElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Configuration.WebHttpBindingCollectionElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Configuration.WebHttpBindingElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Configuration.WebHttpElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Configuration.WebHttpEndpointCollectionElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Configuration.WebHttpEndpointElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Configuration.WebHttpSecurityElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Configuration.WebMessageEncodingElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Configuration.WebScriptEnablingElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Configuration.WebScriptEndpointCollectionElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Configuration.WebScriptEndpointElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Description.JsonFaultDetail' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Description.WebHttpBehavior' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Description.WebHttpEndpoint' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Description.WebScriptEnablingBehavior' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Description.WebScriptEndpoint' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Description.WebServiceEndpoint' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Dispatcher.JsonQueryStringConverter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Dispatcher.QueryStringConverter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Dispatcher.WebHttpDispatchOperationSelector' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Web.AspNetCacheProfileAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Web.IncomingWebRequestContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Web.IncomingWebResponseContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Web.JavascriptCallbackBehaviorAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Web.OutgoingWebRequestContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Web.OutgoingWebResponseContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Web.WebChannelFactory<TChannel>' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Web.WebFaultException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Web.WebFaultException<T>' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Web.WebGetAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Web.WebInvokeAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Web.WebMessageBodyStyle' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Web.WebMessageFormat' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Web.WebOperationContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Web.WebServiceHost' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Transactions.DistributedTransactionPermission' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Transactions.DistributedTransactionPermissionAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Transactions.Configuration.DefaultSettingsSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Transactions.Configuration.MachineSettingsSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Transactions.Configuration.TransactionsSectionGroup' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ApplicationShutdownReason' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.BeginEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.DefaultHttpHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.EndEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.EventHandlerTaskAsyncHelper' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HtmlString' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpApplication' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpApplicationState' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpApplicationStateBase' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpApplicationStateWrapper' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpBrowserCapabilities' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpBrowserCapabilitiesBase' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpBrowserCapabilitiesWrapper' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpCacheability' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpCachePolicy' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpCachePolicyBase' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpCachePolicyWrapper' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpCacheRevalidation' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpCacheValidateHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpCacheVaryByContentEncodings' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpCacheVaryByHeaders' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpCacheVaryByParams' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpClientCertificate' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpCompileException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpContextBase' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpContextWrapper' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpCookie' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpCookieCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpCookieMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpFileCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpFileCollectionBase' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpFileCollectionWrapper' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpModuleCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpParseException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpPostedFile' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpPostedFileBase' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpPostedFileWrapper' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpRequest' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpRequestBase' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpRequestValidationException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpRequestWrapper' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpResponse' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpResponseBase' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpResponseSubstitutionCallback' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpResponseWrapper' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpRuntime' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpServerUtility' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpServerUtilityBase' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpServerUtilityWrapper' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpSessionStateBase' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpSessionStateWrapper' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpStaticObjectsCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpStaticObjectsCollectionBase' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpStaticObjectsCollectionWrapper' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpTaskAsyncHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpUnhandledException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpValidationStatus' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpWorkerRequest' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.HttpWriter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.IHtmlString' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.IHttpAsyncHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.IHttpHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.IHttpHandlerFactory' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.IHttpModule' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.IisTraceListener' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.IPartitionResolver' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ISubscriptionToken' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ITlsTokenBindingInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.MimeMapping' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ParserError' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ParserErrorCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.PreApplicationStartMethodAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ProcessInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ProcessModelInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ProcessShutdownReason' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ProcessStatus' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ReadEntityBodyMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.RequestNotification' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.RequestNotificationStatus' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.SiteMap' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.SiteMapNode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.SiteMapNodeCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.SiteMapProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.SiteMapProviderCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.SiteMapResolveEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.SiteMapResolveEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.StaticSiteMapProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.TaskEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.TraceContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.TraceContextEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.TraceContextEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.TraceContextRecord' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.TraceMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UnvalidatedRequestValues' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UnvalidatedRequestValuesBase' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UnvalidatedRequestValuesWrapper' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.VirtualPathUtility' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.WebPageTraceListener' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.XmlSiteMapProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Caching.AggregateCacheDependency' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Caching.Cache' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Caching.CacheDependency' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Caching.CacheItemPriority' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Caching.CacheItemRemovedCallback' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Caching.CacheItemRemovedReason' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Caching.CacheItemUpdateCallback' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Caching.CacheItemUpdateReason' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Caching.DatabaseNotEnabledForNotificationException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Caching.FileResponseElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Caching.HeaderElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Caching.IOutputCacheEntry' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Caching.MemoryResponseElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Caching.OutputCache' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Caching.OutputCacheProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Caching.OutputCacheProviderCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Caching.ResponseElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Caching.SqlCacheDependency' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Caching.SqlCacheDependencyAdmin' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Caching.SubstitutionResponseElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Caching.TableNotEnabledForNotificationException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.AppSettingsExpressionBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.AssemblyBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.BuildDependencySet' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.BuildManager' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.BuildManagerHostUnloadEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.BuildManagerHostUnloadEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.BuildProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.BuildProviderAppliesTo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.BuildProviderAppliesToAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.BuildProviderResultFlags' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.ClientBuildManager' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.ClientBuildManagerCallback' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.ClientBuildManagerParameter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.CompilerType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.ConnectionStringsExpressionBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.ControlBuilderInterceptor' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.DesignTimeResourceProviderFactoryAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.ExpressionBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.ExpressionBuilderContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.ExpressionEditorAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.ExpressionPrefixAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.FolderLevelBuildProviderAppliesTo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.FolderLevelBuildProviderAppliesToAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.IAssemblyPostProcessor' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.IImplicitResourceProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.ImplicitResourceKey' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.IResourceProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.LinePragmaCodeInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.PrecompilationFlags' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.ResourceExpressionBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.ResourceExpressionFields' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.ResourceProviderFactory' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.RouteUrlExpressionBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Compilation.RouteValueExpressionBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.AdapterDictionary' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.AnonymousIdentificationSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.AssemblyCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.AssemblyInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.AsyncPreloadModeFlags' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.AuthenticationMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.AuthenticationSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.AuthorizationRule' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.AuthorizationRuleAction' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.AuthorizationRuleCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.AuthorizationSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.BrowserCapabilitiesCodeGenerator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.BrowserCapabilitiesFactory' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.BrowserCapabilitiesFactoryBase' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.BufferModesCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.BufferModeSettings' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.BuildProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.BuildProviderCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.CacheSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.ClientTarget' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.ClientTargetCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.ClientTargetSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.CodeSubDirectoriesCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.CodeSubDirectory' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.CompilationSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.Compiler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.CompilerCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.CustomError' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.CustomErrorCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.CustomErrorsMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.CustomErrorsRedirectMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.CustomErrorsSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.DeploymentSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.EventMappingSettings' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.EventMappingSettingsCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.ExpressionBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.ExpressionBuilderCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.FcnMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.FolderLevelBuildProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.FolderLevelBuildProviderCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.FormsAuthenticationConfiguration' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.FormsAuthenticationCredentials' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.FormsAuthenticationUser' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.FormsAuthenticationUserCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.FormsAuthPasswordFormat' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.FormsProtectionEnum' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.FullTrustAssembliesSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.FullTrustAssembly' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.FullTrustAssemblyCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.GlobalizationSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.HealthMonitoringSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.HostingEnvironmentSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.HttpCapabilitiesBase' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.HttpCapabilitiesDefaultProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.HttpCapabilitiesProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.HttpCapabilitiesSectionHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.HttpConfigurationContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.HttpCookiesSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.HttpHandlerAction' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.HttpHandlerActionCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.HttpHandlersSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.HttpModuleAction' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.HttpModuleActionCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.HttpModulesSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.HttpRuntimeSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.IConfigMapPath' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.IConfigMapPathFactory' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.IdentitySection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.IgnoreDeviceFilterElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.IgnoreDeviceFilterElementCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.IRemoteWebConfigurationHostServer' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.LowerCaseStringConverter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.MachineKeyCompatibilityMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.MachineKeySection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.MachineKeyValidation' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.MachineKeyValidationConverter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.MembershipSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.NamespaceCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.NamespaceInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.OutputCacheProfile' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.OutputCacheProfileCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.OutputCacheSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.OutputCacheSettingsSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.PagesEnableSessionState' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.PagesSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.PartialTrustVisibleAssembliesSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.PartialTrustVisibleAssembly' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.PartialTrustVisibleAssemblyCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.PassportAuthentication' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.ProcessModelComAuthenticationLevel' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.ProcessModelComImpersonationLevel' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.ProcessModelLogLevel' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.ProcessModelSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.ProfileGroupSettings' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.ProfileGroupSettingsCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.ProfileGuidedOptimizationsFlags' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.ProfilePropertySettings' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.ProfilePropertySettingsCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.ProfileSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.ProfileSettings' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.ProfileSettingsCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.ProtocolCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.ProtocolElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.ProtocolsConfigurationHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.ProtocolsSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.ProvidersHelper' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.RegexWorker' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.RemoteWebConfigurationHostServer' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.RoleManagerSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.RootProfilePropertySettingsCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.RuleSettings' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.RuleSettingsCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.SecurityPolicySection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.SerializationMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.SessionPageStateSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.SessionStateSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.SiteMapSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.SqlCacheDependencyDatabase' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.SqlCacheDependencyDatabaseCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.SqlCacheDependencySection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.SystemWebCachingSectionGroup' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.SystemWebSectionGroup' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.TagMapCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.TagMapInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.TagPrefixCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.TagPrefixInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.TicketCompatibilityMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.TraceDisplayMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.TraceSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.TransformerInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.TransformerInfoCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.TrustLevel' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.TrustLevelCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.TrustSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.UrlMapping' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.UrlMappingCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.UrlMappingsSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.UserMapPath' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.VirtualDirectoryMapping' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.VirtualDirectoryMappingCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.WebApplicationLevel' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.WebConfigurationFileMap' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.WebConfigurationManager' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.WebContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.WebControlsSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.WebPartsPersonalization' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.WebPartsPersonalizationAuthorization' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.WebPartsSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.XhtmlConformanceMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.XhtmlConformanceSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Configuration.Internal.IInternalConfigWebHost' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Handlers.AssemblyResourceLoader' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Handlers.TraceHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.AppDomainFactory' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.AppDomainInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.AppDomainInfoEnum' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.AppDomainProtocolHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.ApplicationHost' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.ApplicationInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.ApplicationManager' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.AppManagerAppDomainFactory' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.HostingEnvironment' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.HostSecurityPolicyResolver' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.HostSecurityPolicyResults' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.IAdphManager' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.IAppDomainFactory' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.IAppDomainInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.IAppDomainInfoEnum' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.IApplicationHost' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.IApplicationPreloadManager' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.IApplicationPreloadUtil' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.IAppManagerAppDomainFactory' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.IISAPIRuntime' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.IListenerChannelCallback' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.IPphManager' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.IProcessHost' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.IProcessHostFactoryHelper' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.IProcessHostIdleAndHealthCheck' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.IProcessHostPreloadClient' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.IProcessHostSupportFunctions' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.IProcessPingCallback' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.IRegisteredObject' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.ISAPIRuntime' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.IStopListeningRegisteredObject' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.ISuspendibleRegisteredObject' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.ProcessHost' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.ProcessHostFactoryHelper' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.ProcessProtocolHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.SimpleWorkerRequest' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.VirtualDirectory' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.VirtualFile' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.VirtualFileBase' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Hosting.VirtualPathProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Instrumentation.PageExecutionContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Instrumentation.PageExecutionListener' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Instrumentation.PageInstrumentationService' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Mail.MailAttachment' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Mail.MailEncoding' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Mail.MailFormat' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Mail.MailMessage' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Mail.MailPriority' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Mail.SmtpMail' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.BufferedWebEventProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.EventLogWebEventProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.EventNotificationType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.IisTraceWebEventProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.IRegiisUtility' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.IWebEventCustomEvaluator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.MailEventNotificationInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.MailWebEventProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.RegiisUtility' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.RuleFiringRecord' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.SessionStateType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.SimpleMailWebEventProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.SqlExecutionException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.SqlFeatures' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.SqlServices' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.SqlWebEventProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.TemplatedMailWebEventProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.TraceWebEventProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.WebApplicationInformation' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.WebApplicationLifetimeEvent' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.WebAuditEvent' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.WebAuthenticationFailureAuditEvent' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.WebAuthenticationSuccessAuditEvent' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.WebBaseErrorEvent' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.WebBaseEvent' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.WebBaseEventCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.WebErrorEvent' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.WebEventBufferFlushInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.WebEventCodes' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.WebEventFormatter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.WebEventManager' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.WebEventProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.WebFailureAuditEvent' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.WebHeartbeatEvent' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.WebManagementEvent' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.WebProcessInformation' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.WebProcessStatistics' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.WebRequestErrorEvent' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.WebRequestEvent' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.WebRequestInformation' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.WebSuccessAuditEvent' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.WebThreadInformation' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.WebViewStateFailureAuditEvent' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Management.WmiWebEventProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ArrayModelBinder<TElement>' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ArrayModelBinderProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.AssociatedMetadataProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.AssociatedValidatorProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.BinaryDataModelBinderProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.BindingBehavior' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.BindingBehaviorAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.BindNeverAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.BindRequiredAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.CollectionModelBinder<TElement>' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.CollectionModelBinderProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ComplexModel' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ComplexModelBinder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ComplexModelBinderProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ComplexModelResult' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ControlAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ControlValueProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.CookieAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.CookieValueProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.DataAnnotationsModelMetadata' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.DataAnnotationsModelMetadataProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.DataAnnotationsModelValidationFactory' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.DataAnnotationsModelValidator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.DataAnnotationsModelValidator<TAttribute>' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.DataAnnotationsModelValidatorProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.DataAnnotationsValidatableObjectAdapterFactory' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.DefaultModelBinder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.DictionaryModelBinder<TKey, TValue>' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.DictionaryModelBinderProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.DictionaryValueProvider<TValue>' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.EmptyModelMetadataProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ExtensibleModelBinderAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.FormAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.FormValueProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.GenericModelBinderProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.IMetadataAware' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.IModelBinder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.IModelNameProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.IUnvalidatedValueProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.IUnvalidatedValueProviderSource' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.IValueProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.IValueProviderSource' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.KeyValuePairModelBinder<TKey, TValue>' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.KeyValuePairModelBinderProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ModelBinderDictionary' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ModelBinderErrorMessageProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ModelBinderErrorMessageProviders' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ModelBinderProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ModelBinderProviderCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ModelBinderProviderOptionsAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ModelBinderProviders' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ModelBinders' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ModelBindingContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ModelBindingExecutionContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ModelError' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ModelErrorCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ModelMetadata' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ModelMetadataProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ModelMetadataProviders' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ModelState' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ModelStateDictionary' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ModelValidatedEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ModelValidatingEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ModelValidationNode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ModelValidationResult' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ModelValidator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ModelValidatorProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ModelValidatorProviderCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ModelValidatorProviders' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.MutableObjectModelBinder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.MutableObjectModelBinderProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.NameValueCollectionValueProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ProfileAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ProfileValueProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.QueryStringAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.QueryStringValueProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.RangeAttributeAdapter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.RegularExpressionAttributeAdapter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.RequiredAttributeAdapter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.RouteDataAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.RouteDataValueProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.SessionAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.SimpleModelBinderProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.SimpleValueProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.StringLengthAttributeAdapter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.TypeConverterModelBinder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.TypeConverterModelBinderProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.TypeMatchModelBinder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.TypeMatchModelBinderProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.UserProfileAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.UserProfileValueProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ValidatableObjectAdapter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ValueProviderCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ValueProviderResult' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ValueProviderSourceAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ViewStateAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.ModelBinding.ViewStateValueProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Profile.CustomProviderDataAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Profile.DefaultProfile' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Profile.ProfileAuthenticationOption' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Profile.ProfileAutoSaveEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Profile.ProfileAutoSaveEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Profile.ProfileBase' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Profile.ProfileEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Profile.ProfileEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Profile.ProfileGroupBase' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Profile.ProfileInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Profile.ProfileInfoCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Profile.ProfileManager' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Profile.ProfileMigrateEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Profile.ProfileMigrateEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Profile.ProfileModule' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Profile.ProfileProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Profile.ProfileProviderAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Profile.ProfileProviderCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Profile.SettingsAllowAnonymousAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Profile.SqlProfileProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Routing.HttpMethodConstraint' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Routing.IRouteConstraint' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Routing.IRouteHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Routing.PageRouteHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Routing.RequestContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Routing.Route' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Routing.RouteBase' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Routing.RouteCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Routing.RouteData' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Routing.RouteDirection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Routing.RouteTable' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Routing.RouteValueDictionary' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Routing.StopRoutingHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Routing.UrlRoutingHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Routing.UrlRoutingModule' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Routing.VirtualPathData' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.ActiveDirectoryConnectionProtection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.ActiveDirectoryMembershipProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.ActiveDirectoryMembershipUser' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.AnonymousIdentificationEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.AnonymousIdentificationEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.AnonymousIdentificationModule' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.AuthorizationStoreRoleProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.CookieProtection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.DefaultAuthenticationEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.DefaultAuthenticationEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.DefaultAuthenticationModule' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.FileAuthorizationModule' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.FormsAuthentication' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.FormsAuthenticationEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.FormsAuthenticationEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.FormsAuthenticationModule' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.FormsAuthenticationTicket' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.FormsIdentity' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.MachineKey' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.MachineKeyProtection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.Membership' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.MembershipPasswordAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.PassportAuthenticationEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.PassportAuthenticationEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.PassportAuthenticationModule' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.PassportIdentity' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.PassportPrincipal' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.RoleManagerEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.RoleManagerEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.RoleManagerModule' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.RolePrincipal' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.RoleProviderCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.Roles' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.SqlMembershipProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.SqlRoleProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.UrlAuthorizationModule' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.WindowsAuthenticationEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.WindowsAuthenticationEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.WindowsAuthenticationModule' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.WindowsTokenRoleProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.AntiXss.AntiXssEncoder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.AntiXss.LowerCodeCharts' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.AntiXss.LowerMidCodeCharts' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.AntiXss.MidCodeCharts' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.AntiXss.UpperCodeCharts' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Security.AntiXss.UpperMidCodeCharts' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.SessionState.HttpSessionState' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.SessionState.HttpSessionStateContainer' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.SessionState.IHttpSessionState' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.SessionState.IPartialSessionState' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.SessionState.IReadOnlySessionState' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.SessionState.IRequiresSessionState' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.SessionState.ISessionIDManager' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.SessionState.ISessionStateItemCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.SessionState.IStateRuntime' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.SessionState.SessionIDManager' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.SessionState.SessionStateActions' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.SessionState.SessionStateBehavior' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.SessionState.SessionStateItemCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.SessionState.SessionStateItemExpireCallback' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.SessionState.SessionStateMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.SessionState.SessionStateModule' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.SessionState.SessionStateStoreData' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.SessionState.SessionStateStoreProviderBase' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.SessionState.SessionStateUtility' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.SessionState.StateRuntime' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.AttributeCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.BaseParser' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.BasePartialCachingControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.BaseTemplateParser' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.BindableTemplateBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.BoundPropertyEntry' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.BuilderPropertyEntry' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.BuildMethod' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.BuildTemplateMethod' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ChtmlTextWriter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ClientIDMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ClientScriptManager' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.CodeBlockType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.CodeConstructType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.CodeStatementBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.CompilationMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.CompiledBindableTemplateBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.CompiledTemplateBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ComplexPropertyEntry' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ConflictOptions' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ConstructorNeedsTagAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.Control' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ControlBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ControlBuilderAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ControlCachePolicy' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ControlCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ControlSkin' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ControlSkinDelegate' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ControlValuePropertyAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.CssClassPropertyAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.CssStyleCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.DataBinder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.DataBinding' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.DataBindingCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.DataBindingHandlerAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.DataBoundLiteralControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.DataKeyPropertyAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.DataSourceCacheDurationConverter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.DataSourceCacheExpiry' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.DataSourceCapabilities' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.DataSourceControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.DataSourceControlBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.DataSourceOperation' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.DataSourceSelectArguments' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.DataSourceView' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.DataSourceViewOperationCallback' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.DataSourceViewSelectCallback' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.DesignerDataBoundLiteralControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.DesignTimeParseData' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.DesignTimeTemplateParser' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.EmptyControlCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.EventEntry' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ExpressionBinding' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ExpressionBindingCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ExtractTemplateValuesMethod' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.FileLevelControlBuilderAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.FileLevelMasterPageControlBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.FileLevelPageControlBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.FileLevelUserControlBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.FilterableAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HiddenFieldPageStatePersister' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HierarchicalDataSourceControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HierarchicalDataSourceView' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.Html32TextWriter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlTextWriter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlTextWriterAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlTextWriterStyle' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlTextWriterTag' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.IAttributeAccessor' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.IAutoFieldGenerator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.IBindableControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.IBindableTemplate' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ICallbackEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ICheckBoxControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ICodeBlockTypeAccessor' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.IControlBuilderAccessor' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.IControlDesignerAccessor' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.IDataBindingsAccessor' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.IDataItemContainer' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.IDataKeysControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.IDataSource' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.IDataSourceViewSchemaAccessor' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.IDReferencePropertyAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.IEditableTextControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.IExpressionsAccessor' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.IFilterResolutionService' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.IHierarchicalDataSource' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.IHierarchicalEnumerable' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.IHierarchyData' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ImageClickEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ImageClickEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.INamingContainer' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.INavigateUIData' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.IndexedString' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.IParserAccessor' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.IPostBackDataHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.IPostBackEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.IResourceUrlGenerator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.IStateFormatter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.IStateManager' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.IStyleSheet' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ITemplate' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ITextControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.IThemeResolutionService' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.IUrlResolutionService' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.IUserControlDesignerAccessor' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.IUserControlTypeResolutionService' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.IValidator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ListSourceHelper' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.LiteralControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.LosFormatter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.MasterPage' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.MasterPageControlBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.NonVisualControlAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ObjectConverter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ObjectPersistData' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ObjectStateFormatter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ObjectTagBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.OutputCacheLocation' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.OutputCacheParameters' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.Page' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.PageAsyncTask' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.PageHandlerFactory' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.PageParser' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.PageParserFilter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.PageStatePersister' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.PageTheme' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.Pair' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ParseChildrenAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ParseRecorder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.PartialCachingAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.PartialCachingControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.PersistChildrenAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.PersistenceMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.PersistenceModeAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.PostBackOptions' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.PropertyConverter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.PropertyEntry' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.RenderMethod' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.RenderTraceListener' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.RootBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.SessionPageStatePersister' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.SimplePropertyEntry' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.SimpleWebHandlerParser' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.SkinBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.StateBag' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.StateItem' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.StateManagedCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.StaticPartialCachingControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.SupportsEventValidationAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.TagPrefixAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.TemplateBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.TemplateContainerAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.TemplateControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.TemplateControlParser' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.TemplateInstance' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.TemplateInstanceAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.TemplateParser' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.TemplatePropertyEntry' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ThemeableAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ThemeProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ToolboxDataAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.Triplet' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.UnobtrusiveValidationMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.UrlPropertyAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.UserControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.UserControlControlBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ValidateRequestMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ValidationPropertyAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ValidationSettings' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ValidatorCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.VerificationAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.VerificationConditionalOperator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.VerificationReportLevel' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.VerificationRule' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ViewStateEncryptionMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ViewStateException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ViewStateMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.ViewStateModeByIdAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.VirtualReferenceType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebResourceAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebServiceParser' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.XhtmlMobileDocType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.XhtmlTextWriter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.XPathBinder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.Adapters.ControlAdapter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.Adapters.PageAdapter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlAnchor' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlArea' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlAudio' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlButton' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlContainerControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlEmbed' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlEmptyTagControlBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlForm' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlGenericControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlHead' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlHeadBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlIframe' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlImage' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlInputButton' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlInputCheckBox' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlInputControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlInputFile' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlInputGenericControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlInputHidden' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlInputImage' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlInputPassword' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlInputRadioButton' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlInputReset' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlInputSubmit' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlInputText' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlLink' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlMeta' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlSelect' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlSelectBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlSource' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlTable' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlTableCell' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlTableCellCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlTableRow' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlTableRowCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlTextArea' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlTitle' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlTrack' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.HtmlControls.HtmlVideo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.AccessDataSource' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.AccessDataSourceView' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.AdCreatedEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.AdCreatedEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.AdRotator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.AssociatedControlConverter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.AuthenticateEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.AuthenticateEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.AutoCompleteType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.AutoFieldsGenerator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.AutoGeneratedField' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.AutoGeneratedFieldProperties' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.BaseCompareValidator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.BaseDataBoundControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.BaseDataList' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.BaseValidator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.BorderStyle' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.BoundColumn' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.BoundField' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.BulletedList' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.BulletedListDisplayMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.BulletedListEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.BulletedListEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.BulletStyle' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.Button' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ButtonColumn' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ButtonColumnType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ButtonField' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ButtonFieldBase' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ButtonType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.Calendar' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.CalendarDay' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.CalendarSelectionMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.CallingDataMethodsEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.CallingDataMethodsEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ChangePassword' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.CheckBox' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.CheckBoxField' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.CheckBoxList' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.CircleHotSpot' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.CommandEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.CommandEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.CommandField' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.CompareValidator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.CompleteWizardStep' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.CompositeControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.CompositeDataBoundControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.Content' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ContentDirection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ContentPlaceHolder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ControlIDConverter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ControlParameter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ControlPropertyNameConverter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.CookieParameter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.CreateUserErrorEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.CreateUserErrorEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.CreateUserWizard' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.CreateUserWizardStep' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.CreatingModelDataSourceEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.CreatingModelDataSourceEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.CustomValidator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataBoundControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataBoundControlMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataControlCellType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataControlCommands' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataControlField' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataControlFieldCell' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataControlFieldCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataControlFieldHeaderCell' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataControlRowState' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataControlRowType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataGrid' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataGridColumn' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataGridColumnCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataGridCommandEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataGridCommandEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataGridItem' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataGridItemCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataGridItemEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataGridItemEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataGridPageChangedEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataGridPageChangedEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataGridPagerStyle' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataGridSortCommandEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataGridSortCommandEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataKey' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataKeyArray' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataKeyCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataList' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataListCommandEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataListCommandEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataListItem' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataListItemCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataListItemEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataListItemEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DataSourceSelectResultProcessingOptions' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DayNameFormat' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DayRenderEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DayRenderEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DetailsView' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DetailsViewCommandEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DetailsViewCommandEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DetailsViewDeletedEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DetailsViewDeletedEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DetailsViewDeleteEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DetailsViewDeleteEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DetailsViewInsertedEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DetailsViewInsertedEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DetailsViewInsertEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DetailsViewInsertEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DetailsViewMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DetailsViewModeEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DetailsViewModeEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DetailsViewPageEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DetailsViewPageEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DetailsViewPagerRow' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DetailsViewRow' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DetailsViewRowCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DetailsViewRowsGenerator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DetailsViewUpdatedEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DetailsViewUpdatedEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DetailsViewUpdateEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DetailsViewUpdateEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.DropDownList' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.EditCommandColumn' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.EmbeddedMailObject' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.EmbeddedMailObjectsCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.FileUpload' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.FirstDayOfWeek' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.FontInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.FontNamesConverter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.FontSize' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.FontUnit' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.FontUnitConverter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.FormParameter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.FormView' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.FormViewCommandEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.FormViewCommandEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.FormViewDeletedEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.FormViewDeletedEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.FormViewDeleteEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.FormViewDeleteEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.FormViewInsertedEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.FormViewInsertedEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.FormViewInsertEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.FormViewInsertEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.FormViewMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.FormViewModeEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.FormViewModeEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.FormViewPageEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.FormViewPageEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.FormViewPagerRow' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.FormViewRow' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.FormViewUpdatedEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.FormViewUpdatedEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.FormViewUpdateEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.FormViewUpdateEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.GridLines' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.GridView' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.GridViewCancelEditEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.GridViewCancelEditEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.GridViewColumnsGenerator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.GridViewCommandEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.GridViewCommandEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.GridViewDeletedEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.GridViewDeletedEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.GridViewDeleteEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.GridViewDeleteEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.GridViewEditEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.GridViewEditEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.GridViewPageEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.GridViewPageEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.GridViewRow' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.GridViewRowCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.GridViewRowEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.GridViewRowEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.GridViewSelectEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.GridViewSelectEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.GridViewSortEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.GridViewSortEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.GridViewUpdatedEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.GridViewUpdatedEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.GridViewUpdateEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.GridViewUpdateEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.HiddenField' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.HierarchicalDataBoundControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.HorizontalAlign' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.HotSpot' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.HotSpotCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.HotSpotMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.HyperLink' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.HyperLinkColumn' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.HyperLinkControlBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.HyperLinkField' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.IButtonControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ICallbackContainer' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ICompositeControlDesignerAccessor' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.IDataBoundControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.IDataBoundItemControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.IDataBoundListControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.IFieldControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.Image' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ImageAlign' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ImageButton' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ImageField' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ImageMap' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ImageMapEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ImageMapEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.IPersistedSelector' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.IPostBackContainer' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.IRepeatInfoUser' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.Label' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.LabelControlBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.LinkButton' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.LinkButtonControlBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ListBox' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ListControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ListItem' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ListItemCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ListItemControlBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ListItemType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ListSelectionMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.Literal' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.LiteralControlBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.LiteralMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.Localize' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.Login' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.LoginCancelEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.LoginCancelEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.LoginFailureAction' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.LoginName' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.LoginStatus' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.LoginTextLayout' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.LoginView' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.LogoutAction' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.MailDefinition' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.MailMessageEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.MailMessageEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.Menu' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.MenuEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.MenuEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.MenuItem' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.MenuItemBinding' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.MenuItemBindingCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.MenuItemCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.MenuItemStyle' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.MenuItemStyleCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.MenuItemTemplateContainer' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.MenuRenderingMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ModelDataMethodResult' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ModelDataSource' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ModelDataSourceMethod' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ModelDataSourceView' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ModelErrorMessage' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ModelMethodContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.MonthChangedEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.MonthChangedEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.MultiView' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.MultiViewControlBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.NextPrevFormat' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ObjectDataSource' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ObjectDataSourceDisposingEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ObjectDataSourceDisposingEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ObjectDataSourceEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ObjectDataSourceFilteringEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ObjectDataSourceFilteringEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ObjectDataSourceMethodEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ObjectDataSourceMethodEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ObjectDataSourceObjectEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ObjectDataSourceSelectingEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ObjectDataSourceSelectingEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ObjectDataSourceStatusEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ObjectDataSourceStatusEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ObjectDataSourceView' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.Orientation' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.PagedDataSource' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.PagerButtons' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.PagerMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.PagerPosition' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.PagerSettings' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.Panel' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.PanelStyle' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.Parameter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ParameterCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ParsingCulture' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.PasswordRecovery' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.PathDirection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.PlaceHolder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.PlaceHolderControlBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.PolygonHotSpot' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ProfileParameter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.QueryExtensions' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.QueryStringParameter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.RadioButton' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.RadioButtonList' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.RangeValidator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.RectangleHotSpot' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.RegularExpressionValidator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.RepeatDirection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.Repeater' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.RepeaterCommandEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.RepeaterCommandEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.RepeaterItem' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.RepeaterItemCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.RepeaterItemEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.RepeaterItemEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.RepeatInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.RepeatLayout' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.RequiredFieldValidator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.RoleGroup' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.RoleGroupCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.RouteParameter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ScrollBars' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.SelectedDatesCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.SelectResult' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.SendMailErrorEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.SendMailErrorEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ServerValidateEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ServerValidateEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.SessionParameter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.SiteMapDataSource' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.SiteMapDataSourceView' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.SiteMapHierarchicalDataSourceView' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.SiteMapNodeItem' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.SiteMapNodeItemEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.SiteMapNodeItemEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.SiteMapNodeItemType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.SiteMapPath' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.SortDirection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.SqlDataSource' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.SqlDataSourceCommandEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.SqlDataSourceCommandEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.SqlDataSourceCommandType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.SqlDataSourceFilteringEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.SqlDataSourceFilteringEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.SqlDataSourceMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.SqlDataSourceSelectingEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.SqlDataSourceSelectingEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.SqlDataSourceStatusEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.SqlDataSourceStatusEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.SqlDataSourceView' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.StringArrayConverter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.Style' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.StyleCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.SubMenuStyle' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.SubMenuStyleCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.Substitution' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.Table' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TableCaptionAlign' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TableCell' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TableCellCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TableCellControlBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TableFooterRow' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TableHeaderCell' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TableHeaderRow' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TableHeaderScope' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TableItemStyle' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TableRow' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TableRowCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TableRowSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TableSectionStyle' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TableStyle' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TargetConverter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TemplateColumn' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TemplatedWizardStep' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TemplateField' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TextAlign' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TextBox' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TextBoxControlBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TextBoxMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TitleFormat' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TreeNode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TreeNodeBinding' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TreeNodeBindingCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TreeNodeCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TreeNodeEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TreeNodeEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TreeNodeSelectAction' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TreeNodeStyle' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TreeNodeStyleCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TreeNodeTypes' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TreeView' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.TreeViewImageSet' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.Unit' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.UnitConverter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.UnitType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ValidatedControlConverter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ValidationCompareOperator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ValidationDataType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ValidationSummary' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ValidationSummaryDisplayMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ValidatorDisplay' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.VerticalAlign' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.View' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.ViewCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebColorConverter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.Wizard' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WizardNavigationEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WizardNavigationEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WizardStep' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WizardStepBase' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WizardStepCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WizardStepControlBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WizardStepType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.Xml' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.XmlBuilder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.XmlDataSource' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.XmlDataSourceView' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.XmlHierarchicalDataSourceView' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.Adapters.DataBoundControlAdapter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.Adapters.HideDisabledControlAdapter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.Adapters.HierarchicalDataBoundControlAdapter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.Adapters.MenuAdapter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.Adapters.WebControlAdapter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.AppearanceEditorPart' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.BehaviorEditorPart' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.CatalogPart' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.CatalogPartChrome' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.CatalogPartCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.CatalogZone' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.CatalogZoneBase' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.ConnectionConsumerAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.ConnectionInterfaceCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.ConnectionPoint' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.ConnectionProviderAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.ConnectionsZone' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.ConsumerConnectionPoint' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.ConsumerConnectionPointCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.DeclarativeCatalogPart' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.EditorPart' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.EditorPartChrome' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.EditorPartCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.EditorZone' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.EditorZoneBase' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.ErrorWebPart' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.FieldCallback' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.GenericWebPart' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.ImportCatalogPart' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.IPersonalizable' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.ITrackingPersonalizable' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.ITransformerConfigurationControl' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.IVersioningPersonalizable' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.IWebActionable' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.IWebEditable' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.IWebPart' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.IWebPartField' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.IWebPartParameters' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.IWebPartRow' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.IWebPartTable' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.LayoutEditorPart' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.PageCatalogPart' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.ParametersCallback' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.Part' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.PartChromeState' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.PartChromeType' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.PersonalizableAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.PersonalizationAdministration' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.PersonalizationDictionary' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.PersonalizationEntry' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.PersonalizationProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.PersonalizationProviderCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.PersonalizationScope' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.PersonalizationState' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.PersonalizationStateInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.PersonalizationStateInfoCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.PersonalizationStateQuery' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.PropertyGridEditorPart' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.ProviderConnectionPoint' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.ProviderConnectionPointCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.ProxyWebPart' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.ProxyWebPartConnectionCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.ProxyWebPartManager' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.RowCallback' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.RowToFieldTransformer' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.RowToParametersTransformer' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.SharedPersonalizationStateInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.SqlPersonalizationProvider' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.TableCallback' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.TitleStyle' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.ToolZone' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.TransformerTypeCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.UnauthorizedWebPart' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.UserPersonalizationStateInfo' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebBrowsableAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebDescriptionAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebDisplayNameAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPart' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartAddingEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartAddingEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartAuthorizationEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartAuthorizationEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartCancelEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartCancelEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartChrome' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartConnection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartConnectionCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartConnectionsCancelEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartConnectionsCancelEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartConnectionsEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartConnectionsEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartDescription' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartDescriptionCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartDisplayMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartDisplayModeCancelEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartDisplayModeCancelEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartDisplayModeCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartDisplayModeEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartDisplayModeEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartExportMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartHelpMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartManager' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartManagerInternals' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartMenuStyle' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartMovingEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartMovingEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartPersonalization' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartTracker' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartTransformer' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartTransformerAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartTransformerCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartUserCapability' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartVerb' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartVerbCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartVerbRenderMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartVerbsEventArgs' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartVerbsEventHandler' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartZone' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartZoneBase' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebPartZoneCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.UI.WebControls.WebParts.WebZone' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Util.HttpEncoder' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Util.IWebObjectFactory' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Util.IWebPropertyAccessor' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Util.RequestValidationSource' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Util.RequestValidator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Util.TransactedCallback' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Util.Transactions' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Util.WorkItem' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.Util.WorkItemCallback' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.WebSockets.AspNetWebSocket' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.WebSockets.AspNetWebSocketContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Web.WebSockets.AspNetWebSocketOptions' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Xml.XmlXapResolver' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Xml.Serialization.CodeExporter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Xml.Serialization.SchemaImporter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Xml.Serialization.SoapCodeExporter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Xml.Serialization.SoapSchemaExporter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Xml.Serialization.SoapSchemaImporter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Xml.Serialization.XmlCodeExporter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Xml.Serialization.Advanced.SchemaImporterExtension' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Xml.Serialization.Advanced.SchemaImporterExtensionCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Xml.Serialization.Configuration.DateTimeSerializationSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Xml.Serialization.Configuration.RootedPathValidator' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Xml.Serialization.Configuration.SchemaImporterExtensionElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Xml.Serialization.Configuration.SchemaImporterExtensionElementCollection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Xml.Serialization.Configuration.SchemaImporterExtensionsSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Xml.Serialization.Configuration.SerializationSectionGroup' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Xml.Serialization.Configuration.XmlSerializerSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Xml.XmlConfiguration.XmlReaderSection' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.Xml.XmlConfiguration.XsltConfigSection' does not exist in the implementation but it does exist in the contract.
+
+// Members can't be added because types are on NS20 and the missing members required types that are not on NS20 and we are ignoring those for netcore20:
+MembersMustExist : Member 'System.Activator.CreateComInstanceFrom(System.String, System.String)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Activator.CreateComInstanceFrom(System.String, System.String, System.Byte[], System.Configuration.Assemblies.AssemblyHashAlgorithm)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Activator.CreateInstance(System.ActivationContext)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Activator.CreateInstance(System.ActivationContext, System.String[])' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Activator.CreateInstance(System.AppDomain, System.String, System.String)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Activator.CreateInstance(System.AppDomain, System.String, System.String, System.Boolean, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo, System.Object[])' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Activator.CreateInstance(System.AppDomain, System.String, System.String, System.Boolean, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo, System.Object[], System.Security.Policy.Evidence)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Activator.CreateInstance(System.String, System.String)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Activator.CreateInstance(System.String, System.String, System.Boolean, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo, System.Object[])' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Activator.CreateInstance(System.String, System.String, System.Boolean, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo, System.Object[], System.Security.Policy.Evidence)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Activator.CreateInstance(System.String, System.String, System.Object[])' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Activator.CreateInstanceFrom(System.AppDomain, System.String, System.String)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Activator.CreateInstanceFrom(System.AppDomain, System.String, System.String, System.Boolean, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo, System.Object[])' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Activator.CreateInstanceFrom(System.AppDomain, System.String, System.String, System.Boolean, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo, System.Object[], System.Security.Policy.Evidence)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Activator.CreateInstanceFrom(System.String, System.String)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Activator.CreateInstanceFrom(System.String, System.String, System.Boolean, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo, System.Object[])' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Activator.CreateInstanceFrom(System.String, System.String, System.Boolean, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo, System.Object[], System.Security.Policy.Evidence)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Activator.CreateInstanceFrom(System.String, System.String, System.Object[])' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Activator.GetObject(System.Type, System.String)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Activator.GetObject(System.Type, System.String, System.Object)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.ActivationContext.get()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.ApplicationIdentity.get()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.ApplicationTrust.get()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.CreateComInstanceFrom(System.String, System.String)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.CreateComInstanceFrom(System.String, System.String, System.Byte[], System.Configuration.Assemblies.AssemblyHashAlgorithm)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.CreateDomain(System.String, System.Security.Policy.Evidence)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.CreateDomain(System.String, System.Security.Policy.Evidence, System.AppDomainSetup)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.CreateDomain(System.String, System.Security.Policy.Evidence, System.AppDomainSetup, System.Security.PermissionSet, System.Security.Policy.StrongName[])' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.CreateDomain(System.String, System.Security.Policy.Evidence, System.String, System.String, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.CreateDomain(System.String, System.Security.Policy.Evidence, System.String, System.String, System.Boolean, System.AppDomainInitializer, System.String[])' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.CreateInstance(System.String, System.String)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.CreateInstance(System.String, System.String, System.Boolean, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo, System.Object[])' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.CreateInstance(System.String, System.String, System.Boolean, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo, System.Object[], System.Security.Policy.Evidence)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.CreateInstance(System.String, System.String, System.Object[])' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.CreateInstanceAndUnwrap(System.String, System.String)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.CreateInstanceAndUnwrap(System.String, System.String, System.Boolean, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo, System.Object[])' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.CreateInstanceAndUnwrap(System.String, System.String, System.Boolean, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo, System.Object[], System.Security.Policy.Evidence)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.CreateInstanceAndUnwrap(System.String, System.String, System.Object[])' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.CreateInstanceFrom(System.String, System.String)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.CreateInstanceFrom(System.String, System.String, System.Boolean, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo, System.Object[])' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.CreateInstanceFrom(System.String, System.String, System.Boolean, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo, System.Object[], System.Security.Policy.Evidence)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.CreateInstanceFrom(System.String, System.String, System.Object[])' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.CreateInstanceFromAndUnwrap(System.String, System.String)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.CreateInstanceFromAndUnwrap(System.String, System.String, System.Boolean, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo, System.Object[])' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.CreateInstanceFromAndUnwrap(System.String, System.String, System.Boolean, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo, System.Object[], System.Security.Policy.Evidence)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.CreateInstanceFromAndUnwrap(System.String, System.String, System.Object[])' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.DefineDynamicAssembly(System.Reflection.AssemblyName, System.Reflection.Emit.AssemblyBuilderAccess)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.DefineDynamicAssembly(System.Reflection.AssemblyName, System.Reflection.Emit.AssemblyBuilderAccess, System.Collections.Generic.IEnumerable<System.Reflection.Emit.CustomAttributeBuilder>)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.DefineDynamicAssembly(System.Reflection.AssemblyName, System.Reflection.Emit.AssemblyBuilderAccess, System.Collections.Generic.IEnumerable<System.Reflection.Emit.CustomAttributeBuilder>, System.Security.SecurityContextSource)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.DefineDynamicAssembly(System.Reflection.AssemblyName, System.Reflection.Emit.AssemblyBuilderAccess, System.Security.PermissionSet, System.Security.PermissionSet, System.Security.PermissionSet)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.DefineDynamicAssembly(System.Reflection.AssemblyName, System.Reflection.Emit.AssemblyBuilderAccess, System.Security.Policy.Evidence)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.DefineDynamicAssembly(System.Reflection.AssemblyName, System.Reflection.Emit.AssemblyBuilderAccess, System.Security.Policy.Evidence, System.Security.PermissionSet, System.Security.PermissionSet, System.Security.PermissionSet)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.DefineDynamicAssembly(System.Reflection.AssemblyName, System.Reflection.Emit.AssemblyBuilderAccess, System.String)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.DefineDynamicAssembly(System.Reflection.AssemblyName, System.Reflection.Emit.AssemblyBuilderAccess, System.String, System.Boolean, System.Collections.Generic.IEnumerable<System.Reflection.Emit.CustomAttributeBuilder>)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.DefineDynamicAssembly(System.Reflection.AssemblyName, System.Reflection.Emit.AssemblyBuilderAccess, System.String, System.Security.PermissionSet, System.Security.PermissionSet, System.Security.PermissionSet)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.DefineDynamicAssembly(System.Reflection.AssemblyName, System.Reflection.Emit.AssemblyBuilderAccess, System.String, System.Security.Policy.Evidence)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.DefineDynamicAssembly(System.Reflection.AssemblyName, System.Reflection.Emit.AssemblyBuilderAccess, System.String, System.Security.Policy.Evidence, System.Security.PermissionSet, System.Security.PermissionSet, System.Security.PermissionSet)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.DefineDynamicAssembly(System.Reflection.AssemblyName, System.Reflection.Emit.AssemblyBuilderAccess, System.String, System.Security.Policy.Evidence, System.Security.PermissionSet, System.Security.PermissionSet, System.Security.PermissionSet, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.DefineDynamicAssembly(System.Reflection.AssemblyName, System.Reflection.Emit.AssemblyBuilderAccess, System.String, System.Security.Policy.Evidence, System.Security.PermissionSet, System.Security.PermissionSet, System.Security.PermissionSet, System.Boolean, System.Collections.Generic.IEnumerable<System.Reflection.Emit.CustomAttributeBuilder>)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.DoCallBack(System.CrossAppDomainDelegate)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.DomainManager.get()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.Evidence.get()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.ExecuteAssembly(System.String, System.Security.Policy.Evidence)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.ExecuteAssembly(System.String, System.Security.Policy.Evidence, System.String[])' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.ExecuteAssembly(System.String, System.Security.Policy.Evidence, System.String[], System.Byte[], System.Configuration.Assemblies.AssemblyHashAlgorithm)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.ExecuteAssemblyByName(System.Reflection.AssemblyName, System.Security.Policy.Evidence, System.String[])' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.ExecuteAssemblyByName(System.String, System.Security.Policy.Evidence)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.ExecuteAssemblyByName(System.String, System.Security.Policy.Evidence, System.String[])' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.Load(System.Byte[], System.Byte[], System.Security.Policy.Evidence)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.Load(System.Reflection.AssemblyName, System.Security.Policy.Evidence)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.Load(System.String, System.Security.Policy.Evidence)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.PermissionSet.get()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.SetAppDomainPolicy(System.Security.Policy.PolicyLevel)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.SetData(System.String, System.Object, System.Security.IPermission)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.AppDomain.SetupInformation.get()' does not exist in the implementation but it does exist in the contract
+MembersMustExist : Member 'System.Collections.Hashtable System.Resources.ResourceManager.ResourceSets' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Collections.Hashtable System.Resources.ResourceSet.Table' does not exist in the implementation but it does exist in the contract
+MembersMustExist : Member 'System.ComponentModel.AsyncCompletedEventArgs..ctor()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Data.Common.DbProviderFactory.CreatePermission(System.Security.Permissions.PermissionState)' does not exist in the implementation but it does exist in the contract
+MembersMustExist : Member 'System.Diagnostics.Debug.Listeners.get()' does not exist in the implementation but it does exist in the contract
+MembersMustExist : Member 'System.IO.Directory.CreateDirectory(System.String, System.Security.AccessControl.DirectorySecurity)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.IO.Directory.GetAccessControl(System.String)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.IO.Directory.GetAccessControl(System.String, System.Security.AccessControl.AccessControlSections)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.IO.Directory.SetAccessControl(System.String, System.Security.AccessControl.DirectorySecurity)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.IO.DirectoryInfo.Create(System.Security.AccessControl.DirectorySecurity)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.IO.DirectoryInfo.CreateSubdirectory(System.String, System.Security.AccessControl.DirectorySecurity)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.IO.DirectoryInfo.GetAccessControl()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.IO.DirectoryInfo.GetAccessControl(System.Security.AccessControl.AccessControlSections)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.IO.DirectoryInfo.SetAccessControl(System.Security.AccessControl.DirectorySecurity)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.IO.File.Create(System.String, System.Int32, System.IO.FileOptions, System.Security.AccessControl.FileSecurity)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.IO.File.GetAccessControl(System.String)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.IO.File.GetAccessControl(System.String, System.Security.AccessControl.AccessControlSections)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.IO.File.SetAccessControl(System.String, System.Security.AccessControl.FileSecurity)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.IO.FileInfo.GetAccessControl()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.IO.FileInfo.GetAccessControl(System.Security.AccessControl.AccessControlSections)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.IO.FileInfo.SetAccessControl(System.Security.AccessControl.FileSecurity)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.IO.FileStream..ctor(System.String, System.IO.FileMode, System.Security.AccessControl.FileSystemRights, System.IO.FileShare, System.Int32, System.IO.FileOptions)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.IO.FileStream..ctor(System.String, System.IO.FileMode, System.Security.AccessControl.FileSystemRights, System.IO.FileShare, System.Int32, System.IO.FileOptions, System.Security.AccessControl.FileSecurity)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.IO.FileStream.GetAccessControl()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.IO.FileStream.SetAccessControl(System.Security.AccessControl.FileSecurity)' does not exist in the implementation but it does exist in the contract
+MembersMustExist : Member 'System.IO.MemoryMappedFiles.MemoryMappedFile.CreateFromFile(System.IO.FileStream, System.String, System.Int64, System.IO.MemoryMappedFiles.MemoryMappedFileAccess, System.IO.MemoryMappedFiles.MemoryMappedFileSecurity, System.IO.HandleInheritability, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.IO.MemoryMappedFiles.MemoryMappedFile.CreateNew(System.String, System.Int64, System.IO.MemoryMappedFiles.MemoryMappedFileAccess, System.IO.MemoryMappedFiles.MemoryMappedFileOptions, System.IO.MemoryMappedFiles.MemoryMappedFileSecurity, System.IO.HandleInheritability)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.IO.MemoryMappedFiles.MemoryMappedFile.CreateOrOpen(System.String, System.Int64, System.IO.MemoryMappedFiles.MemoryMappedFileAccess, System.IO.MemoryMappedFiles.MemoryMappedFileOptions, System.IO.MemoryMappedFiles.MemoryMappedFileSecurity, System.IO.HandleInheritability)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.IO.MemoryMappedFiles.MemoryMappedFile.GetAccessControl()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.IO.MemoryMappedFiles.MemoryMappedFile.SetAccessControl(System.IO.MemoryMappedFiles.MemoryMappedFileSecurity)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.IO.Pipes.AnonymousPipeServerStream..ctor(System.IO.Pipes.PipeDirection, System.IO.HandleInheritability, System.Int32, System.IO.Pipes.PipeSecurity)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.IO.Pipes.NamedPipeClientStream..ctor(System.String, System.String, System.IO.Pipes.PipeAccessRights, System.IO.Pipes.PipeOptions, System.Security.Principal.TokenImpersonationLevel, System.IO.HandleInheritability)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.IO.Pipes.NamedPipeServerStream..ctor(System.String, System.IO.Pipes.PipeDirection, System.Int32, System.IO.Pipes.PipeTransmissionMode, System.IO.Pipes.PipeOptions, System.Int32, System.Int32, System.IO.Pipes.PipeSecurity)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.IO.Pipes.NamedPipeServerStream..ctor(System.String, System.IO.Pipes.PipeDirection, System.Int32, System.IO.Pipes.PipeTransmissionMode, System.IO.Pipes.PipeOptions, System.Int32, System.Int32, System.IO.Pipes.PipeSecurity, System.IO.HandleInheritability)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.IO.Pipes.NamedPipeServerStream..ctor(System.String, System.IO.Pipes.PipeDirection, System.Int32, System.IO.Pipes.PipeTransmissionMode, System.IO.Pipes.PipeOptions, System.Int32, System.Int32, System.IO.Pipes.PipeSecurity, System.IO.HandleInheritability, System.IO.Pipes.PipeAccessRights)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.IO.Pipes.PipeStream.GetAccessControl()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.IO.Pipes.PipeStream.SetAccessControl(System.IO.Pipes.PipeSecurity)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Linq.Expressions.LambdaExpression.CompileToMethod(System.Reflection.Emit.MethodBuilder)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Linq.Expressions.LambdaExpression.CompileToMethod(System.Reflection.Emit.MethodBuilder, System.Runtime.CompilerServices.DebugInfoGenerator)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.MarshalByRefObject.CreateObjRef(System.Type)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Net.HttpVersion..ctor()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Net.HttpWebRequest..ctor()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Net.ServicePointManager.CertificatePolicy.get()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Net.ServicePointManager.CertificatePolicy.set(System.Net.ICertificatePolicy)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Net.Sockets.SocketAsyncEventArgs.SocketClientAccessPolicyProtocol.get()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Net.Sockets.SocketAsyncEventArgs.SocketClientAccessPolicyProtocol.set(System.Net.Sockets.SocketClientAccessPolicyProtocol)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Net.Sockets.SocketFlags System.Net.Sockets.SocketFlags.MaxIOVectorLength' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Net.TransportContext.GetTlsTokenBindings()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Net.WebRequest.CreatorInstance.get()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Net.WebRequest.RegisterPortableWebRequestCreator(System.Net.IWebRequestCreate)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Reflection.Assembly.Evidence.get()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Reflection.Assembly.Load(System.Byte[], System.Byte[], System.Security.Policy.Evidence)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Reflection.Assembly.Load(System.Byte[], System.Byte[], System.Security.SecurityContextSource)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Reflection.Assembly.Load(System.Reflection.AssemblyName, System.Security.Policy.Evidence)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Reflection.Assembly.Load(System.String, System.Security.Policy.Evidence)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Reflection.Assembly.LoadFile(System.String, System.Security.Policy.Evidence)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Reflection.Assembly.LoadFrom(System.String, System.Security.Policy.Evidence)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Reflection.Assembly.LoadFrom(System.String, System.Security.Policy.Evidence, System.Byte[], System.Configuration.Assemblies.AssemblyHashAlgorithm)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Reflection.Assembly.LoadWithPartialName(System.String, System.Security.Policy.Evidence)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Reflection.Assembly.PermissionSet.get()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Reflection.Module.GetSignerCertificate()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Resources.IResourceReader System.Resources.ResourceSet.Reader' does not exist in the implementation but it does exist in the contract
+MembersMustExist : Member 'System.Runtime.InteropServices.Marshal.GetActiveObject(System.String)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.InteropServices.Marshal.GetComInterfaceForObjectInContext(System.Object, System.Type)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.InteropServices.Marshal.GetComSlotForMethodInfo(System.Reflection.MemberInfo)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.InteropServices.Marshal.GetEndComSlot(System.Type)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.InteropServices.Marshal.GetExceptionPointers()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.InteropServices.Marshal.GetIDispatchForObjectInContext(System.Object)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.InteropServices.Marshal.GetITypeInfoForType(System.Type)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.InteropServices.Marshal.GetIUnknownForObjectInContext(System.Object)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.InteropServices.Marshal.GetManagedThunkForUnmanagedMethodPtr(System.IntPtr, System.IntPtr, System.Int32)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.InteropServices.Marshal.GetMethodInfoForComSlot(System.Type, System.Int32, System.Runtime.InteropServices.ComMemberType)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.InteropServices.Marshal.GetThreadFromFiberCookie(System.Int32)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.InteropServices.Marshal.GetTypeForITypeInfo(System.IntPtr)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.InteropServices.Marshal.GetTypeInfoName(System.Runtime.InteropServices.UCOMITypeInfo)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.InteropServices.Marshal.GetTypeLibGuid(System.Runtime.InteropServices.ComTypes.ITypeLib)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.InteropServices.Marshal.GetTypeLibGuid(System.Runtime.InteropServices.UCOMITypeLib)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.InteropServices.Marshal.GetTypeLibGuidForAssembly(System.Reflection.Assembly)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.InteropServices.Marshal.GetTypeLibLcid(System.Runtime.InteropServices.ComTypes.ITypeLib)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.InteropServices.Marshal.GetTypeLibLcid(System.Runtime.InteropServices.UCOMITypeLib)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.InteropServices.Marshal.GetTypeLibName(System.Runtime.InteropServices.ComTypes.ITypeLib)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.InteropServices.Marshal.GetTypeLibName(System.Runtime.InteropServices.UCOMITypeLib)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.InteropServices.Marshal.GetTypeLibVersionForAssembly(System.Reflection.Assembly, System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.InteropServices.Marshal.GetUnmanagedThunkForManagedMethodPtr(System.IntPtr, System.IntPtr, System.Int32)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.InteropServices.Marshal.IsTypeVisibleFromCom(System.Type)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.InteropServices.Marshal.NumParamBytes(System.Reflection.MethodInfo)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.InteropServices.Marshal.ReleaseThreadCache()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.InteropServices.RuntimeEnvironment..ctor()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Serialization.DataContractSerializer..ctor(System.Type, System.Collections.Generic.IEnumerable<System.Type>, System.Int32, System.Boolean, System.Boolean, System.Runtime.Serialization.IDataContractSurrogate)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Serialization.DataContractSerializer..ctor(System.Type, System.Collections.Generic.IEnumerable<System.Type>, System.Int32, System.Boolean, System.Boolean, System.Runtime.Serialization.IDataContractSurrogate, System.Runtime.Serialization.DataContractResolver)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Serialization.DataContractSerializer..ctor(System.Type, System.String, System.String, System.Collections.Generic.IEnumerable<System.Type>, System.Int32, System.Boolean, System.Boolean, System.Runtime.Serialization.IDataContractSurrogate)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Serialization.DataContractSerializer..ctor(System.Type, System.String, System.String, System.Collections.Generic.IEnumerable<System.Type>, System.Int32, System.Boolean, System.Boolean, System.Runtime.Serialization.IDataContractSurrogate, System.Runtime.Serialization.DataContractResolver)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Serialization.DataContractSerializer..ctor(System.Type, System.Xml.XmlDictionaryString, System.Xml.XmlDictionaryString, System.Collections.Generic.IEnumerable<System.Type>, System.Int32, System.Boolean, System.Boolean, System.Runtime.Serialization.IDataContractSurrogate)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Serialization.DataContractSerializer..ctor(System.Type, System.Xml.XmlDictionaryString, System.Xml.XmlDictionaryString, System.Collections.Generic.IEnumerable<System.Type>, System.Int32, System.Boolean, System.Boolean, System.Runtime.Serialization.IDataContractSurrogate, System.Runtime.Serialization.DataContractResolver)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Serialization.DataContractSerializer.DataContractSurrogate.get()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Serialization.DataContractSerializerSettings.DataContractSurrogate.get()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Serialization.DataContractSerializerSettings.DataContractSurrogate.set(System.Runtime.Serialization.IDataContractSurrogate)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Serialization.ExportOptions.DataContractSurrogate.get()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Serialization.ExportOptions.DataContractSurrogate.set(System.Runtime.Serialization.IDataContractSurrogate)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(System.IO.Stream, System.Runtime.Remoting.Messaging.HeaderHandler)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.DeserializeMethodResponse(System.IO.Stream, System.Runtime.Remoting.Messaging.HeaderHandler, System.Runtime.Remoting.Messaging.IMethodCallMessage)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(System.IO.Stream, System.Object, System.Runtime.Remoting.Messaging.Header[])' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.UnsafeDeserialize(System.IO.Stream, System.Runtime.Remoting.Messaging.HeaderHandler)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.UnsafeDeserializeMethodResponse(System.IO.Stream, System.Runtime.Remoting.Messaging.HeaderHandler, System.Runtime.Remoting.Messaging.IMethodCallMessage)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Serialization.Json.DataContractJsonSerializer..ctor(System.Type, System.Collections.Generic.IEnumerable<System.Type>, System.Int32, System.Boolean, System.Runtime.Serialization.IDataContractSurrogate, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Serialization.Json.DataContractJsonSerializer..ctor(System.Type, System.String, System.Collections.Generic.IEnumerable<System.Type>, System.Int32, System.Boolean, System.Runtime.Serialization.IDataContractSurrogate, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Serialization.Json.DataContractJsonSerializer..ctor(System.Type, System.Xml.XmlDictionaryString, System.Collections.Generic.IEnumerable<System.Type>, System.Int32, System.Boolean, System.Runtime.Serialization.IDataContractSurrogate, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Serialization.Json.DataContractJsonSerializer.DataContractSurrogate.get()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Serialization.Json.DataContractJsonSerializerSettings.DataContractSurrogate.get()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Serialization.Json.DataContractJsonSerializerSettings.DataContractSurrogate.set(System.Runtime.Serialization.IDataContractSurrogate)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Security.Cryptography.CspKeyContainerInfo.CryptoKeySecurity.get()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Security.Cryptography.CspParameters..ctor(System.Int32, System.String, System.String, System.Security.AccessControl.CryptoKeySecurity, System.IntPtr)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Security.Cryptography.CspParameters..ctor(System.Int32, System.String, System.String, System.Security.AccessControl.CryptoKeySecurity, System.Security.SecureString)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Security.Cryptography.CspParameters.CryptoKeySecurity.get()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Security.Cryptography.CspParameters.CryptoKeySecurity.set(System.Security.AccessControl.CryptoKeySecurity)' does not exist in the implementation but it does exist in the contract
+MembersMustExist : Member 'System.Security.Cryptography.ECDsaCng.FromXmlString(System.String, System.Security.Cryptography.ECKeyXmlFormat)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Security.Cryptography.ECDsaCng.HashAlgorithm.get()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Security.Cryptography.ECDsaCng.HashAlgorithm.set(System.Security.Cryptography.CngAlgorithm)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Security.Cryptography.ECDsaCng.SignData(System.Byte[])' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Security.Cryptography.ECDsaCng.SignData(System.Byte[], System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Security.Cryptography.ECDsaCng.SignData(System.IO.Stream)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Security.Cryptography.ECDsaCng.ToXmlString(System.Security.Cryptography.ECKeyXmlFormat)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Security.Cryptography.ECDsaCng.VerifyData(System.Byte[], System.Byte[])' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Security.Cryptography.ECDsaCng.VerifyData(System.Byte[], System.Int32, System.Int32, System.Byte[])' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Security.Cryptography.ECDsaCng.VerifyData(System.IO.Stream, System.Byte[])' does not exist in the implementation but it does exist in the contract
+MembersMustExist : Member 'System.Security.SecurityException..ctor(System.String, System.Object, System.Object, System.Reflection.MethodInfo, System.Object, System.Security.IPermission)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Security.SecurityException..ctor(System.String, System.Reflection.AssemblyName, System.Security.PermissionSet, System.Security.PermissionSet, System.Reflection.MethodInfo, System.Security.Permissions.SecurityAction, System.Object, System.Security.IPermission, System.Security.Policy.Evidence)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Security.SecurityException.Action.get()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Security.SecurityException.Action.set(System.Security.Permissions.SecurityAction)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Security.SecurityException.FirstPermissionThatFailed.get()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Security.SecurityException.FirstPermissionThatFailed.set(System.Security.IPermission)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Security.SecurityException.Zone.get()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Security.SecurityException.Zone.set(System.Security.SecurityZone)' does not exist in the implementation but it does exist in the contract.mbersMustExist : Member 'System.Threading.Thread.CurrentContext.get()' does not exist in the implementation but it does exist in the contract
+MembersMustExist : Member 'System.String System.Resources.ResourceManager.BaseNameField' does not exist in the implementation but it does exist in the contract.e
+MembersMustExist : Member 'System.Text.RegularExpressions.Regex.CompileToAssembly(System.Text.RegularExpressions.RegexCompilationInfo[], System.Reflection.AssemblyName)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Text.RegularExpressions.Regex.CompileToAssembly(System.Text.RegularExpressions.RegexCompilationInfo[], System.Reflection.AssemblyName, System.Reflection.Emit.CustomAttributeBuilder[])' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Text.RegularExpressions.Regex.CompileToAssembly(System.Text.RegularExpressions.RegexCompilationInfo[], System.Reflection.AssemblyName, System.Reflection.Emit.CustomAttributeBuilder[], System.String)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.EventWaitHandle..ctor(System.Boolean, System.Threading.EventResetMode, System.String, System.Boolean, System.Security.AccessControl.EventWaitHandleSecurity)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.EventWaitHandle.GetAccessControl()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.EventWaitHandle.OpenExisting(System.String, System.Security.AccessControl.EventWaitHandleRights)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.EventWaitHandle.SetAccessControl(System.Security.AccessControl.EventWaitHandleSecurity)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.EventWaitHandle.TryOpenExisting(System.String, System.Security.AccessControl.EventWaitHandleRights, System.Threading.EventWaitHandle)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.Mutex..ctor(System.Boolean, System.String, System.Boolean, System.Security.AccessControl.MutexSecurity)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.Mutex.GetAccessControl()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.Mutex.OpenExisting(System.String, System.Security.AccessControl.MutexRights)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.Mutex.SetAccessControl(System.Security.AccessControl.MutexSecurity)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.Mutex.TryOpenExisting(System.String, System.Security.AccessControl.MutexRights, System.Threading.Mutex)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.Semaphore..ctor(System.Int32, System.Int32, System.String, System.Boolean, System.Security.AccessControl.SemaphoreSecurity)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.Semaphore.GetAccessControl()' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.Semaphore.OpenExisting(System.String, System.Security.AccessControl.SemaphoreRights)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.Semaphore.SetAccessControl(System.Security.AccessControl.SemaphoreSecurity)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.Semaphore.TryOpenExisting(System.String, System.Security.AccessControl.SemaphoreRights, System.Threading.Semaphore)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Xml.Serialization.XmlMemberMapping.GenerateTypeName(System.CodeDom.Compiler.CodeDomProvider)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Xml.Serialization.XmlSchemaImporter..ctor(System.Xml.Serialization.XmlSchemas, System.Xml.Serialization.CodeGenerationOptions, System.CodeDom.Compiler.CodeDomProvider, System.Xml.Serialization.ImportContext)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Xml.Serialization.XmlSchemaImporter..ctor(System.Xml.Serialization.XmlSchemas, System.Xml.Serialization.CodeGenerationOptions, System.Xml.Serialization.ImportContext)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Xml.Serialization.XmlSchemaImporter..ctor(System.Xml.Serialization.XmlSchemas, System.Xml.Serialization.CodeIdentifiers, System.Xml.Serialization.CodeGenerationOptions)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Xml.Serialization.XmlSerializer..ctor(System.Type, System.Xml.Serialization.XmlAttributeOverrides, System.Type[], System.Xml.Serialization.XmlRootAttribute, System.String, System.String, System.Security.Policy.Evidence)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Xml.Serialization.XmlSerializer.FromMappings(System.Xml.Serialization.XmlMapping[], System.Security.Policy.Evidence)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Xml.Serialization.XmlSerializer.GenerateSerializer(System.Type[], System.Xml.Serialization.XmlMapping[])' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Xml.Serialization.XmlSerializer.GenerateSerializer(System.Type[], System.Xml.Serialization.XmlMapping[], System.CodeDom.Compiler.CompilerParameters)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Xml.Serialization.XmlSerializerFactory.CreateSerializer(System.Type, System.Xml.Serialization.XmlAttributeOverrides, System.Type[], System.Xml.Serialization.XmlRootAttribute, System.String, System.String, System.Security.Policy.Evidence)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Xml.XmlReaderSettings..ctor(System.Xml.XmlResolver)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Xml.XmlSecureResolver..ctor(System.Xml.XmlResolver, System.Security.PermissionSet)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Xml.XmlSecureResolver..ctor(System.Xml.XmlResolver, System.Security.Policy.Evidence)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Xml.XmlSecureResolver.CreateEvidenceForUrl(System.String)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Xml.Xsl.XslCompiledTransform.CompileToType(System.Xml.XmlReader, System.Xml.Xsl.XsltSettings, System.Xml.XmlResolver, System.Boolean, System.Reflection.Emit.TypeBuilder, System.String)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Xml.Xsl.XslCompiledTransform.TemporaryFiles.get()' does not exist in the implementation but it does exist in the contract
+MembersMustExist : Member 'System.Xml.Xsl.XslTransform.Load(System.Xml.XmlReader, System.Xml.XmlResolver, System.Security.Policy.Evidence)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Xml.Xsl.XslTransform.Load(System.Xml.XPath.IXPathNavigable, System.Xml.XmlResolver, System.Security.Policy.Evidence)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Xml.Xsl.XslTransform.Load(System.Xml.XPath.XPathNavigator, System.Xml.XmlResolver, Syste \ No newline at end of file
diff --git a/src/shims/ApiCompatBaseline.netcoreapp.netfx461.txt b/src/shims/ApiCompatBaseline.netcoreapp.netfx461.txt
index 37c1176b11..1ae1014a4a 100644
--- a/src/shims/ApiCompatBaseline.netcoreapp.netfx461.txt
+++ b/src/shims/ApiCompatBaseline.netcoreapp.netfx461.txt
@@ -1,6 +1,7 @@
DEFAULT_APPNAME Error: 0 : Unable to resolve assembly 'Assembly(Name=System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)' referenced by the implementation assembly 'Microsoft.Cci.DummyModule'.
DEFAULT_APPNAME Error: 0 : Unable to resolve assembly 'Assembly(Name=System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a)' referenced by the contract assembly 'Assembly(Name=System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)'.
DEFAULT_APPNAME Error: 0 : Unable to resolve assembly 'Assembly(Name=System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a)' referenced by the contract assembly 'Assembly(Name=System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)'.
+DEFAULT_APPNAME Error: 0 : Unable to resolve assembly 'Assembly(Name=System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)' referenced by the contract assembly 'Assembly(Name=System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35)'.
DEFAULT_APPNAME Error: 0 : Unable to resolve assembly 'Assembly(Name=System.Web.ApplicationServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35)' referenced by the contract assembly 'Assembly(Name=System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a)'.
DEFAULT_APPNAME Error: 0 : Unable to resolve assembly 'Assembly(Name=System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a)' referenced by the contract assembly 'Assembly(Name=System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a)'.
DEFAULT_APPNAME Error: 0 : Unable to resolve assembly 'Assembly(Name=System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)' referenced by the contract assembly 'Assembly(Name=System.Xml.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)'.
@@ -1045,10 +1046,6 @@ TypesMustExist : Type 'System.Diagnostics.InstanceDataCollection' does not exist
TypesMustExist : Type 'System.Diagnostics.InstanceDataCollectionCollection' does not exist in the implementation but it does exist in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.Diagnostics.MonitoringDescriptionAttribute' does not implement interface 'System.Runtime.InteropServices._Attribute' in the implementation but it does in the contract.
TypesMustExist : Type 'System.Diagnostics.OverflowAction' does not exist in the implementation but it does exist in the contract.
-CannotRemoveBaseTypeOrInterface : Type 'System.Diagnostics.PerformanceCounter' does not inherit from base type 'System.ComponentModel.Component' in the implementation but it does in the contract.
-MembersMustExist : Member 'System.Diagnostics.PerformanceCounter.CloseSharedResources()' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Diagnostics.PerformanceCounter.Decrement()' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Diagnostics.PerformanceCounter.Dispose(System.Boolean)' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Diagnostics.PerformanceCounterCategory' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Diagnostics.PerformanceCounterCategoryType' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Diagnostics.PerformanceCounterManager' does not exist in the implementation but it does exist in the contract.
@@ -1387,11 +1384,8 @@ TypesMustExist : Type 'System.Security.Cryptography.ManifestSignatureInformation
TypesMustExist : Type 'System.Security.Cryptography.MD5Cng' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Security.Cryptography.SHA1Cng' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Security.Cryptography.SHA256Cng' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.Security.Cryptography.SHA256CryptoServiceProvider' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Security.Cryptography.SHA384Cng' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.Security.Cryptography.SHA384CryptoServiceProvider' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Security.Cryptography.SHA512Cng' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.Security.Cryptography.SHA512CryptoServiceProvider' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Security.Cryptography.SignatureVerificationResult' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Security.Cryptography.StrongNameSignatureInformation' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Security.Cryptography.X509Certificates.AuthenticodeSignatureInformation' does not exist in the implementation but it does exist in the contract.
@@ -1404,7 +1398,6 @@ TypesMustExist : Type 'Microsoft.SqlServer.Server.Format' does not exist in the
TypesMustExist : Type 'Microsoft.SqlServer.Server.IBinarySerialize' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'Microsoft.SqlServer.Server.InvalidUdtException' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'Microsoft.SqlServer.Server.SqlContext' does not exist in the implementation but it does exist in the contract.
-CannotRemoveBaseTypeOrInterface : Type 'Microsoft.SqlServer.Server.SqlDataRecord' does not implement interface 'System.Data.IDataRecord' in the implementation but it does in the contract.
TypesMustExist : Type 'Microsoft.SqlServer.Server.SqlFacetAttribute' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'Microsoft.SqlServer.Server.SqlFunctionAttribute' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'Microsoft.SqlServer.Server.SqlMetaData..ctor(System.String, System.Data.SqlDbType, System.Type)' does not exist in the implementation but it does exist in the contract.
@@ -1875,6 +1868,56 @@ MembersMustExist : Member 'System.Runtime.Serialization.Json.DataContractJsonSer
MembersMustExist : Member 'System.Runtime.Serialization.Json.DataContractJsonSerializerSettings.DataContractSurrogate.set(System.Runtime.Serialization.IDataContractSurrogate)' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Xml.IXmlMtomReaderInitializer' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Xml.IXmlMtomWriterInitializer' does not exist in the implementation but it does exist in the contract.
+Compat issues with assembly System.ServiceModel.Web:
+MembersMustExist : Member 'System.Runtime.Serialization.Json.DataContractJsonSerializer..ctor(System.Type, System.Collections.Generic.IEnumerable<System.Type>, System.Int32, System.Boolean, System.Runtime.Serialization.IDataContractSurrogate, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Serialization.Json.DataContractJsonSerializer..ctor(System.Type, System.String, System.Collections.Generic.IEnumerable<System.Type>, System.Int32, System.Boolean, System.Runtime.Serialization.IDataContractSurrogate, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Serialization.Json.DataContractJsonSerializer..ctor(System.Type, System.Xml.XmlDictionaryString, System.Collections.Generic.IEnumerable<System.Type>, System.Int32, System.Boolean, System.Runtime.Serialization.IDataContractSurrogate, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Runtime.Serialization.Json.DataContractJsonSerializer.DataContractSurrogate.get()' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.WebHttpBinding' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.WebHttpSecurity' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.WebHttpSecurityMode' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Activation.WebScriptServiceHostFactory' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Activation.WebServiceHostFactory' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Channels.JavascriptCallbackResponseMessageProperty' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Channels.StreamBodyWriter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Channels.WebBodyFormatMessageProperty' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Channels.WebContentFormat' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Channels.WebContentTypeMapper' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Channels.WebMessageEncodingBindingElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Configuration.WebHttpBindingCollectionElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Configuration.WebHttpBindingElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Configuration.WebHttpElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Configuration.WebHttpEndpointCollectionElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Configuration.WebHttpEndpointElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Configuration.WebHttpSecurityElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Configuration.WebMessageEncodingElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Configuration.WebScriptEnablingElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Configuration.WebScriptEndpointCollectionElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Configuration.WebScriptEndpointElement' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Description.JsonFaultDetail' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Description.WebHttpBehavior' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Description.WebHttpEndpoint' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Description.WebScriptEnablingBehavior' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Description.WebScriptEndpoint' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Description.WebServiceEndpoint' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Dispatcher.JsonQueryStringConverter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Dispatcher.QueryStringConverter' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Dispatcher.WebHttpDispatchOperationSelector' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Web.AspNetCacheProfileAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Web.IncomingWebRequestContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Web.IncomingWebResponseContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Web.JavascriptCallbackBehaviorAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Web.OutgoingWebRequestContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Web.OutgoingWebResponseContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Web.WebChannelFactory<TChannel>' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Web.WebFaultException' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Web.WebFaultException<T>' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Web.WebGetAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Web.WebInvokeAttribute' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Web.WebMessageBodyStyle' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Web.WebMessageFormat' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Web.WebOperationContext' does not exist in the implementation but it does exist in the contract.
+TypesMustExist : Type 'System.ServiceModel.Web.WebServiceHost' does not exist in the implementation but it does exist in the contract.
Compat issues with assembly System.Transactions:
TypesMustExist : Type 'System.Transactions.DistributedTransactionPermission' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Transactions.DistributedTransactionPermissionAttribute' does not exist in the implementation but it does exist in the contract.
@@ -3350,4 +3393,4 @@ MembersMustExist : Member 'System.Xml.Serialization.XmlSerializer.GenerateSerial
MembersMustExist : Member 'System.Xml.Serialization.XmlSerializer.GenerateSerializer(System.Type[], System.Xml.Serialization.XmlMapping[], System.CodeDom.Compiler.CompilerParameters)' does not exist in the implementation but it does exist in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.Xml.Serialization.XmlTextAttribute' does not implement interface 'System.Runtime.InteropServices._Attribute' in the implementation but it does in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.Xml.Serialization.XmlTypeAttribute' does not implement interface 'System.Runtime.InteropServices._Attribute' in the implementation but it does in the contract.
-Total Issues: 3333
+Total Issues: 3374
diff --git a/src/shims/ApiCompatBaseline.uap.netstandard20.txt b/src/shims/ApiCompatBaseline.uap.netstandard20.txt
index ef4de2c4d4..b6b89b81d3 100644
--- a/src/shims/ApiCompatBaseline.uap.netstandard20.txt
+++ b/src/shims/ApiCompatBaseline.uap.netstandard20.txt
@@ -2,26 +2,9 @@ DEFAULT_APPNAME Error: 0 : Failed to find or load matching assembly 'System.IO.F
DEFAULT_APPNAME Error: 0 : Failed to find or load matching assembly 'System.ServiceModel.Web'.
DEFAULT_APPNAME Error: 0 : Unable to resolve assembly 'Assembly(Name=System.IO.FileSystem.AccessControl, Version=0.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a)' referenced by the implementation assembly 'Assembly(Name=mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)'.
Compat issues with assembly netstandard:
-TypesMustExist : Type 'System.Net.Cookie' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.Add(System.Net.Cookie)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.CopyTo(System.Net.Cookie[], System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.Item.get(System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.Item.get(System.String)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieContainer.Add(System.Net.Cookie)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieContainer.Add(System.Uri, System.Net.Cookie)' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.Net.CookieException' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Security.Cryptography.SHA256CryptoServiceProvider' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Security.Cryptography.SHA384CryptoServiceProvider' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Security.Cryptography.SHA512CryptoServiceProvider' does not exist in the implementation but it does exist in the contract.
-Compat issues with assembly System:
-TypesMustExist : Type 'System.Net.Cookie' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.Add(System.Net.Cookie)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.CopyTo(System.Net.Cookie[], System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.Item.get(System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.Item.get(System.String)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieContainer.Add(System.Net.Cookie)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieContainer.Add(System.Uri, System.Net.Cookie)' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.Net.CookieException' does not exist in the implementation but it does exist in the contract.
Compat issues with assembly System.Core:
TypesMustExist : Type 'System.Security.Cryptography.SHA256CryptoServiceProvider' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Security.Cryptography.SHA384CryptoServiceProvider' does not exist in the implementation but it does exist in the contract.
@@ -35,27 +18,9 @@ TypesMustExist : Type 'System.Security.AccessControl.FileSystemAccessRule' does
TypesMustExist : Type 'System.Security.AccessControl.FileSystemAuditRule' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Security.AccessControl.FileSystemRights' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Security.AccessControl.FileSystemSecurity' does not exist in the implementation but it does exist in the contract.
-Compat issues with assembly System.Net:
-TypesMustExist : Type 'System.Net.Cookie' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.Add(System.Net.Cookie)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.CopyTo(System.Net.Cookie[], System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.Item.get(System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.Item.get(System.String)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieContainer.Add(System.Net.Cookie)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieContainer.Add(System.Uri, System.Net.Cookie)' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.Net.CookieException' does not exist in the implementation but it does exist in the contract.
-Compat issues with assembly System.Net.Primitives:
-TypesMustExist : Type 'System.Net.Cookie' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.Add(System.Net.Cookie)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.CopyTo(System.Net.Cookie[], System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.Item.get(System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.Item.get(System.String)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieContainer.Add(System.Net.Cookie)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieContainer.Add(System.Uri, System.Net.Cookie)' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.Net.CookieException' does not exist in the implementation but it does exist in the contract.
Compat issues with assembly System.ServiceModel.Web:
TypesMustExist : Type 'System.Runtime.Serialization.Json.DataContractJsonSerializer' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Runtime.Serialization.Json.IXmlJsonReaderInitializer' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Runtime.Serialization.Json.IXmlJsonWriterInitializer' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Runtime.Serialization.Json.JsonReaderWriterFactory' does not exist in the implementation but it does exist in the contract.
-Total Issues: 50
+Total Issues: 18
diff --git a/src/shims/ApiCompatBaseline.uap.netstandard20Only.txt b/src/shims/ApiCompatBaseline.uap.netstandard20Only.txt
index b2e7b05fd4..893bebd44f 100644
--- a/src/shims/ApiCompatBaseline.uap.netstandard20Only.txt
+++ b/src/shims/ApiCompatBaseline.uap.netstandard20Only.txt
@@ -1,13 +1,5 @@
Compat issues with assembly netstandard:
-TypesMustExist : Type 'System.Net.Cookie' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.Add(System.Net.Cookie)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.CopyTo(System.Net.Cookie[], System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.Item.get(System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.Item.get(System.String)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieContainer.Add(System.Net.Cookie)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieContainer.Add(System.Uri, System.Net.Cookie)' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.Net.CookieException' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Security.Cryptography.SHA256CryptoServiceProvider' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Security.Cryptography.SHA384CryptoServiceProvider' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Security.Cryptography.SHA512CryptoServiceProvider' does not exist in the implementation but it does exist in the contract.
-Total Issues: 11
+Total Issues: 3
diff --git a/src/shims/ApiCompatBaseline.uapaot.netstandard20.txt b/src/shims/ApiCompatBaseline.uapaot.netstandard20.txt
index 267845632f..6796815377 100644
--- a/src/shims/ApiCompatBaseline.uapaot.netstandard20.txt
+++ b/src/shims/ApiCompatBaseline.uapaot.netstandard20.txt
@@ -1,7 +1,7 @@
DEFAULT_APPNAME Error: 0 : Failed to find or load matching assembly 'System.IO.FileSystem.AccessControl'.
DEFAULT_APPNAME Error: 0 : Unable to resolve assembly 'Assembly(Name=System.IO.FileSystem.AccessControl, Version=0.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a)' referenced by the implementation assembly 'Assembly(Name=mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)'.
+DEFAULT_APPNAME Error: 0 : Unable to resolve assembly 'Assembly(Name=System.IO.FileSystem.AccessControl, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a)' referenced by the implementation assembly 'Assembly(Name=System.DirectoryServices, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a)'.
Compat issues with assembly mscorlib:
-TypesMustExist : Type 'System.AppContext' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.AppDomain.add_AssemblyLoad(System.AssemblyLoadEventHandler)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.AppDomain.add_AssemblyResolve(System.ResolveEventHandler)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.AppDomain.add_FirstChanceException(System.EventHandler<System.Runtime.ExceptionServices.FirstChanceExceptionEventArgs>)' does not exist in the implementation but it does exist in the contract.
@@ -24,33 +24,7 @@ MembersMustExist : Member 'System.AppDomain.remove_ResourceResolve(System.Resolv
MembersMustExist : Member 'System.AppDomain.remove_TypeResolve(System.ResolveEventHandler)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.AppDomain.remove_UnhandledException(System.UnhandledExceptionEventHandler)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.AppDomain.SetData(System.String, System.Object)' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.ArgIterator' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.AssemblyLoadEventArgs' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.AssemblyLoadEventHandler' does not exist in the implementation but it does exist in the contract.
-CannotRemoveBaseTypeOrInterface : Type 'System.Decimal' does not implement interface 'System.Runtime.Serialization.IDeserializationCallback' in the implementation but it does in the contract.
-MembersMustExist : Member 'System.Decimal.FromOACurrency(System.Int64)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Decimal.Round(System.Decimal)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Decimal.Round(System.Decimal, System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Decimal.Round(System.Decimal, System.Int32, System.MidpointRounding)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Decimal.Round(System.Decimal, System.MidpointRounding)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Decimal.ToOACurrency(System.Decimal)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Exception.add_SerializeObjectState(System.EventHandler<System.Runtime.Serialization.SafeSerializationEventArgs>)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Exception.remove_SerializeObjectState(System.EventHandler<System.Runtime.Serialization.SafeSerializationEventArgs>)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Exception.TargetSite.get()' does not exist in the implementation but it does exist in the contract.
-CannotRemoveBaseTypeOrInterface : Type 'System.IntPtr' does not implement interface 'System.Runtime.Serialization.ISerializable' in the implementation but it does in the contract.
-MembersMustExist : Member 'System.Math.BigMul(System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Math.DivRem(System.Int32, System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Math.DivRem(System.Int64, System.Int64, System.Int64)' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.ResolveEventHandler' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.RuntimeArgumentHandle' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.String..ctor(System.SByte*)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.String..ctor(System.SByte*, System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.String..ctor(System.SByte*, System.Int32, System.Int32, System.Text.Encoding)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.String.Concat(System.Object, System.Object, System.Object, System.Object, __arglist)' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.TimeZone' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.TypedReference' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.TypeUnloadedException' does not exist in the implementation but it does exist in the contract.
-CannotRemoveBaseTypeOrInterface : Type 'System.UIntPtr' does not implement interface 'System.Runtime.Serialization.ISerializable' in the implementation but it does in the contract.
MembersMustExist : Member 'System.String System.Diagnostics.Debugger.DefaultCategory' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.Diagnostics.Debugger.IsLogging()' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.Diagnostics.Debugger.Log(System.Int32, System.String, System.String)' does not exist in the implementation but it does exist in the contract.
@@ -88,8 +62,6 @@ MembersMustExist : Member 'System.IO.Stream.ObjectInvariant()' does not exist in
MembersMustExist : Member 'System.IO.Stream.Synchronized(System.IO.Stream)' does not exist in the implementation but it does exist in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.IO.UnmanagedMemoryStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.IO.IsolatedStorage.IsolatedStorageFileStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
-MembersMustExist : Member 'System.Reflection.FieldInfo.GetValueDirect(System.TypedReference)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Reflection.FieldInfo.SetValueDirect(System.TypedReference, System.Object)' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Runtime.MemoryFailPoint' does not exist in the implementation but it does exist in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.Security.Cryptography.CryptoStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
MembersMustExist : Member 'System.Text.Decoder.GetCharCount(System.Byte*, System.Int32, System.Boolean)' does not exist in the implementation but it does exist in the contract.
@@ -113,11 +85,23 @@ MembersMustExist : Member 'System.Threading.SynchronizationContext.IsWaitNotific
MembersMustExist : Member 'System.Threading.SynchronizationContext.SetWaitNotificationRequired()' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.Threading.SynchronizationContext.Wait(System.IntPtr[], System.Boolean, System.Int32)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.Threading.SynchronizationContext.WaitHelper(System.IntPtr[], System.Boolean, System.Int32)' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.Threading.ThreadPool' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.Threading.WaitCallback' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.Threading.WaitOrTimerCallback' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.BindHandle(System.IntPtr)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.BindHandle(System.Runtime.InteropServices.SafeHandle)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.GetAvailableThreads(System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.GetMaxThreads(System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.GetMinThreads(System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.RegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.Int32, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.RegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.Int64, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.RegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.TimeSpan, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.RegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.UInt32, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.SetMaxThreads(System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.SetMinThreads(System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.UnsafeQueueNativeOverlapped(System.Threading.NativeOverlapped*)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.UnsafeRegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.Int32, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.UnsafeRegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.Int64, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.UnsafeRegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.TimeSpan, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.UnsafeRegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.UInt32, System.Boolean)' does not exist in the implementation but it does exist in the contract.
Compat issues with assembly netstandard:
-TypesMustExist : Type 'System.AppContext' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.AppDomain.add_AssemblyLoad(System.AssemblyLoadEventHandler)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.AppDomain.add_AssemblyResolve(System.ResolveEventHandler)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.AppDomain.add_FirstChanceException(System.EventHandler<System.Runtime.ExceptionServices.FirstChanceExceptionEventArgs>)' does not exist in the implementation but it does exist in the contract.
@@ -140,33 +124,7 @@ MembersMustExist : Member 'System.AppDomain.remove_ResourceResolve(System.Resolv
MembersMustExist : Member 'System.AppDomain.remove_TypeResolve(System.ResolveEventHandler)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.AppDomain.remove_UnhandledException(System.UnhandledExceptionEventHandler)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.AppDomain.SetData(System.String, System.Object)' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.ArgIterator' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.AssemblyLoadEventArgs' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.AssemblyLoadEventHandler' does not exist in the implementation but it does exist in the contract.
-CannotRemoveBaseTypeOrInterface : Type 'System.Decimal' does not implement interface 'System.Runtime.Serialization.IDeserializationCallback' in the implementation but it does in the contract.
-MembersMustExist : Member 'System.Decimal.FromOACurrency(System.Int64)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Decimal.Round(System.Decimal)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Decimal.Round(System.Decimal, System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Decimal.Round(System.Decimal, System.Int32, System.MidpointRounding)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Decimal.Round(System.Decimal, System.MidpointRounding)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Decimal.ToOACurrency(System.Decimal)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Exception.add_SerializeObjectState(System.EventHandler<System.Runtime.Serialization.SafeSerializationEventArgs>)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Exception.remove_SerializeObjectState(System.EventHandler<System.Runtime.Serialization.SafeSerializationEventArgs>)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Exception.TargetSite.get()' does not exist in the implementation but it does exist in the contract.
-CannotRemoveBaseTypeOrInterface : Type 'System.IntPtr' does not implement interface 'System.Runtime.Serialization.ISerializable' in the implementation but it does in the contract.
-MembersMustExist : Member 'System.Math.BigMul(System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Math.DivRem(System.Int32, System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Math.DivRem(System.Int64, System.Int64, System.Int64)' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.ResolveEventHandler' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.RuntimeArgumentHandle' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.String..ctor(System.SByte*)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.String..ctor(System.SByte*, System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.String..ctor(System.SByte*, System.Int32, System.Int32, System.Text.Encoding)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.String.Concat(System.Object, System.Object, System.Object, System.Object, __arglist)' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.TimeZone' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.TypedReference' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.TypeUnloadedException' does not exist in the implementation but it does exist in the contract.
-CannotRemoveBaseTypeOrInterface : Type 'System.UIntPtr' does not implement interface 'System.Runtime.Serialization.ISerializable' in the implementation but it does in the contract.
MembersMustExist : Member 'System.Diagnostics.Debug.AutoFlush.get()' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.Diagnostics.Debug.AutoFlush.set(System.Boolean)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.Diagnostics.Debug.Close()' does not exist in the implementation but it does exist in the contract.
@@ -225,20 +183,10 @@ CannotRemoveBaseTypeOrInterface : Type 'System.IO.Pipes.AnonymousPipeServerStrea
CannotRemoveBaseTypeOrInterface : Type 'System.IO.Pipes.NamedPipeClientStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.IO.Pipes.NamedPipeServerStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.IO.Pipes.PipeStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
-TypesMustExist : Type 'System.Net.Cookie' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.Add(System.Net.Cookie)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.CopyTo(System.Net.Cookie[], System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.Item.get(System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.Item.get(System.String)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieContainer.Add(System.Net.Cookie)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieContainer.Add(System.Uri, System.Net.Cookie)' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.Net.CookieException' does not exist in the implementation but it does exist in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.Net.Security.AuthenticatedStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.Net.Security.NegotiateStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.Net.Security.SslStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.Net.Sockets.NetworkStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
-MembersMustExist : Member 'System.Reflection.FieldInfo.GetValueDirect(System.TypedReference)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Reflection.FieldInfo.SetValueDirect(System.TypedReference, System.Object)' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Runtime.MemoryFailPoint' does not exist in the implementation but it does exist in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.Security.Cryptography.CryptoStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
MembersMustExist : Member 'System.Text.Decoder.GetCharCount(System.Byte*, System.Int32, System.Boolean)' does not exist in the implementation but it does exist in the contract.
@@ -262,9 +210,22 @@ MembersMustExist : Member 'System.Threading.SynchronizationContext.IsWaitNotific
MembersMustExist : Member 'System.Threading.SynchronizationContext.SetWaitNotificationRequired()' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.Threading.SynchronizationContext.Wait(System.IntPtr[], System.Boolean, System.Int32)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.Threading.SynchronizationContext.WaitHelper(System.IntPtr[], System.Boolean, System.Int32)' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.Threading.ThreadPool' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.Threading.WaitCallback' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.Threading.WaitOrTimerCallback' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.BindHandle(System.IntPtr)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.BindHandle(System.Runtime.InteropServices.SafeHandle)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.GetAvailableThreads(System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.GetMaxThreads(System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.GetMinThreads(System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.RegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.Int32, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.RegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.Int64, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.RegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.TimeSpan, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.RegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.UInt32, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.SetMaxThreads(System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.SetMinThreads(System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.UnsafeQueueNativeOverlapped(System.Threading.NativeOverlapped*)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.UnsafeRegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.Int32, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.UnsafeRegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.Int64, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.UnsafeRegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.TimeSpan, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.UnsafeRegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.UInt32, System.Boolean)' does not exist in the implementation but it does exist in the contract.
Compat issues with assembly System:
MembersMustExist : Member 'System.Diagnostics.Debug.AutoFlush.get()' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.Diagnostics.Debug.AutoFlush.set(System.Boolean)' does not exist in the implementation but it does exist in the contract.
@@ -280,20 +241,10 @@ MembersMustExist : Member 'System.Diagnostics.Debug.Print(System.String, System.
MembersMustExist : Member 'System.Diagnostics.Debug.Unindent()' does not exist in the implementation but it does exist in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.IO.Compression.DeflateStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.IO.Compression.GZipStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
-TypesMustExist : Type 'System.Net.Cookie' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.Add(System.Net.Cookie)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.CopyTo(System.Net.Cookie[], System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.Item.get(System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.Item.get(System.String)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieContainer.Add(System.Net.Cookie)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieContainer.Add(System.Uri, System.Net.Cookie)' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.Net.CookieException' does not exist in the implementation but it does exist in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.Net.Security.AuthenticatedStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.Net.Security.NegotiateStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.Net.Security.SslStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.Net.Sockets.NetworkStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
-Compat issues with assembly System.AppContext:
-TypesMustExist : Type 'System.AppContext' does not exist in the implementation but it does exist in the contract.
Compat issues with assembly System.Core:
CannotRemoveBaseTypeOrInterface : Type 'System.IO.MemoryMappedFiles.MemoryMappedViewStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.IO.Pipes.AnonymousPipeClientStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
@@ -343,6 +294,8 @@ TypesMustExist : Type 'System.Diagnostics.Tracing.EventTags' does not exist in t
TypesMustExist : Type 'System.Diagnostics.Tracing.EventTask' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Diagnostics.Tracing.EventWrittenEventArgs' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Diagnostics.Tracing.NonEventAttribute' does not exist in the implementation but it does exist in the contract.
+Compat issues with assembly System.DirectoryServices:
+CannotRemoveBaseTypeOrInterface : Type 'System.DirectoryServices.ActiveDirectorySecurity' does not inherit from base type 'System.Security.AccessControl.DirectoryObjectSecurity' in the implementation but it does in the contract.
Compat issues with assembly System.Globalization:
CannotRemoveBaseTypeOrInterface : Type 'System.Globalization.CompareInfo' does not implement interface 'System.Runtime.Serialization.IDeserializationCallback' in the implementation but it does in the contract.
Compat issues with assembly System.IO:
@@ -380,47 +333,15 @@ Compat issues with assembly System.IO.UnmanagedMemoryStream:
CannotRemoveBaseTypeOrInterface : Type 'System.IO.UnmanagedMemoryStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
Compat issues with assembly System.Memory:
TypesMustExist : Type 'System.ReadOnlySpan<T>' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.Span' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Span<T>' does not exist in the implementation but it does exist in the contract.
-Compat issues with assembly System.Net.Primitives:
-TypesMustExist : Type 'System.Net.Cookie' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.Add(System.Net.Cookie)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.CopyTo(System.Net.Cookie[], System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.Item.get(System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.Item.get(System.String)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieContainer.Add(System.Net.Cookie)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieContainer.Add(System.Uri, System.Net.Cookie)' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.Net.CookieException' does not exist in the implementation but it does exist in the contract.
Compat issues with assembly System.Net.Security:
CannotRemoveBaseTypeOrInterface : Type 'System.Net.Security.AuthenticatedStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.Net.Security.NegotiateStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.Net.Security.SslStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
Compat issues with assembly System.Net.Sockets:
CannotRemoveBaseTypeOrInterface : Type 'System.Net.Sockets.NetworkStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
-Compat issues with assembly System.Reflection:
-MembersMustExist : Member 'System.Reflection.FieldInfo.GetValueDirect(System.TypedReference)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Reflection.FieldInfo.SetValueDirect(System.TypedReference, System.Object)' does not exist in the implementation but it does exist in the contract.
Compat issues with assembly System.Runtime:
-CannotRemoveBaseTypeOrInterface : Type 'System.Decimal' does not implement interface 'System.Runtime.Serialization.IDeserializationCallback' in the implementation but it does in the contract.
-MembersMustExist : Member 'System.Decimal.FromOACurrency(System.Int64)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Decimal.Round(System.Decimal)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Decimal.Round(System.Decimal, System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Decimal.Round(System.Decimal, System.Int32, System.MidpointRounding)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Decimal.Round(System.Decimal, System.MidpointRounding)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Decimal.ToOACurrency(System.Decimal)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Exception.add_SerializeObjectState(System.EventHandler<System.Runtime.Serialization.SafeSerializationEventArgs>)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Exception.remove_SerializeObjectState(System.EventHandler<System.Runtime.Serialization.SafeSerializationEventArgs>)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Exception.TargetSite.get()' does not exist in the implementation but it does exist in the contract.
-CannotRemoveBaseTypeOrInterface : Type 'System.IntPtr' does not implement interface 'System.Runtime.Serialization.ISerializable' in the implementation but it does in the contract.
-MembersMustExist : Member 'System.String..ctor(System.SByte*)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.String..ctor(System.SByte*, System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.String..ctor(System.SByte*, System.Int32, System.Int32, System.Text.Encoding)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.String.Concat(System.Object, System.Object, System.Object, System.Object, __arglist)' does not exist in the implementation but it does exist in the contract.
-CannotRemoveBaseTypeOrInterface : Type 'System.UIntPtr' does not implement interface 'System.Runtime.Serialization.ISerializable' in the implementation but it does in the contract.
-Compat issues with assembly System.Runtime.Extensions:
-MembersMustExist : Member 'System.Math.BigMul(System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Math.DivRem(System.Int32, System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Math.DivRem(System.Int64, System.Int64, System.Int64)' does not exist in the implementation but it does exist in the contract.
Compat issues with assembly System.Security.Cryptography.Primitives:
CannotRemoveBaseTypeOrInterface : Type 'System.Security.Cryptography.CryptoStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
Compat issues with assembly System.Text.Encoding:
@@ -445,7 +366,20 @@ MembersMustExist : Member 'System.Threading.SynchronizationContext.Wait(System.I
MembersMustExist : Member 'System.Threading.SynchronizationContext.WaitHelper(System.IntPtr[], System.Boolean, System.Int32)' does not exist in the implementation but it does exist in the contract.
Compat issues with assembly System.Threading.ThreadPool:
TypesMustExist : Type 'System.Threading.RegisteredWaitHandle' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.Threading.ThreadPool' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.Threading.WaitCallback' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.Threading.WaitOrTimerCallback' does not exist in the implementation but it does exist in the contract.
-Total Issues: 421
+MembersMustExist : Member 'System.Threading.ThreadPool.BindHandle(System.IntPtr)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.BindHandle(System.Runtime.InteropServices.SafeHandle)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.GetAvailableThreads(System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.GetMaxThreads(System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.GetMinThreads(System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.RegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.Int32, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.RegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.Int64, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.RegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.TimeSpan, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.RegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.UInt32, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.SetMaxThreads(System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.SetMinThreads(System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.UnsafeQueueNativeOverlapped(System.Threading.NativeOverlapped*)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.UnsafeRegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.Int32, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.UnsafeRegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.Int64, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.UnsafeRegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.TimeSpan, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.UnsafeRegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.UInt32, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+Total Issues: 357
diff --git a/src/shims/ApiCompatBaseline.uapaot.netstandard20Only.txt b/src/shims/ApiCompatBaseline.uapaot.netstandard20Only.txt
index f2c71dd39c..defbe34dff 100644
--- a/src/shims/ApiCompatBaseline.uapaot.netstandard20Only.txt
+++ b/src/shims/ApiCompatBaseline.uapaot.netstandard20Only.txt
@@ -1,5 +1,4 @@
Compat issues with assembly netstandard:
-TypesMustExist : Type 'System.AppContext' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.AppDomain.add_AssemblyLoad(System.AssemblyLoadEventHandler)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.AppDomain.add_AssemblyResolve(System.ResolveEventHandler)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.AppDomain.add_FirstChanceException(System.EventHandler<System.Runtime.ExceptionServices.FirstChanceExceptionEventArgs>)' does not exist in the implementation but it does exist in the contract.
@@ -22,33 +21,7 @@ MembersMustExist : Member 'System.AppDomain.remove_ResourceResolve(System.Resolv
MembersMustExist : Member 'System.AppDomain.remove_TypeResolve(System.ResolveEventHandler)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.AppDomain.remove_UnhandledException(System.UnhandledExceptionEventHandler)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.AppDomain.SetData(System.String, System.Object)' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.ArgIterator' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.AssemblyLoadEventArgs' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.AssemblyLoadEventHandler' does not exist in the implementation but it does exist in the contract.
-CannotRemoveBaseTypeOrInterface : Type 'System.Decimal' does not implement interface 'System.Runtime.Serialization.IDeserializationCallback' in the implementation but it does in the contract.
-MembersMustExist : Member 'System.Decimal.FromOACurrency(System.Int64)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Decimal.Round(System.Decimal)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Decimal.Round(System.Decimal, System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Decimal.Round(System.Decimal, System.Int32, System.MidpointRounding)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Decimal.Round(System.Decimal, System.MidpointRounding)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Decimal.ToOACurrency(System.Decimal)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Exception.add_SerializeObjectState(System.EventHandler<System.Runtime.Serialization.SafeSerializationEventArgs>)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Exception.remove_SerializeObjectState(System.EventHandler<System.Runtime.Serialization.SafeSerializationEventArgs>)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Exception.TargetSite.get()' does not exist in the implementation but it does exist in the contract.
-CannotRemoveBaseTypeOrInterface : Type 'System.IntPtr' does not implement interface 'System.Runtime.Serialization.ISerializable' in the implementation but it does in the contract.
-MembersMustExist : Member 'System.Math.BigMul(System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Math.DivRem(System.Int32, System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Math.DivRem(System.Int64, System.Int64, System.Int64)' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.ResolveEventHandler' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.RuntimeArgumentHandle' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.String..ctor(System.SByte*)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.String..ctor(System.SByte*, System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.String..ctor(System.SByte*, System.Int32, System.Int32, System.Text.Encoding)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.String.Concat(System.Object, System.Object, System.Object, System.Object, __arglist)' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.TimeZone' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.TypedReference' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.TypeUnloadedException' does not exist in the implementation but it does exist in the contract.
-CannotRemoveBaseTypeOrInterface : Type 'System.UIntPtr' does not implement interface 'System.Runtime.Serialization.ISerializable' in the implementation but it does in the contract.
MembersMustExist : Member 'System.Diagnostics.Debug.AutoFlush.get()' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.Diagnostics.Debug.AutoFlush.set(System.Boolean)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.Diagnostics.Debug.Close()' does not exist in the implementation but it does exist in the contract.
@@ -107,20 +80,10 @@ CannotRemoveBaseTypeOrInterface : Type 'System.IO.Pipes.AnonymousPipeServerStrea
CannotRemoveBaseTypeOrInterface : Type 'System.IO.Pipes.NamedPipeClientStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.IO.Pipes.NamedPipeServerStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.IO.Pipes.PipeStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
-TypesMustExist : Type 'System.Net.Cookie' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.Add(System.Net.Cookie)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.CopyTo(System.Net.Cookie[], System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.Item.get(System.Int32)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieCollection.Item.get(System.String)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieContainer.Add(System.Net.Cookie)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Net.CookieContainer.Add(System.Uri, System.Net.Cookie)' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.Net.CookieException' does not exist in the implementation but it does exist in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.Net.Security.AuthenticatedStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.Net.Security.NegotiateStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.Net.Security.SslStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.Net.Sockets.NetworkStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
-MembersMustExist : Member 'System.Reflection.FieldInfo.GetValueDirect(System.TypedReference)' does not exist in the implementation but it does exist in the contract.
-MembersMustExist : Member 'System.Reflection.FieldInfo.SetValueDirect(System.TypedReference, System.Object)' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Runtime.MemoryFailPoint' does not exist in the implementation but it does exist in the contract.
CannotRemoveBaseTypeOrInterface : Type 'System.Security.Cryptography.CryptoStream' does not inherit from base type 'System.MarshalByRefObject' in the implementation but it does in the contract.
MembersMustExist : Member 'System.Text.Decoder.GetCharCount(System.Byte*, System.Int32, System.Boolean)' does not exist in the implementation but it does exist in the contract.
@@ -144,7 +107,20 @@ MembersMustExist : Member 'System.Threading.SynchronizationContext.IsWaitNotific
MembersMustExist : Member 'System.Threading.SynchronizationContext.SetWaitNotificationRequired()' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.Threading.SynchronizationContext.Wait(System.IntPtr[], System.Boolean, System.Int32)' does not exist in the implementation but it does exist in the contract.
MembersMustExist : Member 'System.Threading.SynchronizationContext.WaitHelper(System.IntPtr[], System.Boolean, System.Int32)' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.Threading.ThreadPool' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.Threading.WaitCallback' does not exist in the implementation but it does exist in the contract.
-TypesMustExist : Type 'System.Threading.WaitOrTimerCallback' does not exist in the implementation but it does exist in the contract.
-Total Issues: 148
+MembersMustExist : Member 'System.Threading.ThreadPool.BindHandle(System.IntPtr)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.BindHandle(System.Runtime.InteropServices.SafeHandle)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.GetAvailableThreads(System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.GetMaxThreads(System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.GetMinThreads(System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.RegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.Int32, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.RegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.Int64, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.RegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.TimeSpan, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.RegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.UInt32, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.SetMaxThreads(System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.SetMinThreads(System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.UnsafeQueueNativeOverlapped(System.Threading.NativeOverlapped*)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.UnsafeRegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.Int32, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.UnsafeRegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.Int64, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.UnsafeRegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.TimeSpan, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Threading.ThreadPool.UnsafeRegisterWaitForSingleObject(System.Threading.WaitHandle, System.Threading.WaitOrTimerCallback, System.Object, System.UInt32, System.Boolean)' does not exist in the implementation but it does exist in the contract.
+Total Issues: 124
diff --git a/src/shims/dir.props b/src/shims/dir.props
index 934c469e37..ff6f689008 100644
--- a/src/shims/dir.props
+++ b/src/shims/dir.props
@@ -17,13 +17,16 @@
<NetFxReference Include="System.ComponentModel.Composition" />
<NetFxReference Include="System.ComponentModel.DataAnnotations">
<StrongNameSig>MSSharedLib</StrongNameSig>
- </NetFxReference>
+ </NetFxReference>
<NetFxReference Include="System.Data" />
<NetFxReference Include="System.Drawing" />
<NetFxReference Include="System.IO.Compression.FileSystem" />
<NetFxReference Include="System.Net" />
<NetFxReference Include="System.Numerics" />
<NetFxReference Include="System.Runtime.Serialization" />
+ <NetFxReference Include="System.ServiceModel.Web">
+ <StrongNameSig>MSSharedLib</StrongNameSig>
+ </NetFxReference>
<NetFxReference Include="System.Transactions" />
<NetFxReference Include="System.Windows" />
<NetFxReference Include="System.Web" />
diff --git a/src/src.builds b/src/src.builds
index 2dd3d7daa2..9fb902c873 100644
--- a/src/src.builds
+++ b/src/src.builds
@@ -9,7 +9,6 @@
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.traversal.targets))\dir.traversal.targets" />
<UsingTask TaskName="GenerateDepsJson" AssemblyFile="$(BuildToolsTaskDir)CoreFx.Tools.dll"/>
- <UsingTask TaskName="GenerateBindingRedirect" AssemblyFile="$(BuildToolsTaskDir)CoreFx.Tools.dll"/>
<PropertyGroup>
<!-- TODO: We should see about generating this from scratch instead of relying on a previous deps file as a template -->
@@ -33,18 +32,4 @@
DepsExceptions="@(ExceptionForDepsJson)"
OutputPath="$(_OutputTestSharedFrameworkDepsPath)"/>
</Target>
-
- <Target Name="GenerateXUnitRunnerConfigFile" AfterTargets="BuildAllProjects" Condition="'$(TargetGroup)' == 'netfx'">
-
- <ItemGroup>
- <NetFXRuntimeAssemblies Include="$(RuntimePath)*.dll" />
- <XUnitConsoleRunnerExecutable Include="$(RuntimePath)xunit.console.exe" />
- </ItemGroup>
-
- <GenerateBindingRedirect Assemblies="@(NetFXRuntimeAssemblies)"
- Executables="@(XUnitConsoleRunnerExecutable)"
- OutputPath="$(RuntimePath)"
- OutputCodeBase="True" />
- </Target>
-
</Project>
diff --git a/src/upload-tests.proj b/src/upload-tests.proj
index 57b32b6c3c..fe297a042b 100644
--- a/src/upload-tests.proj
+++ b/src/upload-tests.proj
@@ -105,7 +105,7 @@
<!-- Zips up the runtime directory; unzip location of this file will be used as the first argument to RunTests.cmd/sh. -->
<Target Name="CompressRuntimeDir" Condition="'$(SkipArchive)' != 'true'">
<ZipFileCreateFromDirectory
- SourceDirectory="$(ArchivePayloadRootDir)"
+ SourceDirectory="$(TestHostRootPath)"
DestinationArchive="$(TestRuntimeArchiveFile)"
OverwriteDestination="true" />
<ItemGroup>