summaryrefslogtreecommitdiff
path: root/src/mscorlib/src/System
diff options
context:
space:
mode:
authorJiyoung Yun <jy910.yun@samsung.com>2016-11-23 19:09:09 +0900
committerJiyoung Yun <jy910.yun@samsung.com>2016-11-23 19:09:09 +0900
commit4b4aad7217d3292650e77eec2cf4c198ea9c3b4b (patch)
tree98110734c91668dfdbb126fcc0e15ddbd93738ca /src/mscorlib/src/System
parentfa45f57ed55137c75ac870356a1b8f76c84b229c (diff)
downloadcoreclr-4b4aad7217d3292650e77eec2cf4c198ea9c3b4b.tar.gz
coreclr-4b4aad7217d3292650e77eec2cf4c198ea9c3b4b.tar.bz2
coreclr-4b4aad7217d3292650e77eec2cf4c198ea9c3b4b.zip
Imported Upstream version 1.1.0upstream/1.1.0
Diffstat (limited to 'src/mscorlib/src/System')
-rw-r--r--src/mscorlib/src/System/AccessViolationException.cs51
-rw-r--r--src/mscorlib/src/System/Action.cs78
-rw-r--r--src/mscorlib/src/System/Activator.cs688
-rw-r--r--src/mscorlib/src/System/AggregateException.cs497
-rw-r--r--src/mscorlib/src/System/AppContext/AppContext.cs189
-rw-r--r--src/mscorlib/src/System/AppContext/AppContextDefaultValues.CoreClrOverrides.cs21
-rw-r--r--src/mscorlib/src/System/AppContext/AppContextDefaultValues.Defaults.Central.cs33
-rw-r--r--src/mscorlib/src/System/AppContext/AppContextDefaultValues.Defaults.cs71
-rw-r--r--src/mscorlib/src/System/AppContext/AppContextDefaultValues.cs164
-rw-r--r--src/mscorlib/src/System/AppContext/AppContextSwitches.cs110
-rw-r--r--src/mscorlib/src/System/AppDomain.cs4681
-rw-r--r--src/mscorlib/src/System/AppDomainAttributes.cs48
-rw-r--r--src/mscorlib/src/System/AppDomainManager.cs220
-rw-r--r--src/mscorlib/src/System/AppDomainSetup.cs1444
-rw-r--r--src/mscorlib/src/System/AppDomainUnloadedException.cs43
-rw-r--r--src/mscorlib/src/System/ApplicationException.cs56
-rw-r--r--src/mscorlib/src/System/ApplicationId.cs141
-rw-r--r--src/mscorlib/src/System/ArgIterator.cs148
-rw-r--r--src/mscorlib/src/System/ArgumentException.cs95
-rw-r--r--src/mscorlib/src/System/ArgumentNullException.cs55
-rw-r--r--src/mscorlib/src/System/ArgumentOutOfRangeException.cs106
-rw-r--r--src/mscorlib/src/System/ArithmeticException.cs52
-rw-r--r--src/mscorlib/src/System/Array.cs2858
-rw-r--r--src/mscorlib/src/System/ArraySegment.cs342
-rw-r--r--src/mscorlib/src/System/ArrayTypeMismatchException.cs52
-rw-r--r--src/mscorlib/src/System/AsyncCallback.cs17
-rw-r--r--src/mscorlib/src/System/Attribute.cs975
-rw-r--r--src/mscorlib/src/System/AttributeTargets.cs40
-rw-r--r--src/mscorlib/src/System/AttributeUsageAttribute.cs57
-rw-r--r--src/mscorlib/src/System/BCLDebug.cs442
-rw-r--r--src/mscorlib/src/System/BadImageFormatException.cs158
-rw-r--r--src/mscorlib/src/System/BitConverter.cs451
-rw-r--r--src/mscorlib/src/System/Boolean.cs305
-rw-r--r--src/mscorlib/src/System/Buffer.cs645
-rw-r--r--src/mscorlib/src/System/Byte.cs253
-rw-r--r--src/mscorlib/src/System/CLRConfig.cs36
-rw-r--r--src/mscorlib/src/System/CLSCompliantAttribute.cs34
-rw-r--r--src/mscorlib/src/System/CannotUnloadAppDomainException.cs49
-rw-r--r--src/mscorlib/src/System/CfgParser.cs574
-rw-r--r--src/mscorlib/src/System/Char.cs1001
-rw-r--r--src/mscorlib/src/System/CharEnumerator.cs75
-rw-r--r--src/mscorlib/src/System/Collections/ArrayList.cs2635
-rw-r--r--src/mscorlib/src/System/Collections/BitArray.cs524
-rw-r--r--src/mscorlib/src/System/Collections/CollectionBase.cs215
-rw-r--r--src/mscorlib/src/System/Collections/Comparer.cs98
-rw-r--r--src/mscorlib/src/System/Collections/CompatibleComparer.cs67
-rw-r--r--src/mscorlib/src/System/Collections/Concurrent/ConcurrentDictionary.cs2095
-rw-r--r--src/mscorlib/src/System/Collections/Concurrent/ConcurrentQueue.cs960
-rw-r--r--src/mscorlib/src/System/Collections/Concurrent/ConcurrentStack.cs840
-rw-r--r--src/mscorlib/src/System/Collections/Concurrent/IProducerConsumerCollection.cs116
-rw-r--r--src/mscorlib/src/System/Collections/Concurrent/OrderablePartitioner.cs281
-rw-r--r--src/mscorlib/src/System/Collections/Concurrent/Partitioner.cs102
-rw-r--r--src/mscorlib/src/System/Collections/Concurrent/PartitionerStatic.cs1733
-rw-r--r--src/mscorlib/src/System/Collections/DictionaryEntry.cs55
-rw-r--r--src/mscorlib/src/System/Collections/EmptyReadOnlyDictionaryInternal.cs194
-rw-r--r--src/mscorlib/src/System/Collections/Generic/ArraySortHelper.cs1558
-rw-r--r--src/mscorlib/src/System/Collections/Generic/Comparer.cs325
-rw-r--r--src/mscorlib/src/System/Collections/Generic/DebugView.cs129
-rw-r--r--src/mscorlib/src/System/Collections/Generic/Dictionary.cs1187
-rw-r--r--src/mscorlib/src/System/Collections/Generic/EqualityComparer.cs621
-rw-r--r--src/mscorlib/src/System/Collections/Generic/ICollection.cs52
-rw-r--r--src/mscorlib/src/System/Collections/Generic/IComparer.cs30
-rw-r--r--src/mscorlib/src/System/Collections/Generic/IDictionary.cs58
-rw-r--r--src/mscorlib/src/System/Collections/Generic/IEnumerable.cs38
-rw-r--r--src/mscorlib/src/System/Collections/Generic/IEnumerator.cs35
-rw-r--r--src/mscorlib/src/System/Collections/Generic/IEqualityComparer.cs19
-rw-r--r--src/mscorlib/src/System/Collections/Generic/IList.cs54
-rw-r--r--src/mscorlib/src/System/Collections/Generic/IReadOnlyCollection.cs34
-rw-r--r--src/mscorlib/src/System/Collections/Generic/IReadOnlyDictionary.cs29
-rw-r--r--src/mscorlib/src/System/Collections/Generic/IReadOnlyList.cs34
-rw-r--r--src/mscorlib/src/System/Collections/Generic/KeyNotFoundException.cs45
-rw-r--r--src/mscorlib/src/System/Collections/Generic/KeyValuePair.cs56
-rw-r--r--src/mscorlib/src/System/Collections/Generic/List.cs1120
-rw-r--r--src/mscorlib/src/System/Collections/Hashtable.cs1847
-rw-r--r--src/mscorlib/src/System/Collections/ICollection.cs81
-rw-r--r--src/mscorlib/src/System/Collections/IComparer.cs32
-rw-r--r--src/mscorlib/src/System/Collections/IDictionary.cs69
-rw-r--r--src/mscorlib/src/System/Collections/IDictionaryEnumerator.cs79
-rw-r--r--src/mscorlib/src/System/Collections/IEnumerable.cs34
-rw-r--r--src/mscorlib/src/System/Collections/IEnumerator.cs53
-rw-r--r--src/mscorlib/src/System/Collections/IEqualityComparer.cs27
-rw-r--r--src/mscorlib/src/System/Collections/IHashCodeProvider.cs30
-rw-r--r--src/mscorlib/src/System/Collections/IList.cs71
-rw-r--r--src/mscorlib/src/System/Collections/IStructuralComparable.cs11
-rw-r--r--src/mscorlib/src/System/Collections/IStructuralEquatable.cs10
-rw-r--r--src/mscorlib/src/System/Collections/KeyValuePairs.cs40
-rw-r--r--src/mscorlib/src/System/Collections/ListDictionaryInternal.cs429
-rw-r--r--src/mscorlib/src/System/Collections/ObjectModel/Collection.cs328
-rw-r--r--src/mscorlib/src/System/Collections/ObjectModel/KeyedCollection.cs245
-rw-r--r--src/mscorlib/src/System/Collections/ObjectModel/ReadOnlyCollection.cs232
-rw-r--r--src/mscorlib/src/System/Collections/ObjectModel/ReadOnlyDictionary.cs625
-rw-r--r--src/mscorlib/src/System/Collections/SortedList.cs1011
-rw-r--r--src/mscorlib/src/System/Collections/Stack.cs380
-rw-r--r--src/mscorlib/src/System/Collections/StructuralComparisons.cs89
-rw-r--r--src/mscorlib/src/System/CompatibilitySwitches.cs130
-rw-r--r--src/mscorlib/src/System/Configuration/Assemblies/AssemblyHash.cs74
-rw-r--r--src/mscorlib/src/System/Configuration/Assemblies/AssemblyHashAlgorithm.cs32
-rw-r--r--src/mscorlib/src/System/Configuration/Assemblies/AssemblyVersionCompatibility.cs24
-rw-r--r--src/mscorlib/src/System/ContextBoundObject.cs24
-rw-r--r--src/mscorlib/src/System/ContextMarshalException.cs45
-rw-r--r--src/mscorlib/src/System/ContextStaticAttribute.cs32
-rw-r--r--src/mscorlib/src/System/Convert.cs2718
-rw-r--r--src/mscorlib/src/System/Currency.cs61
-rw-r--r--src/mscorlib/src/System/CurrentTimeZone.cs310
-rw-r--r--src/mscorlib/src/System/DBNull.cs122
-rw-r--r--src/mscorlib/src/System/DataMisalignedException.cs45
-rw-r--r--src/mscorlib/src/System/DateTime.cs1379
-rw-r--r--src/mscorlib/src/System/DateTimeKind.cs19
-rw-r--r--src/mscorlib/src/System/DateTimeOffset.cs831
-rw-r--r--src/mscorlib/src/System/DayOfWeek.cs26
-rw-r--r--src/mscorlib/src/System/Decimal.cs1244
-rw-r--r--src/mscorlib/src/System/DefaultBinder.cs1168
-rw-r--r--src/mscorlib/src/System/Delegate.cs754
-rw-r--r--src/mscorlib/src/System/DelegateSerializationHolder.cs299
-rw-r--r--src/mscorlib/src/System/Diagnostics/Assert.cs114
-rw-r--r--src/mscorlib/src/System/Diagnostics/AssertFilter.cs46
-rw-r--r--src/mscorlib/src/System/Diagnostics/AssertFilters.cs24
-rw-r--r--src/mscorlib/src/System/Diagnostics/CodeAnalysis/SuppressMessageAttribute.cs76
-rw-r--r--src/mscorlib/src/System/Diagnostics/ConditionalAttribute.cs26
-rw-r--r--src/mscorlib/src/System/Diagnostics/Contracts/Contracts.cs1017
-rw-r--r--src/mscorlib/src/System/Diagnostics/Contracts/ContractsBCL.cs521
-rw-r--r--src/mscorlib/src/System/Diagnostics/Debugger.cs195
-rw-r--r--src/mscorlib/src/System/Diagnostics/DebuggerAttributes.cs378
-rw-r--r--src/mscorlib/src/System/Diagnostics/EditAndContinueHelper.cs27
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/ActivityTracker.cs670
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/EventActivityOptions.cs39
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/EventCounter.cs436
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/EventDescriptor.cs193
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/EventProvider.cs1220
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/EventSource.cs6962
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/EventSourceException.cs53
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/EventSource_CoreCLR.cs224
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/FrameworkEventSource.cs620
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/StubEnvironment.cs373
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/ArrayTypeInfo.cs63
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/ConcurrentSet.cs127
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/ConcurrentSetItem.cs25
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/DataCollector.cs319
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/EmptyStruct.cs17
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/EnumHelper.cs30
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/EnumerableTypeInfo.cs64
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/EventDataAttribute.cs146
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/EventFieldAttribute.cs76
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/EventFieldFormat.cs130
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/EventIgnoreAttribute.cs25
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/EventPayload.cs154
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/EventSourceActivity.cs321
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/EventSourceOptions.cs130
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/FieldMetadata.cs231
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/InvokeTypeInfo.cs96
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/NameInfo.cs79
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/PropertyAnalysis.cs39
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/PropertyValue.cs251
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/SimpleEventTypes.cs39
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/SimpleTypeInfos.cs296
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/Statics.cs727
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/TraceLoggingDataCollector.cs105
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/TraceLoggingDataType.cs349
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/TraceLoggingEventSource.cs902
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/TraceLoggingEventTraits.cs28
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/TraceLoggingEventTypes.cs262
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/TraceLoggingMetadataCollector.cs370
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/TraceLoggingTypeInfo.cs209
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/TraceLogging/TypeAnalysis.cs103
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/Winmeta.cs196
-rw-r--r--src/mscorlib/src/System/Diagnostics/Eventing/XplatEventLogger.cs164
-rw-r--r--src/mscorlib/src/System/Diagnostics/ICustomDebuggerNotification.cs21
-rw-r--r--src/mscorlib/src/System/Diagnostics/LogSwitch.cs142
-rw-r--r--src/mscorlib/src/System/Diagnostics/LoggingLevels.cs45
-rw-r--r--src/mscorlib/src/System/Diagnostics/Stackframe.cs348
-rw-r--r--src/mscorlib/src/System/Diagnostics/Stacktrace.cs770
-rw-r--r--src/mscorlib/src/System/Diagnostics/SymbolStore/ISymBinder.cs42
-rw-r--r--src/mscorlib/src/System/Diagnostics/SymbolStore/ISymDocument.cs48
-rw-r--r--src/mscorlib/src/System/Diagnostics/SymbolStore/ISymDocumentWriter.cs31
-rw-r--r--src/mscorlib/src/System/Diagnostics/SymbolStore/ISymMethod.cs86
-rw-r--r--src/mscorlib/src/System/Diagnostics/SymbolStore/ISymNamespace.cs30
-rw-r--r--src/mscorlib/src/System/Diagnostics/SymbolStore/ISymReader.cs68
-rw-r--r--src/mscorlib/src/System/Diagnostics/SymbolStore/ISymScope.cs47
-rw-r--r--src/mscorlib/src/System/Diagnostics/SymbolStore/ISymVariable.cs41
-rw-r--r--src/mscorlib/src/System/Diagnostics/SymbolStore/ISymWriter.cs218
-rw-r--r--src/mscorlib/src/System/Diagnostics/SymbolStore/SymAddressKind.cs52
-rw-r--r--src/mscorlib/src/System/Diagnostics/SymbolStore/SymDocumentType.cs24
-rw-r--r--src/mscorlib/src/System/Diagnostics/SymbolStore/SymLanguageType.cs42
-rw-r--r--src/mscorlib/src/System/Diagnostics/SymbolStore/SymLanguageVendor.cs23
-rw-r--r--src/mscorlib/src/System/Diagnostics/SymbolStore/Token.cs51
-rw-r--r--src/mscorlib/src/System/Diagnostics/log.cs251
-rw-r--r--src/mscorlib/src/System/DivideByZeroException.cs39
-rw-r--r--src/mscorlib/src/System/DllNotFoundException.cs40
-rw-r--r--src/mscorlib/src/System/Double.cs367
-rw-r--r--src/mscorlib/src/System/DuplicateWaitObjectException.cs63
-rw-r--r--src/mscorlib/src/System/Empty.cs37
-rw-r--r--src/mscorlib/src/System/EntryPointNotFoundException.cs42
-rw-r--r--src/mscorlib/src/System/Enum.cs1265
-rw-r--r--src/mscorlib/src/System/Environment.cs1768
-rw-r--r--src/mscorlib/src/System/EventArgs.cs18
-rw-r--r--src/mscorlib/src/System/EventHandler.cs13
-rw-r--r--src/mscorlib/src/System/Exception.cs1006
-rw-r--r--src/mscorlib/src/System/ExecutionEngineException.cs44
-rw-r--r--src/mscorlib/src/System/FieldAccessException.cs39
-rw-r--r--src/mscorlib/src/System/FlagsAttribute.cs23
-rw-r--r--src/mscorlib/src/System/FormatException.cs39
-rw-r--r--src/mscorlib/src/System/FormattableString.cs81
-rw-r--r--src/mscorlib/src/System/GC.cs641
-rw-r--r--src/mscorlib/src/System/Globalization/BidiCategory.cs39
-rw-r--r--src/mscorlib/src/System/Globalization/Calendar.cs861
-rw-r--r--src/mscorlib/src/System/Globalization/CalendarAlgorithmType.cs20
-rw-r--r--src/mscorlib/src/System/Globalization/CalendarData.cs455
-rw-r--r--src/mscorlib/src/System/Globalization/CalendarWeekRule.cs20
-rw-r--r--src/mscorlib/src/System/Globalization/CalendricalCalculationsHelper.cs413
-rw-r--r--src/mscorlib/src/System/Globalization/CharUnicodeInfo.cs522
-rw-r--r--src/mscorlib/src/System/Globalization/ChineseLunisolarCalendar.cs401
-rw-r--r--src/mscorlib/src/System/Globalization/CompareInfo.cs1359
-rw-r--r--src/mscorlib/src/System/Globalization/CultureData.cs3354
-rw-r--r--src/mscorlib/src/System/Globalization/CultureInfo.cs2023
-rw-r--r--src/mscorlib/src/System/Globalization/CultureNotFoundException.cs131
-rw-r--r--src/mscorlib/src/System/Globalization/CultureTypes.cs31
-rw-r--r--src/mscorlib/src/System/Globalization/DateTimeFormat.cs1054
-rw-r--r--src/mscorlib/src/System/Globalization/DateTimeFormatInfo.cs2936
-rw-r--r--src/mscorlib/src/System/Globalization/DateTimeFormatInfoScanner.cs750
-rw-r--r--src/mscorlib/src/System/Globalization/DateTimeParse.cs5069
-rw-r--r--src/mscorlib/src/System/Globalization/DateTimeStyles.cs50
-rw-r--r--src/mscorlib/src/System/Globalization/DaylightTime.cs49
-rw-r--r--src/mscorlib/src/System/Globalization/DigitShapes.cs22
-rw-r--r--src/mscorlib/src/System/Globalization/EastAsianLunisolarCalendar.cs644
-rw-r--r--src/mscorlib/src/System/Globalization/EncodingDataItem.Unix.cs69
-rw-r--r--src/mscorlib/src/System/Globalization/EncodingDataItem.cs115
-rw-r--r--src/mscorlib/src/System/Globalization/EncodingTable.Unix.cs178
-rw-r--r--src/mscorlib/src/System/Globalization/EncodingTable.cs250
-rw-r--r--src/mscorlib/src/System/Globalization/GlobalizationAssembly.cs63
-rw-r--r--src/mscorlib/src/System/Globalization/GregorianCalendar.cs627
-rw-r--r--src/mscorlib/src/System/Globalization/GregorianCalendarHelper.cs633
-rw-r--r--src/mscorlib/src/System/Globalization/GregorianCalendarTypes.cs18
-rw-r--r--src/mscorlib/src/System/Globalization/HebrewCalendar.cs1084
-rw-r--r--src/mscorlib/src/System/Globalization/HebrewNumber.cs402
-rw-r--r--src/mscorlib/src/System/Globalization/HijriCalendar.cs723
-rw-r--r--src/mscorlib/src/System/Globalization/IdnMapping.cs1189
-rw-r--r--src/mscorlib/src/System/Globalization/JapaneseCalendar.cs594
-rw-r--r--src/mscorlib/src/System/Globalization/JapaneseLunisolarCalendar.cs293
-rw-r--r--src/mscorlib/src/System/Globalization/JulianCalendar.cs441
-rw-r--r--src/mscorlib/src/System/Globalization/KoreanCalendar.cs265
-rw-r--r--src/mscorlib/src/System/Globalization/KoreanLunisolarCalendar.cs1334
-rw-r--r--src/mscorlib/src/System/Globalization/NumberFormatInfo.cs842
-rw-r--r--src/mscorlib/src/System/Globalization/NumberStyles.cs67
-rw-r--r--src/mscorlib/src/System/Globalization/PersianCalendar.cs577
-rw-r--r--src/mscorlib/src/System/Globalization/RegionInfo.cs629
-rw-r--r--src/mscorlib/src/System/Globalization/SortKey.cs208
-rw-r--r--src/mscorlib/src/System/Globalization/SortVersion.cs102
-rw-r--r--src/mscorlib/src/System/Globalization/StringInfo.cs361
-rw-r--r--src/mscorlib/src/System/Globalization/Tables/charinfo.nlpbin0 -> 36992 bytes
-rw-r--r--src/mscorlib/src/System/Globalization/TaiwanCalendar.cs262
-rw-r--r--src/mscorlib/src/System/Globalization/TaiwanLunisolarCalendar.cs330
-rw-r--r--src/mscorlib/src/System/Globalization/TextElementEnumerator.cs155
-rw-r--r--src/mscorlib/src/System/Globalization/TextInfo.cs1004
-rw-r--r--src/mscorlib/src/System/Globalization/ThaiBuddhistCalendar.cs225
-rw-r--r--src/mscorlib/src/System/Globalization/TimeSpanFormat.cs474
-rw-r--r--src/mscorlib/src/System/Globalization/TimeSpanParse.cs1557
-rw-r--r--src/mscorlib/src/System/Globalization/TimeSpanStyles.cs12
-rw-r--r--src/mscorlib/src/System/Globalization/UmAlQuraCalendar.cs849
-rw-r--r--src/mscorlib/src/System/Globalization/UnicodeCategory.cs79
-rw-r--r--src/mscorlib/src/System/Guid.cs1299
-rw-r--r--src/mscorlib/src/System/IAppDomain.cs268
-rw-r--r--src/mscorlib/src/System/IAppDomainPauseManager.cs100
-rw-r--r--src/mscorlib/src/System/IAppDomainSetup.cs84
-rw-r--r--src/mscorlib/src/System/IAsyncResult.cs32
-rw-r--r--src/mscorlib/src/System/ICloneable.cs29
-rw-r--r--src/mscorlib/src/System/IComparable.cs39
-rw-r--r--src/mscorlib/src/System/IConvertible.cs67
-rw-r--r--src/mscorlib/src/System/ICustomFormatter.cs25
-rw-r--r--src/mscorlib/src/System/IDisposable.cs58
-rw-r--r--src/mscorlib/src/System/IEquatable.cs14
-rw-r--r--src/mscorlib/src/System/IFormatProvider.cs23
-rw-r--r--src/mscorlib/src/System/IFormattable.cs16
-rw-r--r--src/mscorlib/src/System/IO/BinaryReader.cs601
-rw-r--r--src/mscorlib/src/System/IO/BinaryWriter.cs427
-rw-r--r--src/mscorlib/src/System/IO/BufferedStream.cs1320
-rw-r--r--src/mscorlib/src/System/IO/Directory.cs1389
-rw-r--r--src/mscorlib/src/System/IO/DirectoryInfo.cs672
-rw-r--r--src/mscorlib/src/System/IO/DirectoryNotFoundException.cs46
-rw-r--r--src/mscorlib/src/System/IO/DriveInfo.cs281
-rw-r--r--src/mscorlib/src/System/IO/DriveNotFoundException.cs40
-rw-r--r--src/mscorlib/src/System/IO/EndOfStreamException.cs43
-rw-r--r--src/mscorlib/src/System/IO/File.cs1255
-rw-r--r--src/mscorlib/src/System/IO/FileAccess.cs42
-rw-r--r--src/mscorlib/src/System/IO/FileAttributes.cs51
-rw-r--r--src/mscorlib/src/System/IO/FileInfo.cs431
-rw-r--r--src/mscorlib/src/System/IO/FileLoadException.cs191
-rw-r--r--src/mscorlib/src/System/IO/FileMode.cs54
-rw-r--r--src/mscorlib/src/System/IO/FileNotFoundException.cs170
-rw-r--r--src/mscorlib/src/System/IO/FileOptions.cs47
-rw-r--r--src/mscorlib/src/System/IO/FileSecurityState.cs133
-rw-r--r--src/mscorlib/src/System/IO/FileSecurityStateAccess.cs32
-rw-r--r--src/mscorlib/src/System/IO/FileShare.cs60
-rw-r--r--src/mscorlib/src/System/IO/FileStream.cs2695
-rw-r--r--src/mscorlib/src/System/IO/FileSystemEnumerable.cs852
-rw-r--r--src/mscorlib/src/System/IO/FileSystemInfo.cs361
-rw-r--r--src/mscorlib/src/System/IO/IOException.cs68
-rw-r--r--src/mscorlib/src/System/IO/LongPathHelper.cs521
-rw-r--r--src/mscorlib/src/System/IO/MemoryStream.cs646
-rw-r--r--src/mscorlib/src/System/IO/Path.cs1435
-rw-r--r--src/mscorlib/src/System/IO/PathHelper.cs448
-rw-r--r--src/mscorlib/src/System/IO/PathInternal.cs806
-rw-r--r--src/mscorlib/src/System/IO/PathTooLongException.cs44
-rw-r--r--src/mscorlib/src/System/IO/PinnedBufferMemoryStream.cs73
-rw-r--r--src/mscorlib/src/System/IO/ReadLinesIterator.cs102
-rw-r--r--src/mscorlib/src/System/IO/SearchOption.cs36
-rw-r--r--src/mscorlib/src/System/IO/SeekOrigin.cs32
-rw-r--r--src/mscorlib/src/System/IO/Stream.cs1304
-rw-r--r--src/mscorlib/src/System/IO/StreamReader.cs1293
-rw-r--r--src/mscorlib/src/System/IO/StreamWriter.cs866
-rw-r--r--src/mscorlib/src/System/IO/StringReader.cs187
-rw-r--r--src/mscorlib/src/System/IO/StringWriter.cs196
-rw-r--r--src/mscorlib/src/System/IO/TextReader.cs413
-rw-r--r--src/mscorlib/src/System/IO/TextWriter.cs915
-rw-r--r--src/mscorlib/src/System/IO/UnmanagedMemoryAccessor.cs1176
-rw-r--r--src/mscorlib/src/System/IO/UnmanagedMemoryStream.cs712
-rw-r--r--src/mscorlib/src/System/IO/UnmanagedMemoryStreamWrapper.cs197
-rw-r--r--src/mscorlib/src/System/IO/__DebugOutputTextWriter.cs76
-rw-r--r--src/mscorlib/src/System/IO/__Error.cs232
-rw-r--r--src/mscorlib/src/System/IO/__HResults.cs28
-rw-r--r--src/mscorlib/src/System/IObservable.cs24
-rw-r--r--src/mscorlib/src/System/IObserver.cs27
-rw-r--r--src/mscorlib/src/System/IProgress.cs26
-rw-r--r--src/mscorlib/src/System/IServiceObjectProvider.cs16
-rw-r--r--src/mscorlib/src/System/IndexOutOfRangeException.cs40
-rw-r--r--src/mscorlib/src/System/InsufficientExecutionStackException.cs47
-rw-r--r--src/mscorlib/src/System/InsufficientMemoryException.cs45
-rw-r--r--src/mscorlib/src/System/Int16.cs267
-rw-r--r--src/mscorlib/src/System/Int32.cs239
-rw-r--r--src/mscorlib/src/System/Int64.cs218
-rw-r--r--src/mscorlib/src/System/IntPtr.cs303
-rw-r--r--src/mscorlib/src/System/Internal.cs377
-rw-r--r--src/mscorlib/src/System/InvalidCastException.cs45
-rw-r--r--src/mscorlib/src/System/InvalidOperationException.cs41
-rw-r--r--src/mscorlib/src/System/InvalidProgramException.cs41
-rw-r--r--src/mscorlib/src/System/InvalidTimeZoneException.cs26
-rw-r--r--src/mscorlib/src/System/Lazy.cs517
-rw-r--r--src/mscorlib/src/System/LowLevelConsole.cs50
-rw-r--r--src/mscorlib/src/System/MarshalByRefObject.cs262
-rw-r--r--src/mscorlib/src/System/Math.cs594
-rw-r--r--src/mscorlib/src/System/MemberAccessException.cs48
-rw-r--r--src/mscorlib/src/System/MethodAccessException.cs39
-rw-r--r--src/mscorlib/src/System/MidpointRounding.cs13
-rw-r--r--src/mscorlib/src/System/MissingFieldException.cs73
-rw-r--r--src/mscorlib/src/System/MissingMemberException.cs105
-rw-r--r--src/mscorlib/src/System/MissingMethodException.cs75
-rw-r--r--src/mscorlib/src/System/MulticastDelegate.cs754
-rw-r--r--src/mscorlib/src/System/MulticastNotSupportedException.cs37
-rw-r--r--src/mscorlib/src/System/NonSerializedAttribute.cs36
-rw-r--r--src/mscorlib/src/System/NotFiniteNumberException.cs70
-rw-r--r--src/mscorlib/src/System/NotImplementedException.cs40
-rw-r--r--src/mscorlib/src/System/NotSupportedException.cs41
-rw-r--r--src/mscorlib/src/System/NullReferenceException.cs40
-rw-r--r--src/mscorlib/src/System/Nullable.cs158
-rw-r--r--src/mscorlib/src/System/Number.cs1215
-rw-r--r--src/mscorlib/src/System/Object.cs255
-rw-r--r--src/mscorlib/src/System/ObjectDisposedException.cs74
-rw-r--r--src/mscorlib/src/System/ObsoleteAttribute.cs60
-rw-r--r--src/mscorlib/src/System/OleAutBinder.cs113
-rw-r--r--src/mscorlib/src/System/OperatingSystem.cs157
-rw-r--r--src/mscorlib/src/System/OperationCanceledException.cs70
-rw-r--r--src/mscorlib/src/System/OutOfMemoryException.cs40
-rw-r--r--src/mscorlib/src/System/OverflowException.cs42
-rw-r--r--src/mscorlib/src/System/ParamArrayAttribute.cs22
-rw-r--r--src/mscorlib/src/System/ParamsArray.cs81
-rw-r--r--src/mscorlib/src/System/ParseNumbers.cs74
-rw-r--r--src/mscorlib/src/System/PlatformID.cs28
-rw-r--r--src/mscorlib/src/System/PlatformNotSupportedException.cs42
-rw-r--r--src/mscorlib/src/System/Progress.cs119
-rw-r--r--src/mscorlib/src/System/Random.cs214
-rw-r--r--src/mscorlib/src/System/RankException.cs42
-rw-r--r--src/mscorlib/src/System/Reflection/AmbiguousMatchException.cs42
-rw-r--r--src/mscorlib/src/System/Reflection/Assembly.cs3013
-rw-r--r--src/mscorlib/src/System/Reflection/AssemblyAttributes.cs406
-rw-r--r--src/mscorlib/src/System/Reflection/AssemblyName.cs539
-rw-r--r--src/mscorlib/src/System/Reflection/AssemblyNameFlags.cs56
-rw-r--r--src/mscorlib/src/System/Reflection/AssemblyNameProxy.cs28
-rw-r--r--src/mscorlib/src/System/Reflection/Associates.cs212
-rw-r--r--src/mscorlib/src/System/Reflection/Binder.cs51
-rw-r--r--src/mscorlib/src/System/Reflection/BindingFlags.cs64
-rw-r--r--src/mscorlib/src/System/Reflection/CallingConventions.cs29
-rw-r--r--src/mscorlib/src/System/Reflection/ComInterfaces.cs673
-rw-r--r--src/mscorlib/src/System/Reflection/ConstructorInfo.cs781
-rw-r--r--src/mscorlib/src/System/Reflection/CustomAttribute.cs2527
-rw-r--r--src/mscorlib/src/System/Reflection/CustomAttributeExtensions.cs174
-rw-r--r--src/mscorlib/src/System/Reflection/CustomAttributeFormatException.cs38
-rw-r--r--src/mscorlib/src/System/Reflection/DefaultMemberAttribute.cs40
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/AQNBuilder.cs208
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/AssemblyBuilder.cs2245
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/AssemblyBuilderAccess.cs29
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/AssemblyBuilderData.cs583
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/ComInterfaces.cs288
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/ConstructorBuilder.cs335
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/CustomAttributeBuilder.cs582
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/DynamicILGenerator.cs1329
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/DynamicMethod.cs1039
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/EnumBuilder.cs448
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/EventBuilder.cs174
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/EventToken.cs69
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/FieldBuilder.cs281
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/FieldToken.cs86
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/FlowControl.cs37
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/GenericTypeParameterBuilder.cs248
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/ILGenerator.cs2012
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/ISymWrapperCore.cs828
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/Label.cs74
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/LocalBuilder.cs151
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/MethodBuilder.cs1610
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/MethodBuilderInstantiation.cs142
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/MethodToken.cs65
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/ModuleBuilder.cs2422
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/ModuleBuilderData.cs104
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/OpCodes.cs2552
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/Opcode.cs312
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/OpcodeType.cs35
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/OperandType.cs47
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/PEFileKinds.cs17
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/ParameterBuilder.cs172
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/ParameterToken.cs73
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/PropertyBuilder.cs306
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/PropertyToken.cs70
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/SignatureHelper.cs1019
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/SignatureToken.cs68
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/StackBehaviour.cs54
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/StringToken.cs79
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/SymbolMethod.cs184
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/SymbolType.cs606
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/TypeBuilder.cs2620
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/TypeBuilderInstantiation.cs276
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/TypeToken.cs74
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/UnmanagedMarshal.cs184
-rw-r--r--src/mscorlib/src/System/Reflection/Emit/XXXOnTypeBuilderInstantiation.cs331
-rw-r--r--src/mscorlib/src/System/Reflection/EventAttributes.cs30
-rw-r--r--src/mscorlib/src/System/Reflection/EventInfo.cs443
-rw-r--r--src/mscorlib/src/System/Reflection/FieldAttributes.cs43
-rw-r--r--src/mscorlib/src/System/Reflection/FieldInfo.cs955
-rw-r--r--src/mscorlib/src/System/Reflection/GenericParameterAttributes.cs22
-rw-r--r--src/mscorlib/src/System/Reflection/ICustomAttributeProvider.cs34
-rw-r--r--src/mscorlib/src/System/Reflection/IReflect.cs117
-rw-r--r--src/mscorlib/src/System/Reflection/IReflectableType.cs20
-rw-r--r--src/mscorlib/src/System/Reflection/InterfaceMapping.cs27
-rw-r--r--src/mscorlib/src/System/Reflection/IntrospectionExtensions.cs35
-rw-r--r--src/mscorlib/src/System/Reflection/InvalidFilterCriteriaException.cs44
-rw-r--r--src/mscorlib/src/System/Reflection/LoaderAllocator.cs86
-rw-r--r--src/mscorlib/src/System/Reflection/ManifestResourceInfo.cs67
-rw-r--r--src/mscorlib/src/System/Reflection/MdConstant.cs169
-rw-r--r--src/mscorlib/src/System/Reflection/MdImport.cs736
-rw-r--r--src/mscorlib/src/System/Reflection/MemberFilter.cs19
-rw-r--r--src/mscorlib/src/System/Reflection/MemberInfo.cs148
-rw-r--r--src/mscorlib/src/System/Reflection/MemberInfoSerializationHolder.cs287
-rw-r--r--src/mscorlib/src/System/Reflection/MemberTypes.cs34
-rw-r--r--src/mscorlib/src/System/Reflection/Metadata/AssemblyExtensions.cs47
-rw-r--r--src/mscorlib/src/System/Reflection/MethodAttributes.cs56
-rw-r--r--src/mscorlib/src/System/Reflection/MethodBase.cs402
-rw-r--r--src/mscorlib/src/System/Reflection/MethodBody.cs169
-rw-r--r--src/mscorlib/src/System/Reflection/MethodImplAttributes.cs45
-rw-r--r--src/mscorlib/src/System/Reflection/MethodInfo.cs1061
-rw-r--r--src/mscorlib/src/System/Reflection/Missing.cs38
-rw-r--r--src/mscorlib/src/System/Reflection/Module.cs1230
-rw-r--r--src/mscorlib/src/System/Reflection/ObfuscateAssemblyAttribute.cs46
-rw-r--r--src/mscorlib/src/System/Reflection/ObfuscationAttribute.cs75
-rw-r--r--src/mscorlib/src/System/Reflection/ParameterAttributes.cs36
-rw-r--r--src/mscorlib/src/System/Reflection/ParameterInfo.cs795
-rw-r--r--src/mscorlib/src/System/Reflection/ParameterModifier.cs46
-rw-r--r--src/mscorlib/src/System/Reflection/Pointer.cs82
-rw-r--r--src/mscorlib/src/System/Reflection/PropertyAttributes.cs33
-rw-r--r--src/mscorlib/src/System/Reflection/PropertyInfo.cs657
-rw-r--r--src/mscorlib/src/System/Reflection/ReflectionContext.cs36
-rw-r--r--src/mscorlib/src/System/Reflection/ReflectionTypeLoadException.cs80
-rw-r--r--src/mscorlib/src/System/Reflection/ResourceAttributes.cs24
-rw-r--r--src/mscorlib/src/System/Reflection/RuntimeReflectionExtensions.cs88
-rw-r--r--src/mscorlib/src/System/Reflection/StrongNameKeyPair.cs194
-rw-r--r--src/mscorlib/src/System/Reflection/TargetException.cs42
-rw-r--r--src/mscorlib/src/System/Reflection/TargetInvocationException.cs51
-rw-r--r--src/mscorlib/src/System/Reflection/TargetParameterCountException.cs45
-rw-r--r--src/mscorlib/src/System/Reflection/TypeAttributes.cs66
-rw-r--r--src/mscorlib/src/System/Reflection/TypeDelegator.cs263
-rw-r--r--src/mscorlib/src/System/Reflection/TypeFilter.cs19
-rw-r--r--src/mscorlib/src/System/Reflection/TypeInfo.cs195
-rw-r--r--src/mscorlib/src/System/Reflection/__Filters.cs67
-rw-r--r--src/mscorlib/src/System/ResId.cs93
-rw-r--r--src/mscorlib/src/System/Resources/FileBasedResourceGroveler.cs175
-rw-r--r--src/mscorlib/src/System/Resources/IResourceGroveler.cs32
-rw-r--r--src/mscorlib/src/System/Resources/IResourceReader.cs31
-rw-r--r--src/mscorlib/src/System/Resources/IResourceWriter.cs45
-rw-r--r--src/mscorlib/src/System/Resources/LooselyLinkedResourceReference.cs86
-rw-r--r--src/mscorlib/src/System/Resources/ManifestBasedResourceGroveler.cs677
-rw-r--r--src/mscorlib/src/System/Resources/MissingManifestResourceException.cs42
-rw-r--r--src/mscorlib/src/System/Resources/MissingSatelliteAssemblyException.cs56
-rw-r--r--src/mscorlib/src/System/Resources/NeutralResourcesLanguageAttribute.cs65
-rw-r--r--src/mscorlib/src/System/Resources/ResourceFallbackManager.cs278
-rw-r--r--src/mscorlib/src/System/Resources/ResourceManager.cs1679
-rw-r--r--src/mscorlib/src/System/Resources/ResourceReader.cs1424
-rw-r--r--src/mscorlib/src/System/Resources/ResourceSet.cs332
-rw-r--r--src/mscorlib/src/System/Resources/ResourceTypeCode.cs57
-rw-r--r--src/mscorlib/src/System/Resources/RuntimeResourceSet.cs435
-rw-r--r--src/mscorlib/src/System/Resources/SatelliteContractVersionAttribute.cs39
-rw-r--r--src/mscorlib/src/System/Resources/UltimateResourceFallbackLocation.cs29
-rw-r--r--src/mscorlib/src/System/Resources/__FastResourceComparer.cs141
-rw-r--r--src/mscorlib/src/System/Resources/__HResults.cs23
-rw-r--r--src/mscorlib/src/System/RtType.cs5862
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/AccessedThroughPropertyAttribute.cs31
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/AssemblyAttributesGoHere.cs43
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/AssemblySettingAttributes.cs94
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/AsyncMethodBuilder.cs1187
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/AsyncStateMachineAttribute.cs18
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/CallerFilePathAttribute.cs17
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/CallerLineNumberAttribute.cs17
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/CallerMemberNameAttribute.cs17
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/CallingConvention.cs30
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/CompilationRelaxations.cs52
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/CompilerGeneratedAttribute.cs16
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/CompilerGlobalScopeAttribute.cs27
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/CompilerMarshalOverride.cs23
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/ConditionalWeakTable.cs795
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/CustomConstantAttribute.cs31
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/DateTimeConstantAttribute.cs48
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/DecimalConstantAttribute.cs98
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/DecoratedNameAttribute.cs18
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/DisablePrivateReflectionAttribute.cs18
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/DiscardableAttribute.cs19
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/ExtensionAttribute.cs13
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/FixedAddressValueTypeAttribute.cs14
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/FixedBufferAttribute.cs43
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/FormattableStringFactory.cs58
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/HasCopySemanticsAttribute.cs14
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/IAsyncStateMachine.cs27
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/ICastable.cs82
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/IDispatchConstantAttribute.cs26
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/INotifyCompletion.cs40
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/IUnknownConstantAttribute.cs27
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/IndexerNameAttribute.cs17
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/InternalsVisibleToAttribute.cs58
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/IsBoxed.cs11
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/IsByValue.cs11
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/IsConst.cs11
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/IsCopyConstructed.cs11
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/IsExplicitlyDereferenced.cs22
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/IsImplicitlyDereferenced.cs22
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/IsJitIntrinsic.cs12
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/IsLong.cs18
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/IsPinned.cs11
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/IsSignUnspecifiedByte.cs16
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/IsUdtReturn.cs11
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/IsVolatile.cs13
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/IteratorStateMachineAttribute.cs18
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/MethodImplAttribute.cs77
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/NativeCppClassAttribute.cs16
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/ReferenceAssemblyAttribute.cs39
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/RequiredAttributeAttribute.cs26
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/RuntimeCompatibilityAttribute.cs48
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/RuntimeHelpers.cs248
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/RuntimeWrappedException.cs52
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/ScopelessEnumAttribute.cs14
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/SpecialNameAttribute.cs27
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/StateMachineAttribute.cs20
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/SuppressIldasmAttribute.cs19
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/SuppressMergeCheckAttribute.cs23
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/TaskAwaiter.cs531
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/TypeDependencyAttribute.cs29
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/TypeForwardedFromAttribute.cs35
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/TypeForwardedToAttribute.cs47
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/UnsafeValueTypeAttribute.cs14
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/YieldAwaitable.cs168
-rw-r--r--src/mscorlib/src/System/Runtime/CompilerServices/jithelpers.cs224
-rw-r--r--src/mscorlib/src/System/Runtime/ExceptionServices/CorruptingExceptionCommon.cs31
-rw-r--r--src/mscorlib/src/System/Runtime/ExceptionServices/ExceptionServicesCommon.cs135
-rw-r--r--src/mscorlib/src/System/Runtime/GcSettings.cs101
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ArrayWithOffset.cs76
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/Attributes.cs1138
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/BStrWrapper.cs52
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/COMException.cs90
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/CallingConvention.cs22
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/CharSet.cs24
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComEventsHelper.cs202
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComEventsInfo.cs92
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComEventsMethod.cs246
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComEventsSink.cs286
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComMemberType.cs19
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IBindCtx.cs45
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IConnectionPoint.cs29
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IConnectionPointContainer.cs26
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IEnumConnectionPoints.cs30
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IEnumConnections.cs39
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IEnumMoniker.cs30
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IEnumString.cs30
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IEnumVARIANT.cs34
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IEnumerable.cs28
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IEnumerator.cs34
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IExpando.cs31
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IMoniker.cs61
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IPersistFile.cs34
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IReflect.cs79
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IRunningObjectTable.cs34
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComTypes/IStream.cs55
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComTypes/ITypeComp.cs49
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComTypes/ITypeInfo.cs335
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComTypes/ITypeInfo2.cs62
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComTypes/ITypeLib.cs68
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ComTypes/ITypeLib2.cs42
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/CriticalHandle.cs275
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/CurrencyWrapper.cs44
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/DispatchWrapper.cs51
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ErrorWrapper.cs54
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/Expando/IExpando.cs39
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ExtensibleClassFactory.cs41
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ExternalException.cs80
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/GCHandleCookieTable.cs219
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/GcHandle.cs330
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/HandleRef.cs50
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ICustomAdapter.cs23
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ICustomFactory.cs17
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ICustomMarshaler.cs31
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ICustomQueryInterface.cs39
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/IException.cs84
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/IRegistrationServices.cs56
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ITypeLibConverter.cs146
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/InvalidComObjectException.cs40
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/InvalidOleVariantTypeException.cs39
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/LayoutKind.cs18
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/Marshal.cs2806
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/MarshalDirectiveException.cs40
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/NativeBuffer.cs175
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/NativeCallableAttribute.cs28
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/NativeMethods.cs65
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/NonPortable.cs209
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/ObjectCreationDelegate.cs24
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/PInvokeMap.cs48
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/RegistrationServices.cs1087
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/RuntimeEnvironment.cs165
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/SEHException.cs54
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/SafeArrayRankMismatchException.cs41
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/SafeArrayTypeMismatchException.cs42
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/SafeBuffer.cs415
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/SafeHandle.cs317
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/SafeHeapHandle.cs115
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/StringBuffer.cs402
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/TCEAdapterGen/EventItfInfo.cs53
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/TCEAdapterGen/EventProviderWriter.cs773
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/TCEAdapterGen/EventSinkHelperWriter.cs297
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/TCEAdapterGen/NameSpaceExtractor.cs21
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/TCEAdapterGen/TCEAdapterGenerator.cs141
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/TypeLibConverter.cs595
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIBindCtx.cs46
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIConnectionPoint.cs30
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIConnectionPointContainer.cs27
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumConnectionPoints.cs32
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumConnections.cs42
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumMoniker.cs33
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumString.cs32
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumVARIANT.cs35
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumerable.cs30
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIEnumerator.cs32
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIExpando.cs33
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIMoniker.cs60
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIPersistFile.cs36
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIReflect.cs79
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIRunningObjectTable.cs32
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMIStream.cs57
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMITypeComp.cs52
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMITypeInfo.cs330
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UCOMITypeLib.cs71
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/UnknownWrapper.cs37
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/Variant.cs659
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/VariantWrapper.cs37
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/Attributes.cs123
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/BindableVectorToCollectionAdapter.cs108
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/BindableVectorToListAdapter.cs241
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/CLRIKeyValuePairImpl.cs66
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/CLRIPropertyValueImpl.cs555
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/CLRIReferenceImpl.cs406
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/ConstantSplittableMap.cs288
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/CustomPropertyImpl.cs138
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/DictionaryKeyCollection.cs124
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/DictionaryToMapAdapter.cs118
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/DictionaryValueCollection.cs131
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/EnumeratorToIteratorAdapter.cs168
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/EventRegistrationToken.cs53
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/EventRegistrationTokenTable.cs255
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/IActivationFactory.cs19
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/IClosable.cs57
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/ICustomProperty.cs52
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/ICustomPropertyProvider.cs553
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/IIterable.cs32
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/IIterator.cs54
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/IMap.cs59
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/IMapViewToIReadOnlyDictionaryAdapter.cs324
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/IPropertyValue.cs171
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/IReadOnlyDictionaryToIMapViewAdapter.cs88
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/IReadOnlyListToIVectorViewAdapter.cs141
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/IReference.cs29
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/IRestrictedErrorInfo.cs26
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/IVector.cs113
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/IVectorViewToIReadOnlyListAdapter.cs84
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/IteratorToEnumeratorAdapter.cs210
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/ListToBindableVectorAdapter.cs188
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/ListToBindableVectorViewAdapter.cs94
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/ListToVectorAdapter.cs255
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/ManagedActivationFactory.cs76
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/MapToCollectionAdapter.cs192
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/MapToDictionaryAdapter.cs183
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/MapViewToReadOnlyCollectionAdapter.cs68
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/NativeMethods.cs65
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/PropertyValue.cs64
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/RuntimeClass.cs122
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/VectorToCollectionAdapter.cs127
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/VectorToListAdapter.cs170
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/VectorViewToReadOnlyCollectionAdapter.cs47
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/WindowsFoundationEventHandler.cs15
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/WindowsRuntimeBufferHelper.cs41
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/WindowsRuntimeMarshal.cs1335
-rw-r--r--src/mscorlib/src/System/Runtime/InteropServices/WindowsRuntime/WindowsRuntimeMetadata.cs216
-rw-r--r--src/mscorlib/src/System/Runtime/Loader/AssemblyLoadContext.cs481
-rw-r--r--src/mscorlib/src/System/Runtime/MemoryFailPoint.cs488
-rw-r--r--src/mscorlib/src/System/Runtime/ProfileOptimization.cs54
-rw-r--r--src/mscorlib/src/System/Runtime/Reliability/CriticalFinalizerObject.cs44
-rw-r--r--src/mscorlib/src/System/Runtime/Reliability/PrePrepareMethodAttribute.cs32
-rw-r--r--src/mscorlib/src/System/Runtime/Reliability/ReliabilityContractAttribute.cs67
-rw-r--r--src/mscorlib/src/System/Runtime/Remoting/ObjectHandle.cs81
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/FormatterConverter.cs167
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/FormatterServices.cs590
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/IDeserializationCallback.cs23
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/IFormatter.cs41
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/IFormatterConverter.cs40
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/IObjectReference.cs30
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/ISerializable.cs33
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/ISerializationSurrogate.cs36
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/ISurrogateSelector.cs37
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/MemberHolder.cs51
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/SerializationAttributes.cs64
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/SerializationBinder.cs29
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/SerializationException.cs45
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/SerializationFieldInfo.cs166
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/SerializationInfo.cs798
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/SerializationInfoEnumerator.cs146
-rw-r--r--src/mscorlib/src/System/Runtime/Serialization/StreamingContext.cs74
-rw-r--r--src/mscorlib/src/System/Runtime/Versioning/BinaryCompatibility.cs485
-rw-r--r--src/mscorlib/src/System/Runtime/Versioning/CompatibilitySwitch.cs61
-rw-r--r--src/mscorlib/src/System/Runtime/Versioning/ComponentGuaranteesAttribute.cs44
-rw-r--r--src/mscorlib/src/System/Runtime/Versioning/NonVersionableAttribute.cs33
-rw-r--r--src/mscorlib/src/System/Runtime/Versioning/ResourceAttributes.cs237
-rw-r--r--src/mscorlib/src/System/Runtime/Versioning/TargetFrameworkAttribute.cs45
-rw-r--r--src/mscorlib/src/System/Runtime/Versioning/TargetFrameworkId.cs28
-rw-r--r--src/mscorlib/src/System/RuntimeArgumentHandle.cs24
-rw-r--r--src/mscorlib/src/System/RuntimeHandles.cs2101
-rw-r--r--src/mscorlib/src/System/SByte.cs274
-rw-r--r--src/mscorlib/src/System/Security/AccessControl/Enums.cs81
-rw-r--r--src/mscorlib/src/System/Security/Attributes.cs209
-rw-r--r--src/mscorlib/src/System/Security/BuiltInPermissionSets.cs342
-rw-r--r--src/mscorlib/src/System/Security/CodeAccessPermission.cs284
-rw-r--r--src/mscorlib/src/System/Security/CodeAccessSecurityEngine.cs842
-rw-r--r--src/mscorlib/src/System/Security/FrameSecurityDescriptor.cs564
-rw-r--r--src/mscorlib/src/System/Security/HostProtectionException.cs136
-rw-r--r--src/mscorlib/src/System/Security/HostSecurityManager.cs215
-rw-r--r--src/mscorlib/src/System/Security/IEvidenceFactory.cs20
-rw-r--r--src/mscorlib/src/System/Security/IPermission.cs84
-rw-r--r--src/mscorlib/src/System/Security/ISecurityEncodable.cs29
-rw-r--r--src/mscorlib/src/System/Security/ISecurityPolicyEncodable.cs28
-rw-r--r--src/mscorlib/src/System/Security/IStackWalk.cs23
-rw-r--r--src/mscorlib/src/System/Security/NamedPermissionSet.cs269
-rw-r--r--src/mscorlib/src/System/Security/PermissionListSet.cs554
-rw-r--r--src/mscorlib/src/System/Security/PermissionSet.cs2641
-rw-r--r--src/mscorlib/src/System/Security/PermissionSetEnumerator.cs103
-rw-r--r--src/mscorlib/src/System/Security/PermissionSetTriple.cs282
-rw-r--r--src/mscorlib/src/System/Security/PermissionToken.cs563
-rw-r--r--src/mscorlib/src/System/Security/Permissions/EnvironmentPermission.cs405
-rw-r--r--src/mscorlib/src/System/Security/Permissions/FileDialogPermission.cs189
-rw-r--r--src/mscorlib/src/System/Security/Permissions/FileIOPermission.cs1478
-rw-r--r--src/mscorlib/src/System/Security/Permissions/GACIdentityPermission.cs119
-rw-r--r--src/mscorlib/src/System/Security/Permissions/HostProtectionPermission.cs299
-rw-r--r--src/mscorlib/src/System/Security/Permissions/IBuiltInPermission.cs63
-rw-r--r--src/mscorlib/src/System/Security/Permissions/IUnrestrictedPermission.cs13
-rw-r--r--src/mscorlib/src/System/Security/Permissions/IsolatedStorageFilePermission.cs176
-rw-r--r--src/mscorlib/src/System/Security/Permissions/IsolatedStoragePermission.cs274
-rw-r--r--src/mscorlib/src/System/Security/Permissions/PermissionAttributes.cs1176
-rw-r--r--src/mscorlib/src/System/Security/Permissions/PermissionState.cs21
-rw-r--r--src/mscorlib/src/System/Security/Permissions/ReflectionPermission.cs313
-rw-r--r--src/mscorlib/src/System/Security/Permissions/RegistryPermission.cs494
-rw-r--r--src/mscorlib/src/System/Security/Permissions/SecurityPermission.cs362
-rw-r--r--src/mscorlib/src/System/Security/Permissions/SiteIdentityPermission.cs359
-rw-r--r--src/mscorlib/src/System/Security/Permissions/StrongNameIdentityPermission.cs487
-rw-r--r--src/mscorlib/src/System/Security/Permissions/StrongNamePublicKeyBlob.cs94
-rw-r--r--src/mscorlib/src/System/Security/Permissions/UIPermission.cs371
-rw-r--r--src/mscorlib/src/System/Security/Permissions/URLIdentityPermission.cs391
-rw-r--r--src/mscorlib/src/System/Security/Permissions/ZoneIdentityPermission.cs309
-rw-r--r--src/mscorlib/src/System/Security/Permissions/keycontainerpermission.cs688
-rw-r--r--src/mscorlib/src/System/Security/Policy/ApplicationTrust.cs689
-rw-r--r--src/mscorlib/src/System/Security/Policy/Evidence.cs1903
-rw-r--r--src/mscorlib/src/System/Security/Policy/EvidenceBase.cs193
-rw-r--r--src/mscorlib/src/System/Security/Policy/EvidenceTypeDescriptor.cs160
-rw-r--r--src/mscorlib/src/System/Security/Policy/IDelayEvaluatedEvidence.cs35
-rw-r--r--src/mscorlib/src/System/Security/Policy/IIdentityPermissionFactory.cs20
-rw-r--r--src/mscorlib/src/System/Security/Policy/IRuntimeEvidenceFactory.cs36
-rw-r--r--src/mscorlib/src/System/Security/Policy/PolicyException.cs50
-rw-r--r--src/mscorlib/src/System/Security/Policy/PolicyStatement.cs540
-rw-r--r--src/mscorlib/src/System/Security/Policy/Site.cs128
-rw-r--r--src/mscorlib/src/System/Security/Policy/StrongName.cs222
-rw-r--r--src/mscorlib/src/System/Security/Policy/URL.cs119
-rw-r--r--src/mscorlib/src/System/Security/Policy/Zone.cs151
-rw-r--r--src/mscorlib/src/System/Security/Principal/IIdentity.cs29
-rw-r--r--src/mscorlib/src/System/Security/Principal/IPrincipal.cs26
-rw-r--r--src/mscorlib/src/System/Security/Principal/TokenImpersonationLevel.cs20
-rw-r--r--src/mscorlib/src/System/Security/SafeSecurityHandles.cs164
-rw-r--r--src/mscorlib/src/System/Security/SecurityContext.cs702
-rw-r--r--src/mscorlib/src/System/Security/SecurityElement.cs929
-rw-r--r--src/mscorlib/src/System/Security/SecurityException.cs667
-rw-r--r--src/mscorlib/src/System/Security/SecurityManager.cs671
-rw-r--r--src/mscorlib/src/System/Security/SecurityRuntime.cs299
-rw-r--r--src/mscorlib/src/System/Security/SecurityState.cs34
-rw-r--r--src/mscorlib/src/System/Security/SecurityZone.cs29
-rw-r--r--src/mscorlib/src/System/Security/Util/Config.cs131
-rw-r--r--src/mscorlib/src/System/Security/Util/Hex.cs126
-rw-r--r--src/mscorlib/src/System/Security/Util/StringExpressionSet.cs777
-rw-r--r--src/mscorlib/src/System/Security/Util/TokenBasedSet.cs467
-rw-r--r--src/mscorlib/src/System/Security/Util/TokenBasedSetEnumerator.cs36
-rw-r--r--src/mscorlib/src/System/Security/Util/URLString.cs1366
-rw-r--r--src/mscorlib/src/System/Security/Util/XMLUtil.cs695
-rw-r--r--src/mscorlib/src/System/Security/Util/sitestring.cs289
-rw-r--r--src/mscorlib/src/System/Security/VerificationException.cs33
-rw-r--r--src/mscorlib/src/System/Security/securestring.cs750
-rw-r--r--src/mscorlib/src/System/SerializableAttribute.cs34
-rw-r--r--src/mscorlib/src/System/SharedStatics.cs148
-rw-r--r--src/mscorlib/src/System/Single.cs337
-rw-r--r--src/mscorlib/src/System/StackOverflowException.cs40
-rw-r--r--src/mscorlib/src/System/String.Comparison.cs1160
-rw-r--r--src/mscorlib/src/System/String.Manipulation.cs1596
-rw-r--r--src/mscorlib/src/System/String.Searching.cs358
-rw-r--r--src/mscorlib/src/System/String.cs891
-rw-r--r--src/mscorlib/src/System/StringComparer.cs440
-rw-r--r--src/mscorlib/src/System/StringComparison.cs28
-rw-r--r--src/mscorlib/src/System/StringFreezingAttribute.cs25
-rw-r--r--src/mscorlib/src/System/StringSplitOptions.cs16
-rw-r--r--src/mscorlib/src/System/StubHelpers.cs1957
-rw-r--r--src/mscorlib/src/System/SystemException.cs31
-rw-r--r--src/mscorlib/src/System/Text/ASCIIEncoding.cs773
-rw-r--r--src/mscorlib/src/System/Text/BaseCodePageEncoding.cs350
-rw-r--r--src/mscorlib/src/System/Text/CodePageEncoding.cs139
-rw-r--r--src/mscorlib/src/System/Text/DBCSCodePageEncoding.cs1206
-rw-r--r--src/mscorlib/src/System/Text/Decoder.cs349
-rw-r--r--src/mscorlib/src/System/Text/DecoderBestFitFallback.cs247
-rw-r--r--src/mscorlib/src/System/Text/DecoderExceptionFallback.cs155
-rw-r--r--src/mscorlib/src/System/Text/DecoderFallback.cs284
-rw-r--r--src/mscorlib/src/System/Text/DecoderNLS.cs298
-rw-r--r--src/mscorlib/src/System/Text/DecoderReplacementFallback.cs209
-rw-r--r--src/mscorlib/src/System/Text/EUCJPEncoding.cs186
-rw-r--r--src/mscorlib/src/System/Text/Encoder.cs342
-rw-r--r--src/mscorlib/src/System/Text/EncoderBestFitFallback.cs247
-rw-r--r--src/mscorlib/src/System/Text/EncoderExceptionFallback.cs203
-rw-r--r--src/mscorlib/src/System/Text/EncoderFallback.cs236
-rw-r--r--src/mscorlib/src/System/Text/EncoderNLS.cs296
-rw-r--r--src/mscorlib/src/System/Text/EncoderReplacementFallback.cs233
-rw-r--r--src/mscorlib/src/System/Text/Encoding.cs2152
-rw-r--r--src/mscorlib/src/System/Text/EncodingForwarder.cs339
-rw-r--r--src/mscorlib/src/System/Text/EncodingInfo.cs74
-rw-r--r--src/mscorlib/src/System/Text/EncodingNLS.cs130
-rw-r--r--src/mscorlib/src/System/Text/EncodingProvider.cs137
-rw-r--r--src/mscorlib/src/System/Text/GB18030Encoding.cs1377
-rw-r--r--src/mscorlib/src/System/Text/ISCIIEncoding.cs2625
-rw-r--r--src/mscorlib/src/System/Text/ISO2022Encoding.cs1995
-rw-r--r--src/mscorlib/src/System/Text/Latin1Encoding.cs917
-rw-r--r--src/mscorlib/src/System/Text/MLangCodePageEncoding.cs177
-rw-r--r--src/mscorlib/src/System/Text/Normalization.cs350
-rw-r--r--src/mscorlib/src/System/Text/SBCSCodePageEncoding.cs1020
-rw-r--r--src/mscorlib/src/System/Text/StringBuilder.cs2217
-rw-r--r--src/mscorlib/src/System/Text/StringBuilderCache.cs83
-rw-r--r--src/mscorlib/src/System/Text/SurrogateEncoder.cs58
-rw-r--r--src/mscorlib/src/System/Text/UTF32Encoding.cs1010
-rw-r--r--src/mscorlib/src/System/Text/UTF7Encoding.cs901
-rw-r--r--src/mscorlib/src/System/Text/UTF8Encoding.cs2307
-rw-r--r--src/mscorlib/src/System/Text/UnicodeEncoding.cs1842
-rw-r--r--src/mscorlib/src/System/ThreadAttributes.cs32
-rw-r--r--src/mscorlib/src/System/ThreadStaticAttribute.cs28
-rw-r--r--src/mscorlib/src/System/Threading/AbandonedMutexException.cs85
-rw-r--r--src/mscorlib/src/System/Threading/ApartmentState.cs28
-rw-r--r--src/mscorlib/src/System/Threading/AsyncLocal.cs116
-rw-r--r--src/mscorlib/src/System/Threading/AutoResetEvent.cs27
-rw-r--r--src/mscorlib/src/System/Threading/CancellationToken.cs499
-rw-r--r--src/mscorlib/src/System/Threading/CancellationTokenRegistration.cs161
-rw-r--r--src/mscorlib/src/System/Threading/CancellationTokenSource.cs1269
-rw-r--r--src/mscorlib/src/System/Threading/CountdownEvent.cs592
-rw-r--r--src/mscorlib/src/System/Threading/EventResetMode.cs26
-rw-r--r--src/mscorlib/src/System/Threading/EventWaitHandle.cs297
-rw-r--r--src/mscorlib/src/System/Threading/ExecutionContext.cs1398
-rw-r--r--src/mscorlib/src/System/Threading/IObjectHandle.cs31
-rw-r--r--src/mscorlib/src/System/Threading/Interlocked.cs233
-rw-r--r--src/mscorlib/src/System/Threading/LazyInitializer.cs265
-rw-r--r--src/mscorlib/src/System/Threading/LockCookie.cs57
-rw-r--r--src/mscorlib/src/System/Threading/LockRecursionException.cs34
-rw-r--r--src/mscorlib/src/System/Threading/ManualResetEvent.cs27
-rw-r--r--src/mscorlib/src/System/Threading/ManualResetEventSlim.cs813
-rw-r--r--src/mscorlib/src/System/Threading/Monitor.cs256
-rw-r--r--src/mscorlib/src/System/Threading/Mutex.cs488
-rw-r--r--src/mscorlib/src/System/Threading/Overlapped.cs423
-rw-r--r--src/mscorlib/src/System/Threading/ParameterizedThreadStart.cs24
-rw-r--r--src/mscorlib/src/System/Threading/ReaderWriterLock.cs306
-rw-r--r--src/mscorlib/src/System/Threading/Semaphore.cs201
-rw-r--r--src/mscorlib/src/System/Threading/SemaphoreFullException.cs30
-rw-r--r--src/mscorlib/src/System/Threading/SemaphoreSlim.cs930
-rw-r--r--src/mscorlib/src/System/Threading/SendOrPostCallback.cs16
-rw-r--r--src/mscorlib/src/System/Threading/SpinLock.cs750
-rw-r--r--src/mscorlib/src/System/Threading/SpinWait.cs369
-rw-r--r--src/mscorlib/src/System/Threading/SynchronizationContext.cs320
-rw-r--r--src/mscorlib/src/System/Threading/SynchronizationLockException.cs44
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/AsyncCausalityTracer.cs295
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/BeginEndAwaitableAdapter.cs157
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/ConcurrentExclusiveSchedulerPair.cs795
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/FutureFactory.cs2303
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/IAsyncCausalityTracerStatics.cs101
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/Parallel.cs3594
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/ParallelLoopState.cs642
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/ParallelRangeManager.cs278
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/ProducerConsumerQueues.cs553
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/TPLETWProvider.cs763
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/Task.cs7344
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/TaskCanceledException.cs93
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/TaskCompletionSource.cs370
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/TaskContinuation.cs867
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/TaskExceptionHolder.cs424
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/TaskFactory.cs3206
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/TaskScheduler.cs757
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/TaskSchedulerException.cs81
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/TaskToApm.cs189
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/ThreadPoolTaskScheduler.cs139
-rw-r--r--src/mscorlib/src/System/Threading/Tasks/future.cs1667
-rw-r--r--src/mscorlib/src/System/Threading/Thread.cs1756
-rw-r--r--src/mscorlib/src/System/Threading/ThreadAbortException.cs46
-rw-r--r--src/mscorlib/src/System/Threading/ThreadInterruptedException.cs41
-rw-r--r--src/mscorlib/src/System/Threading/ThreadLocal.cs815
-rw-r--r--src/mscorlib/src/System/Threading/ThreadPool.cs1954
-rw-r--r--src/mscorlib/src/System/Threading/ThreadPriority.cs32
-rw-r--r--src/mscorlib/src/System/Threading/ThreadStart.cs25
-rw-r--r--src/mscorlib/src/System/Threading/ThreadStartException.cs37
-rw-r--r--src/mscorlib/src/System/Threading/ThreadState.cs36
-rw-r--r--src/mscorlib/src/System/Threading/ThreadStateException.cs41
-rw-r--r--src/mscorlib/src/System/Threading/Timeout.cs21
-rw-r--r--src/mscorlib/src/System/Threading/Timer.cs954
-rw-r--r--src/mscorlib/src/System/Threading/Volatile.cs441
-rw-r--r--src/mscorlib/src/System/Threading/WaitHandle.cs617
-rw-r--r--src/mscorlib/src/System/Threading/WaitHandleCannotBeOpenedException.cs40
-rw-r--r--src/mscorlib/src/System/Threading/WaitHandleExtensions.cs46
-rw-r--r--src/mscorlib/src/System/ThrowHelper.cs347
-rw-r--r--src/mscorlib/src/System/TimeSpan.cs445
-rw-r--r--src/mscorlib/src/System/TimeZone.cs249
-rw-r--r--src/mscorlib/src/System/TimeZoneInfo.cs5761
-rw-r--r--src/mscorlib/src/System/TimeZoneNotFoundException.cs26
-rw-r--r--src/mscorlib/src/System/TimeoutException.cs45
-rw-r--r--src/mscorlib/src/System/Tuple.cs959
-rw-r--r--src/mscorlib/src/System/Type.cs1845
-rw-r--r--src/mscorlib/src/System/TypeAccessException.cs40
-rw-r--r--src/mscorlib/src/System/TypeCode.cs48
-rw-r--r--src/mscorlib/src/System/TypeInitializationException.cs66
-rw-r--r--src/mscorlib/src/System/TypeLoadException.cs143
-rw-r--r--src/mscorlib/src/System/TypeNameParser.cs365
-rw-r--r--src/mscorlib/src/System/TypeUnloadedException.cs43
-rw-r--r--src/mscorlib/src/System/TypedReference.cs133
-rw-r--r--src/mscorlib/src/System/UInt16.cs241
-rw-r--r--src/mscorlib/src/System/UInt32.cs223
-rw-r--r--src/mscorlib/src/System/UInt64.cs218
-rw-r--r--src/mscorlib/src/System/UIntPtr.cs249
-rw-r--r--src/mscorlib/src/System/UnSafeCharBuffer.cs57
-rw-r--r--src/mscorlib/src/System/UnauthorizedAccessException.cs43
-rw-r--r--src/mscorlib/src/System/UnhandledExceptionEventArgs.cs29
-rw-r--r--src/mscorlib/src/System/UnhandledExceptionEventHandler.cs14
-rw-r--r--src/mscorlib/src/System/UnitySerializationHolder.cs359
-rw-r--r--src/mscorlib/src/System/ValueType.cs93
-rw-r--r--src/mscorlib/src/System/Variant.cs681
-rw-r--r--src/mscorlib/src/System/Version.cs504
-rw-r--r--src/mscorlib/src/System/Void.cs18
-rw-r--r--src/mscorlib/src/System/WeakReference.cs125
-rw-r--r--src/mscorlib/src/System/WeakReferenceOfT.cs121
-rw-r--r--src/mscorlib/src/System/XmlIgnoreMemberAttribute.cs21
-rw-r--r--src/mscorlib/src/System/_LocalDataStore.cs244
-rw-r--r--src/mscorlib/src/System/_LocalDataStoreMgr.cs339
-rw-r--r--src/mscorlib/src/System/__ComObject.cs206
-rw-r--r--src/mscorlib/src/System/__Filters.cs155
-rw-r--r--src/mscorlib/src/System/__HResults.cs129
-rw-r--r--src/mscorlib/src/System/cominterfaces.cs68
-rw-r--r--src/mscorlib/src/System/mda.cs88
977 files changed, 349392 insertions, 0 deletions
diff --git a/src/mscorlib/src/System/AccessViolationException.cs b/src/mscorlib/src/System/AccessViolationException.cs
new file mode 100644
index 0000000000..308d52e9ed
--- /dev/null
+++ b/src/mscorlib/src/System/AccessViolationException.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.
+
+/*=============================================================================
+**
+**
+**
+** Purpose: Exception class representing an AV that was deemed unsafe and may have corrupted the application.
+**
+**
+=============================================================================*/
+
+namespace System
+{
+
+ using System;
+ using System.Runtime.Serialization;
+ [System.Runtime.InteropServices.ComVisible(true)]
+ [Serializable]
+ public class AccessViolationException : SystemException
+ {
+ public AccessViolationException()
+ : base(Environment.GetResourceString("Arg_AccessViolationException"))
+ {
+ SetErrorCode(__HResults.E_POINTER);
+ }
+
+ public AccessViolationException(String message)
+ : base(message)
+ {
+ SetErrorCode(__HResults.E_POINTER);
+ }
+
+ public AccessViolationException(String message, Exception innerException)
+ : base(message, innerException)
+ {
+ SetErrorCode(__HResults.E_POINTER);
+ }
+
+ protected AccessViolationException(SerializationInfo info, StreamingContext context) : base(info, context) {}
+
+#pragma warning disable 169 // Field is not used from managed.
+ private IntPtr _ip; // Address of faulting instruction.
+ private IntPtr _target; // Address that could not be accessed.
+ private int _accessType; // 0:read, 1:write
+#pragma warning restore 169
+
+ }
+
+}
diff --git a/src/mscorlib/src/System/Action.cs b/src/mscorlib/src/System/Action.cs
new file mode 100644
index 0000000000..d6653c7979
--- /dev/null
+++ b/src/mscorlib/src/System/Action.cs
@@ -0,0 +1,78 @@
+// 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 {
+ using System.Runtime.CompilerServices;
+
+ public delegate void Action<in T>(T obj);
+
+ // Action/Func delegates first shipped with .NET Framework 3.5 in System.Core.dll as part of LINQ
+ // These were type forwarded to mscorlib.dll in .NET Framework 4.0 and in Silverlight 5.0
+
+#if !FEATURE_CORECLR
+ [TypeForwardedFrom("System.Core, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089")]
+#endif
+ public delegate void Action();
+
+#if !FEATURE_CORECLR
+ [TypeForwardedFrom("System.Core, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089")]
+#endif
+ public delegate void Action<in T1,in T2>(T1 arg1, T2 arg2);
+
+#if !FEATURE_CORECLR
+ [TypeForwardedFrom("System.Core, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089")]
+#endif
+ public delegate void Action<in T1,in T2,in T3>(T1 arg1, T2 arg2, T3 arg3);
+
+#if !FEATURE_CORECLR
+ [TypeForwardedFrom("System.Core, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089")]
+#endif
+ public delegate void Action<in T1,in T2,in T3,in T4>(T1 arg1, T2 arg2, T3 arg3, T4 arg4);
+
+#if !FEATURE_CORECLR
+ [TypeForwardedFrom("System.Core, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089")]
+#endif
+ public delegate TResult Func<out TResult>();
+
+#if !FEATURE_CORECLR
+ [TypeForwardedFrom("System.Core, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089")]
+#endif
+ public delegate TResult Func<in T, out TResult>(T arg);
+
+#if !FEATURE_CORECLR
+ [TypeForwardedFrom("System.Core, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089")]
+#endif
+ public delegate TResult Func<in T1, in T2, out TResult>(T1 arg1, T2 arg2);
+
+#if !FEATURE_CORECLR
+ [TypeForwardedFrom("System.Core, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089")]
+#endif
+ public delegate TResult Func<in T1, in T2, in T3, out TResult>(T1 arg1, T2 arg2, T3 arg3);
+
+#if !FEATURE_CORECLR
+ [TypeForwardedFrom("System.Core, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089")]
+#endif
+ public delegate TResult Func<in T1, in T2, in T3, in T4, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4);
+
+
+ public delegate void Action<in T1,in T2,in T3,in T4,in T5>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5);
+ public delegate void Action<in T1,in T2,in T3,in T4,in T5,in T6>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6);
+ public delegate void Action<in T1,in T2,in T3,in T4,in T5,in T6,in T7>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7);
+ public delegate void Action<in T1,in T2,in T3,in T4,in T5,in T6,in T7,in T8>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8);
+
+ public delegate TResult Func<in T1, in T2, in T3, in T4, in T5, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5);
+ public delegate TResult Func<in T1, in T2, in T3, in T4, in T5, in T6, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6);
+ public delegate TResult Func<in T1, in T2, in T3, in T4, in T5, in T6, in T7, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7);
+ public delegate TResult Func<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8);
+
+ public delegate int Comparison<in T>(T x, T y);
+
+ public delegate TOutput Converter<in TInput, out TOutput>(TInput input);
+
+ public delegate bool Predicate<in T>(T obj);
+
+}
+
diff --git a/src/mscorlib/src/System/Activator.cs b/src/mscorlib/src/System/Activator.cs
new file mode 100644
index 0000000000..274b0e7ec5
--- /dev/null
+++ b/src/mscorlib/src/System/Activator.cs
@@ -0,0 +1,688 @@
+// 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.
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+//
+// Activator is an object that contains the Activation (CreateInstance/New)
+// methods for late bound support.
+//
+//
+//
+//
+namespace System {
+
+ using System;
+ using System.Reflection;
+ using System.Runtime.Remoting;
+#if FEATURE_REMOTING
+ using System.Runtime.Remoting.Activation;
+ using Message = System.Runtime.Remoting.Messaging.Message;
+#endif
+ using System.Security;
+ using CultureInfo = System.Globalization.CultureInfo;
+ using Evidence = System.Security.Policy.Evidence;
+ using StackCrawlMark = System.Threading.StackCrawlMark;
+ using System.Runtime.InteropServices;
+ using System.Runtime.CompilerServices;
+ using System.Security.Permissions;
+ using AssemblyHashAlgorithm = System.Configuration.Assemblies.AssemblyHashAlgorithm;
+ using System.Runtime.Versioning;
+ using System.Diagnostics.Contracts;
+
+ // Only statics, does not need to be marked with the serializable attribute
+ [ClassInterface(ClassInterfaceType.None)]
+ [ComDefaultInterface(typeof(_Activator))]
+[System.Runtime.InteropServices.ComVisible(true)]
+ public sealed class Activator : _Activator
+ {
+ internal const int LookupMask = 0x000000FF;
+ internal const BindingFlags ConLookup = (BindingFlags) (BindingFlags.Instance | BindingFlags.Public);
+ internal const BindingFlags ConstructorDefault= BindingFlags.Instance | BindingFlags.Public | BindingFlags.CreateInstance;
+
+ // This class only contains statics, so hide the worthless constructor
+ private Activator()
+ {
+ }
+
+ // CreateInstance
+ // The following methods will create a new instance of an Object
+ // Full Binding Support
+ // For all of these methods we need to get the underlying RuntimeType and
+ // call the Impl version.
+ static public Object CreateInstance(Type type,
+ BindingFlags bindingAttr,
+ Binder binder,
+ Object[] args,
+ CultureInfo culture)
+ {
+ return CreateInstance(type, bindingAttr, binder, args, culture, null);
+ }
+
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
+ static public Object CreateInstance(Type type,
+ BindingFlags bindingAttr,
+ Binder binder,
+ Object[] args,
+ CultureInfo culture,
+ Object[] activationAttributes)
+ {
+ if ((object)type == null)
+ throw new ArgumentNullException("type");
+ Contract.EndContractBlock();
+
+ if (type is System.Reflection.Emit.TypeBuilder)
+ throw new NotSupportedException(Environment.GetResourceString("NotSupported_CreateInstanceWithTypeBuilder"));
+
+ // If they didn't specify a lookup, then we will provide the default lookup.
+ if ((bindingAttr & (BindingFlags) LookupMask) == 0)
+ bindingAttr |= Activator.ConstructorDefault;
+
+ if (activationAttributes != null && activationAttributes.Length > 0){
+ // If type does not derive from MBR
+ // throw notsupportedexception
+#if FEATURE_REMOTING
+ if(type.IsMarshalByRef){
+ // The fix below is preventative.
+ //
+ if(!(type.IsContextful)){
+ if(activationAttributes.Length > 1 || !(activationAttributes[0] is UrlAttribute))
+ throw new NotSupportedException(Environment.GetResourceString("NotSupported_NonUrlAttrOnMBR"));
+ }
+ }
+ else
+#endif
+ throw new NotSupportedException(Environment.GetResourceString("NotSupported_ActivAttrOnNonMBR" ));
+ }
+
+ RuntimeType rt = type.UnderlyingSystemType as RuntimeType;
+
+ if (rt == null)
+ throw new ArgumentException(Environment.GetResourceString("Arg_MustBeType"),"type");
+
+ StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
+ return rt.CreateInstanceImpl(bindingAttr,binder,args,culture,activationAttributes, ref stackMark);
+ }
+
+ static public Object CreateInstance(Type type, params Object[] args)
+ {
+ return CreateInstance(type,
+ Activator.ConstructorDefault,
+ null,
+ args,
+ null,
+ null);
+ }
+
+ static public Object CreateInstance(Type type,
+ Object[] args,
+ Object[] activationAttributes)
+ {
+ return CreateInstance(type,
+ Activator.ConstructorDefault,
+ null,
+ args,
+ null,
+ activationAttributes);
+ }
+
+ static public Object CreateInstance(Type type)
+ {
+ return Activator.CreateInstance(type, false);
+ }
+
+ /*
+ * Create an instance using the name of type and the assembly where it exists. This allows
+ * types to be created remotely without having to load the type locally.
+ */
+
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
+ static public ObjectHandle CreateInstance(String assemblyName,
+ String typeName)
+ {
+ StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
+ return CreateInstance(assemblyName,
+ typeName,
+ false,
+ Activator.ConstructorDefault,
+ null,
+ null,
+ null,
+ null,
+ null,
+ ref stackMark);
+ }
+
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
+ static public ObjectHandle CreateInstance(String assemblyName,
+ String typeName,
+ Object[] activationAttributes)
+
+ {
+ StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
+ return CreateInstance(assemblyName,
+ typeName,
+ false,
+ Activator.ConstructorDefault,
+ null,
+ null,
+ null,
+ activationAttributes,
+ null,
+ ref stackMark);
+ }
+
+ [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
+ static public Object CreateInstance(Type type, bool nonPublic)
+ {
+ if ((object)type == null)
+ throw new ArgumentNullException("type");
+ Contract.EndContractBlock();
+
+ RuntimeType rt = type.UnderlyingSystemType as RuntimeType;
+
+ if (rt == null)
+ throw new ArgumentException(Environment.GetResourceString("Arg_MustBeType"), "type");
+
+ StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
+ return rt.CreateInstanceDefaultCtor(!nonPublic, false, true, ref stackMark);
+ }
+
+ [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
+ static public T CreateInstance<T>()
+ {
+ RuntimeType rt = typeof(T) as RuntimeType;
+
+ // This is a workaround to maintain compatibility with V2. Without this we would throw a NotSupportedException for void[].
+ // Array, Ref, and Pointer types don't have default constructors.
+ if (rt.HasElementType)
+ throw new MissingMethodException(Environment.GetResourceString("Arg_NoDefCTor"));
+
+ StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
+
+ // Skip the CreateInstanceCheckThis call to avoid perf cost and to maintain compatibility with V2 (throwing the same exceptions).
+ return (T)rt.CreateInstanceDefaultCtor(true /*publicOnly*/, true /*skipCheckThis*/, true /*fillCache*/, ref stackMark);
+ }
+
+ static public ObjectHandle CreateInstanceFrom(String assemblyFile,
+ String typeName)
+
+ {
+ return CreateInstanceFrom(assemblyFile, typeName, null);
+ }
+
+ static public ObjectHandle CreateInstanceFrom(String assemblyFile,
+ String typeName,
+ Object[] activationAttributes)
+
+ {
+ return CreateInstanceFrom(assemblyFile,
+ typeName,
+ false,
+ Activator.ConstructorDefault,
+ null,
+ null,
+ null,
+ activationAttributes);
+ }
+
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
+ [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstance which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
+ static public ObjectHandle CreateInstance(String assemblyName,
+ String typeName,
+ bool ignoreCase,
+ BindingFlags bindingAttr,
+ Binder binder,
+ Object[] args,
+ CultureInfo culture,
+ Object[] activationAttributes,
+ Evidence securityInfo)
+ {
+ StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
+ return CreateInstance(assemblyName,
+ typeName,
+ ignoreCase,
+ bindingAttr,
+ binder,
+ args,
+ culture,
+ activationAttributes,
+ securityInfo,
+ ref stackMark);
+ }
+
+ [SecuritySafeCritical]
+ [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
+ public static ObjectHandle CreateInstance(string assemblyName,
+ string typeName,
+ bool ignoreCase,
+ BindingFlags bindingAttr,
+ Binder binder,
+ object[] args,
+ CultureInfo culture,
+ object[] activationAttributes)
+ {
+ StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
+ return CreateInstance(assemblyName,
+ typeName,
+ ignoreCase,
+ bindingAttr,
+ binder,
+ args,
+ culture,
+ activationAttributes,
+ null,
+ ref stackMark);
+ }
+
+ [System.Security.SecurityCritical] // auto-generated
+ static internal ObjectHandle CreateInstance(String assemblyString,
+ String typeName,
+ bool ignoreCase,
+ BindingFlags bindingAttr,
+ Binder binder,
+ Object[] args,
+ CultureInfo culture,
+ Object[] activationAttributes,
+ Evidence securityInfo,
+ ref StackCrawlMark stackMark)
+ {
+#if FEATURE_CAS_POLICY
+ if (securityInfo != null && !AppDomain.CurrentDomain.IsLegacyCasPolicyEnabled)
+ {
+ throw new NotSupportedException(Environment.GetResourceString("NotSupported_RequiresCasPolicyImplicit"));
+ }
+#endif // FEATURE_CAS_POLICY
+
+ Type type = null;
+ Assembly assembly = null;
+ if (assemblyString == null) {
+ assembly = RuntimeAssembly.GetExecutingAssembly(ref stackMark);
+ } else {
+ RuntimeAssembly assemblyFromResolveEvent;
+ AssemblyName assemblyName = RuntimeAssembly.CreateAssemblyName(assemblyString, false /*forIntrospection*/, out assemblyFromResolveEvent);
+ if (assemblyFromResolveEvent != null) {
+ // Assembly was resolved via AssemblyResolve event
+ assembly = assemblyFromResolveEvent;
+ } else if (assemblyName.ContentType == AssemblyContentType.WindowsRuntime) {
+ // WinRT type - we have to use Type.GetType
+ type = Type.GetType(typeName + ", " + assemblyString, true /*throwOnError*/, ignoreCase);
+ } else {
+ // Classic managed type
+ assembly = RuntimeAssembly.InternalLoadAssemblyName(
+ assemblyName, securityInfo, null, ref stackMark,
+ true /*thrownOnFileNotFound*/, false /*forIntrospection*/, false /*suppressSecurityChecks*/);
+ }
+ }
+
+ if (type == null) {
+ // It's classic managed type (not WinRT type)
+ Log(assembly != null, "CreateInstance:: ", "Loaded " + assembly.FullName, "Failed to Load: " + assemblyString);
+ if(assembly == null) return null;
+
+ type = assembly.GetType(typeName, true /*throwOnError*/, ignoreCase);
+ }
+
+ Object o = Activator.CreateInstance(type,
+ bindingAttr,
+ binder,
+ args,
+ culture,
+ activationAttributes);
+
+ Log(o != null, "CreateInstance:: ", "Created Instance of class " + typeName, "Failed to create instance of class " + typeName);
+ if(o == null)
+ return null;
+ else {
+ ObjectHandle Handle = new ObjectHandle(o);
+ return Handle;
+ }
+ }
+
+ [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
+ static public ObjectHandle CreateInstanceFrom(String assemblyFile,
+ String typeName,
+ bool ignoreCase,
+ BindingFlags bindingAttr,
+ Binder binder,
+ Object[] args,
+ CultureInfo culture,
+ Object[] activationAttributes,
+ Evidence securityInfo)
+
+ {
+#if FEATURE_CAS_POLICY
+ if (securityInfo != null && !AppDomain.CurrentDomain.IsLegacyCasPolicyEnabled)
+ {
+ throw new NotSupportedException(Environment.GetResourceString("NotSupported_RequiresCasPolicyImplicit"));
+ }
+#endif // FEATURE_CAS_POLICY
+
+ return CreateInstanceFromInternal(assemblyFile,
+ typeName,
+ ignoreCase,
+ bindingAttr,
+ binder,
+ args,
+ culture,
+ activationAttributes,
+ securityInfo);
+ }
+
+ public static ObjectHandle CreateInstanceFrom(string assemblyFile,
+ string typeName,
+ bool ignoreCase,
+ BindingFlags bindingAttr,
+ Binder binder,
+ object[] args,
+ CultureInfo culture,
+ object[] activationAttributes)
+ {
+ return CreateInstanceFromInternal(assemblyFile,
+ typeName,
+ ignoreCase,
+ bindingAttr,
+ binder,
+ args,
+ culture,
+ activationAttributes,
+ null);
+ }
+
+ private static ObjectHandle CreateInstanceFromInternal(String assemblyFile,
+ String typeName,
+ bool ignoreCase,
+ BindingFlags bindingAttr,
+ Binder binder,
+ Object[] args,
+ CultureInfo culture,
+ Object[] activationAttributes,
+ Evidence securityInfo)
+ {
+#if FEATURE_CAS_POLICY
+ Contract.Assert(AppDomain.CurrentDomain.IsLegacyCasPolicyEnabled || securityInfo == null);
+#endif // FEATURE_CAS_POLICY
+
+#pragma warning disable 618
+ Assembly assembly = Assembly.LoadFrom(assemblyFile, securityInfo);
+#pragma warning restore 618
+ Type t = assembly.GetType(typeName, true, ignoreCase);
+
+ Object o = Activator.CreateInstance(t,
+ bindingAttr,
+ binder,
+ args,
+ culture,
+ activationAttributes);
+
+ Log(o != null, "CreateInstanceFrom:: ", "Created Instance of class " + typeName, "Failed to create instance of class " + typeName);
+ if(o == null)
+ return null;
+ else {
+ ObjectHandle Handle = new ObjectHandle(o);
+ return Handle;
+ }
+ }
+
+ //
+ // This API is designed to be used when a host needs to execute code in an AppDomain
+ // with restricted security permissions. In that case, we demand in the client domain
+ // and assert in the server domain because the server domain might not be trusted enough
+ // to pass the security checks when activating the type.
+ //
+
+ [System.Security.SecurityCritical] // auto-generated_required
+ public static ObjectHandle CreateInstance (AppDomain domain, string assemblyName, string typeName) {
+ if (domain == null)
+ throw new ArgumentNullException("domain");
+ Contract.EndContractBlock();
+ return domain.InternalCreateInstanceWithNoSecurity(assemblyName, typeName);
+ }
+
+ [System.Security.SecurityCritical] // auto-generated_required
+ [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstance which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
+ public static ObjectHandle CreateInstance (AppDomain domain,
+ string assemblyName,
+ string typeName,
+ bool ignoreCase,
+ BindingFlags bindingAttr,
+ Binder binder,
+ Object[] args,
+ CultureInfo culture,
+ Object[] activationAttributes,
+ Evidence securityAttributes) {
+ if (domain == null)
+ throw new ArgumentNullException("domain");
+ Contract.EndContractBlock();
+
+#if FEATURE_CAS_POLICY
+ if (securityAttributes != null && !AppDomain.CurrentDomain.IsLegacyCasPolicyEnabled)
+ {
+ throw new NotSupportedException(Environment.GetResourceString("NotSupported_RequiresCasPolicyImplicit"));
+ }
+#endif // FEATURE_CAS_POLICY
+
+ return domain.InternalCreateInstanceWithNoSecurity(assemblyName, typeName, ignoreCase, bindingAttr, binder, args, culture, activationAttributes, securityAttributes);
+ }
+
+ [SecurityCritical]
+ public static ObjectHandle CreateInstance(AppDomain domain,
+ string assemblyName,
+ string typeName,
+ bool ignoreCase,
+ BindingFlags bindingAttr,
+ Binder binder,
+ object[] args,
+ CultureInfo culture,
+ object[] activationAttributes)
+ {
+ if (domain == null)
+ throw new ArgumentNullException("domain");
+ Contract.EndContractBlock();
+
+ return domain.InternalCreateInstanceWithNoSecurity(assemblyName,
+ typeName,
+ ignoreCase,
+ bindingAttr,
+ binder,
+ args,
+ culture,
+ activationAttributes,
+ null);
+ }
+
+ //
+ // This API is designed to be used when a host needs to execute code in an AppDomain
+ // with restricted security permissions. In that case, we demand in the client domain
+ // and assert in the server domain because the server domain might not be trusted enough
+ // to pass the security checks when activating the type.
+ //
+
+ [System.Security.SecurityCritical] // auto-generated_required
+ public static ObjectHandle CreateInstanceFrom (AppDomain domain, string assemblyFile, string typeName) {
+ if (domain == null)
+ throw new ArgumentNullException("domain");
+ Contract.EndContractBlock();
+ return domain.InternalCreateInstanceFromWithNoSecurity(assemblyFile, typeName);
+ }
+
+ [System.Security.SecurityCritical] // auto-generated_required
+ [Obsolete("Methods which use Evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
+ public static ObjectHandle CreateInstanceFrom (AppDomain domain,
+ string assemblyFile,
+ string typeName,
+ bool ignoreCase,
+ BindingFlags bindingAttr,
+ Binder binder,
+ Object[] args,
+ CultureInfo culture,
+ Object[] activationAttributes,
+ Evidence securityAttributes) {
+ if (domain == null)
+ throw new ArgumentNullException("domain");
+ Contract.EndContractBlock();
+
+#if FEATURE_CAS_POLICY
+ if (securityAttributes != null && !AppDomain.CurrentDomain.IsLegacyCasPolicyEnabled)
+ {
+ throw new NotSupportedException(Environment.GetResourceString("NotSupported_RequiresCasPolicyImplicit"));
+ }
+#endif // FEATURE_CAS_POLICY
+
+ return domain.InternalCreateInstanceFromWithNoSecurity(assemblyFile, typeName, ignoreCase, bindingAttr, binder, args, culture, activationAttributes, securityAttributes);
+ }
+
+ [SecurityCritical]
+ public static ObjectHandle CreateInstanceFrom(AppDomain domain,
+ string assemblyFile,
+ string typeName,
+ bool ignoreCase,
+ BindingFlags bindingAttr,
+ Binder binder,
+ object[] args,
+ CultureInfo culture,
+ object[] activationAttributes)
+ {
+ if (domain == null)
+ throw new ArgumentNullException("domain");
+ Contract.EndContractBlock();
+
+ return domain.InternalCreateInstanceFromWithNoSecurity(assemblyFile,
+ typeName,
+ ignoreCase,
+ bindingAttr,
+ binder,
+ args,
+ culture,
+ activationAttributes,
+ null);
+ }
+
+#if FEATURE_CLICKONCE
+ [System.Security.SecuritySafeCritical] // auto-generated
+ public static ObjectHandle CreateInstance (ActivationContext activationContext) {
+ AppDomainManager domainManager = AppDomain.CurrentDomain.DomainManager;
+ if (domainManager == null)
+ domainManager = new AppDomainManager();
+
+ return domainManager.ApplicationActivator.CreateInstance(activationContext);
+ }
+
+ [System.Security.SecuritySafeCritical] // auto-generated
+ public static ObjectHandle CreateInstance (ActivationContext activationContext, string[] activationCustomData) {
+ AppDomainManager domainManager = AppDomain.CurrentDomain.DomainManager;
+ if (domainManager == null)
+ domainManager = new AppDomainManager();
+
+ return domainManager.ApplicationActivator.CreateInstance(activationContext, activationCustomData);
+ }
+#endif // FEATURE_CLICKONCE
+
+ public static ObjectHandle CreateComInstanceFrom(String assemblyName,
+ String typeName)
+ {
+ return CreateComInstanceFrom(assemblyName,
+ typeName,
+ null,
+ AssemblyHashAlgorithm.None);
+
+ }
+
+ public static ObjectHandle CreateComInstanceFrom(String assemblyName,
+ String typeName,
+ byte[] hashValue,
+ AssemblyHashAlgorithm hashAlgorithm)
+ {
+ Assembly assembly = Assembly.LoadFrom(assemblyName, hashValue, hashAlgorithm);
+
+ Type t = assembly.GetType(typeName, true, false);
+
+ Object[] Attr = t.GetCustomAttributes(typeof(ComVisibleAttribute),false);
+ if (Attr.Length > 0)
+ {
+ if (((ComVisibleAttribute)Attr[0]).Value == false)
+ throw new TypeLoadException(Environment.GetResourceString( "Argument_TypeMustBeVisibleFromCom" ));
+ }
+
+ Log(assembly != null, "CreateInstance:: ", "Loaded " + assembly.FullName, "Failed to Load: " + assemblyName);
+
+ if(assembly == null) return null;
+
+
+ Object o = Activator.CreateInstance(t,
+ Activator.ConstructorDefault,
+ null,
+ null,
+ null,
+ null);
+
+ Log(o != null, "CreateInstance:: ", "Created Instance of class " + typeName, "Failed to create instance of class " + typeName);
+ if(o == null)
+ return null;
+ else {
+ ObjectHandle Handle = new ObjectHandle(o);
+ return Handle;
+ }
+ }
+
+#if FEATURE_REMOTING
+ // This method is a helper method and delegates to the remoting
+ // services to do the actual work.
+ [System.Security.SecurityCritical] // auto-generated_required
+ static public Object GetObject(Type type, String url)
+ {
+ return GetObject(type, url, null);
+ }
+
+ // This method is a helper method and delegates to the remoting
+ // services to do the actual work.
+ [System.Security.SecurityCritical] // auto-generated_required
+ static public Object GetObject(Type type, String url, Object state)
+ {
+ if (type == null)
+ throw new ArgumentNullException("type");
+ Contract.EndContractBlock();
+ return RemotingServices.Connect(type, url, state);
+ }
+#endif
+
+ [System.Diagnostics.Conditional("_DEBUG")]
+ private static void Log(bool test, string title, string success, string failure)
+ {
+#if FEATURE_REMOTING
+ if(test)
+ BCLDebug.Trace("REMOTE", "{0}{1}", title, success);
+ else
+ BCLDebug.Trace("REMOTE", "{0}{1}", title, failure);
+#endif
+ }
+
+ void _Activator.GetTypeInfoCount(out uint pcTInfo)
+ {
+ throw new NotImplementedException();
+ }
+
+ void _Activator.GetTypeInfo(uint iTInfo, uint lcid, IntPtr ppTInfo)
+ {
+ throw new NotImplementedException();
+ }
+
+ void _Activator.GetIDsOfNames([In] ref Guid riid, IntPtr rgszNames, uint cNames, uint lcid, IntPtr rgDispId)
+ {
+ throw new NotImplementedException();
+ }
+
+ // If you implement this method, make sure to include _Activator.Invoke in VM\DangerousAPIs.h and
+ // include _Activator in SystemDomain::IsReflectionInvocationMethod in AppDomain.cpp.
+ void _Activator.Invoke(uint dispIdMember, [In] ref Guid riid, uint lcid, short wFlags, IntPtr pDispParams, IntPtr pVarResult, IntPtr pExcepInfo, IntPtr puArgErr)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
+
diff --git a/src/mscorlib/src/System/AggregateException.cs b/src/mscorlib/src/System/AggregateException.cs
new file mode 100644
index 0000000000..064432aaaa
--- /dev/null
+++ b/src/mscorlib/src/System/AggregateException.cs
@@ -0,0 +1,497 @@
+// 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.
+
+// =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
+//
+//
+//
+// Public type to communicate multiple failures to an end-user.
+//
+// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Diagnostics;
+using System.Globalization;
+using System.Runtime.ExceptionServices;
+using System.Runtime.Serialization;
+using System.Security;
+using System.Text;
+using System.Threading;
+
+namespace System
+{
+
+ /// <summary>Represents one or more errors that occur during application execution.</summary>
+ /// <remarks>
+ /// <see cref="AggregateException"/> is used to consolidate multiple failures into a single, throwable
+ /// exception object.
+ /// </remarks>
+ [Serializable]
+ [DebuggerDisplay("Count = {InnerExceptionCount}")]
+ public class AggregateException : Exception
+ {
+
+ private ReadOnlyCollection<Exception> m_innerExceptions; // Complete set of exceptions.
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="AggregateException"/> class.
+ /// </summary>
+ public AggregateException()
+ : base(Environment.GetResourceString("AggregateException_ctor_DefaultMessage"))
+ {
+ m_innerExceptions = new ReadOnlyCollection<Exception>(new Exception[0]);
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="AggregateException"/> class with
+ /// a specified error message.
+ /// </summary>
+ /// <param name="message">The error message that explains the reason for the exception.</param>
+ public AggregateException(string message)
+ : base(message)
+ {
+ m_innerExceptions = new ReadOnlyCollection<Exception>(new Exception[0]);
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="AggregateException"/> class with a specified error
+ /// message and a reference to the inner exception that is the cause of this exception.
+ /// </summary>
+ /// <param name="message">The error message that explains the reason for the exception.</param>
+ /// <param name="innerException">The exception that is the cause of the current exception.</param>
+ /// <exception cref="T:System.ArgumentNullException">The <paramref name="innerException"/> argument
+ /// is null.</exception>
+ public AggregateException(string message, Exception innerException)
+ : base(message, innerException)
+ {
+ if (innerException == null)
+ {
+ throw new ArgumentNullException("innerException");
+ }
+
+ m_innerExceptions = new ReadOnlyCollection<Exception>(new Exception[] { innerException });
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="AggregateException"/> class with
+ /// references to the inner exceptions that are the cause of this exception.
+ /// </summary>
+ /// <param name="innerExceptions">The exceptions that are the cause of the current exception.</param>
+ /// <exception cref="T:System.ArgumentNullException">The <paramref name="innerExceptions"/> argument
+ /// is null.</exception>
+ /// <exception cref="T:System.ArgumentException">An element of <paramref name="innerExceptions"/> is
+ /// null.</exception>
+ public AggregateException(IEnumerable<Exception> innerExceptions) :
+ this(Environment.GetResourceString("AggregateException_ctor_DefaultMessage"), innerExceptions)
+ {
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="AggregateException"/> class with
+ /// references to the inner exceptions that are the cause of this exception.
+ /// </summary>
+ /// <param name="innerExceptions">The exceptions that are the cause of the current exception.</param>
+ /// <exception cref="T:System.ArgumentNullException">The <paramref name="innerExceptions"/> argument
+ /// is null.</exception>
+ /// <exception cref="T:System.ArgumentException">An element of <paramref name="innerExceptions"/> is
+ /// null.</exception>
+ public AggregateException(params Exception[] innerExceptions) :
+ this(Environment.GetResourceString("AggregateException_ctor_DefaultMessage"), innerExceptions)
+ {
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="AggregateException"/> class with a specified error
+ /// message and references to the inner exceptions that are the cause of this exception.
+ /// </summary>
+ /// <param name="message">The error message that explains the reason for the exception.</param>
+ /// <param name="innerExceptions">The exceptions that are the cause of the current exception.</param>
+ /// <exception cref="T:System.ArgumentNullException">The <paramref name="innerExceptions"/> argument
+ /// is null.</exception>
+ /// <exception cref="T:System.ArgumentException">An element of <paramref name="innerExceptions"/> is
+ /// null.</exception>
+ public AggregateException(string message, IEnumerable<Exception> innerExceptions)
+ // If it's already an IList, pass that along (a defensive copy will be made in the delegated ctor). If it's null, just pass along
+ // null typed correctly. Otherwise, create an IList from the enumerable and pass that along.
+ : this(message, innerExceptions as IList<Exception> ?? (innerExceptions == null ? (List<Exception>)null : new List<Exception>(innerExceptions)))
+ {
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="AggregateException"/> class with a specified error
+ /// message and references to the inner exceptions that are the cause of this exception.
+ /// </summary>
+ /// <param name="message">The error message that explains the reason for the exception.</param>
+ /// <param name="innerExceptions">The exceptions that are the cause of the current exception.</param>
+ /// <exception cref="T:System.ArgumentNullException">The <paramref name="innerExceptions"/> argument
+ /// is null.</exception>
+ /// <exception cref="T:System.ArgumentException">An element of <paramref name="innerExceptions"/> is
+ /// null.</exception>
+ public AggregateException(string message, params Exception[] innerExceptions) :
+ this(message, (IList<Exception>)innerExceptions)
+ {
+ }
+
+ /// <summary>
+ /// Allocates a new aggregate exception with the specified message and list of inner exceptions.
+ /// </summary>
+ /// <param name="message">The error message that explains the reason for the exception.</param>
+ /// <param name="innerExceptions">The exceptions that are the cause of the current exception.</param>
+ /// <exception cref="T:System.ArgumentNullException">The <paramref name="innerExceptions"/> argument
+ /// is null.</exception>
+ /// <exception cref="T:System.ArgumentException">An element of <paramref name="innerExceptions"/> is
+ /// null.</exception>
+ private AggregateException(string message, IList<Exception> innerExceptions)
+ : base(message, innerExceptions != null && innerExceptions.Count > 0 ? innerExceptions[0] : null)
+ {
+ if (innerExceptions == null)
+ {
+ throw new ArgumentNullException("innerExceptions");
+ }
+
+ // Copy exceptions to our internal array and validate them. We must copy them,
+ // because we're going to put them into a ReadOnlyCollection which simply reuses
+ // the list passed in to it. We don't want callers subsequently mutating.
+ Exception[] exceptionsCopy = new Exception[innerExceptions.Count];
+
+ for (int i = 0; i < exceptionsCopy.Length; i++)
+ {
+ exceptionsCopy[i] = innerExceptions[i];
+
+ if (exceptionsCopy[i] == null)
+ {
+ throw new ArgumentException(Environment.GetResourceString("AggregateException_ctor_InnerExceptionNull"));
+ }
+ }
+
+ m_innerExceptions = new ReadOnlyCollection<Exception>(exceptionsCopy);
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="AggregateException"/> class with
+ /// references to the inner exception dispatch info objects that represent the cause of this exception.
+ /// </summary>
+ /// <param name="innerExceptionInfos">
+ /// Information about the exceptions that are the cause of the current exception.
+ /// </param>
+ /// <exception cref="T:System.ArgumentNullException">The <paramref name="innerExceptionInfos"/> argument
+ /// is null.</exception>
+ /// <exception cref="T:System.ArgumentException">An element of <paramref name="innerExceptionInfos"/> is
+ /// null.</exception>
+ internal AggregateException(IEnumerable<ExceptionDispatchInfo> innerExceptionInfos) :
+ this(Environment.GetResourceString("AggregateException_ctor_DefaultMessage"), innerExceptionInfos)
+ {
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="AggregateException"/> class with a specified error
+ /// message and references to the inner exception dispatch info objects that represent the cause of
+ /// this exception.
+ /// </summary>
+ /// <param name="message">The error message that explains the reason for the exception.</param>
+ /// <param name="innerExceptionInfos">
+ /// Information about the exceptions that are the cause of the current exception.
+ /// </param>
+ /// <exception cref="T:System.ArgumentNullException">The <paramref name="innerExceptionInfos"/> argument
+ /// is null.</exception>
+ /// <exception cref="T:System.ArgumentException">An element of <paramref name="innerExceptionInfos"/> is
+ /// null.</exception>
+ internal AggregateException(string message, IEnumerable<ExceptionDispatchInfo> innerExceptionInfos)
+ // If it's already an IList, pass that along (a defensive copy will be made in the delegated ctor). If it's null, just pass along
+ // null typed correctly. Otherwise, create an IList from the enumerable and pass that along.
+ : this(message, innerExceptionInfos as IList<ExceptionDispatchInfo> ??
+ (innerExceptionInfos == null ?
+ (List<ExceptionDispatchInfo>)null :
+ new List<ExceptionDispatchInfo>(innerExceptionInfos)))
+ {
+ }
+
+ /// <summary>
+ /// Allocates a new aggregate exception with the specified message and list of inner
+ /// exception dispatch info objects.
+ /// </summary>
+ /// <param name="message">The error message that explains the reason for the exception.</param>
+ /// <param name="innerExceptionInfos">
+ /// Information about the exceptions that are the cause of the current exception.
+ /// </param>
+ /// <exception cref="T:System.ArgumentNullException">The <paramref name="innerExceptionInfos"/> argument
+ /// is null.</exception>
+ /// <exception cref="T:System.ArgumentException">An element of <paramref name="innerExceptionInfos"/> is
+ /// null.</exception>
+ private AggregateException(string message, IList<ExceptionDispatchInfo> innerExceptionInfos)
+ : base(message, innerExceptionInfos != null && innerExceptionInfos.Count > 0 && innerExceptionInfos[0] != null ?
+ innerExceptionInfos[0].SourceException : null)
+ {
+ if (innerExceptionInfos == null)
+ {
+ throw new ArgumentNullException("innerExceptionInfos");
+ }
+
+ // Copy exceptions to our internal array and validate them. We must copy them,
+ // because we're going to put them into a ReadOnlyCollection which simply reuses
+ // the list passed in to it. We don't want callers subsequently mutating.
+ Exception[] exceptionsCopy = new Exception[innerExceptionInfos.Count];
+
+ for (int i = 0; i < exceptionsCopy.Length; i++)
+ {
+ var edi = innerExceptionInfos[i];
+ if (edi != null) exceptionsCopy[i] = edi.SourceException;
+
+ if (exceptionsCopy[i] == null)
+ {
+ throw new ArgumentException(Environment.GetResourceString("AggregateException_ctor_InnerExceptionNull"));
+ }
+ }
+
+ m_innerExceptions = new ReadOnlyCollection<Exception>(exceptionsCopy);
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="AggregateException"/> class with serialized data.
+ /// </summary>
+ /// <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds
+ /// the serialized object data about the exception being thrown.</param>
+ /// <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that
+ /// contains contextual information about the source or destination. </param>
+ /// <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> argument is null.</exception>
+ /// <exception cref="T:System.Runtime.Serialization.SerializationException">The exception could not be deserialized correctly.</exception>
+ [SecurityCritical]
+ protected AggregateException(SerializationInfo info, StreamingContext context) :
+ base(info, context)
+ {
+ if (info == null)
+ {
+ throw new ArgumentNullException("info");
+ }
+
+ Exception[] innerExceptions = info.GetValue("InnerExceptions", typeof(Exception[])) as Exception[];
+ if (innerExceptions == null)
+ {
+ throw new SerializationException(Environment.GetResourceString("AggregateException_DeserializationFailure"));
+ }
+
+ m_innerExceptions = new ReadOnlyCollection<Exception>(innerExceptions);
+ }
+
+ /// <summary>
+ /// Sets the <see cref="T:System.Runtime.Serialization.SerializationInfo"/> with information about
+ /// the exception.
+ /// </summary>
+ /// <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds
+ /// the serialized object data about the exception being thrown.</param>
+ /// <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that
+ /// contains contextual information about the source or destination. </param>
+ /// <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> argument is null.</exception>
+ [SecurityCritical]
+ public override void GetObjectData(SerializationInfo info, StreamingContext context)
+ {
+ if (info == null)
+ {
+ throw new ArgumentNullException("info");
+ }
+
+ base.GetObjectData(info, context);
+
+ Exception[] innerExceptions = new Exception[m_innerExceptions.Count];
+ m_innerExceptions.CopyTo(innerExceptions, 0);
+ info.AddValue("InnerExceptions", innerExceptions, typeof(Exception[]));
+ }
+
+ /// <summary>
+ /// Returns the <see cref="System.AggregateException"/> that is the root cause of this exception.
+ /// </summary>
+ public override Exception GetBaseException()
+ {
+ // Returns the first inner AggregateException that contains more or less than one inner exception
+
+ // Recursively traverse the inner exceptions as long as the inner exception of type AggregateException and has only one inner exception
+ Exception back = this;
+ AggregateException backAsAggregate = this;
+ while (backAsAggregate != null && backAsAggregate.InnerExceptions.Count == 1)
+ {
+ back = back.InnerException;
+ backAsAggregate = back as AggregateException;
+ }
+ return back;
+ }
+
+ /// <summary>
+ /// Gets a read-only collection of the <see cref="T:System.Exception"/> instances that caused the
+ /// current exception.
+ /// </summary>
+ public ReadOnlyCollection<Exception> InnerExceptions
+ {
+ get { return m_innerExceptions; }
+ }
+
+
+ /// <summary>
+ /// Invokes a handler on each <see cref="T:System.Exception"/> contained by this <see
+ /// cref="AggregateException"/>.
+ /// </summary>
+ /// <param name="predicate">The predicate to execute for each exception. The predicate accepts as an
+ /// argument the <see cref="T:System.Exception"/> to be processed and returns a Boolean to indicate
+ /// whether the exception was handled.</param>
+ /// <remarks>
+ /// Each invocation of the <paramref name="predicate"/> returns true or false to indicate whether the
+ /// <see cref="T:System.Exception"/> was handled. After all invocations, if any exceptions went
+ /// unhandled, all unhandled exceptions will be put into a new <see cref="AggregateException"/>
+ /// which will be thrown. Otherwise, the <see cref="Handle"/> method simply returns. If any
+ /// invocations of the <paramref name="predicate"/> throws an exception, it will halt the processing
+ /// of any more exceptions and immediately propagate the thrown exception as-is.
+ /// </remarks>
+ /// <exception cref="AggregateException">An exception contained by this <see
+ /// cref="AggregateException"/> was not handled.</exception>
+ /// <exception cref="T:System.ArgumentNullException">The <paramref name="predicate"/> argument is
+ /// null.</exception>
+ public void Handle(Func<Exception, bool> predicate)
+ {
+ if (predicate == null)
+ {
+ throw new ArgumentNullException("predicate");
+ }
+
+ List<Exception> unhandledExceptions = null;
+ for (int i = 0; i < m_innerExceptions.Count; i++)
+ {
+ // If the exception was not handled, lazily allocate a list of unhandled
+ // exceptions (to be rethrown later) and add it.
+ if (!predicate(m_innerExceptions[i]))
+ {
+ if (unhandledExceptions == null)
+ {
+ unhandledExceptions = new List<Exception>();
+ }
+
+ unhandledExceptions.Add(m_innerExceptions[i]);
+ }
+ }
+
+ // If there are unhandled exceptions remaining, throw them.
+ if (unhandledExceptions != null)
+ {
+ throw new AggregateException(Message, unhandledExceptions);
+ }
+ }
+
+
+ /// <summary>
+ /// Flattens an <see cref="AggregateException"/> instances into a single, new instance.
+ /// </summary>
+ /// <returns>A new, flattened <see cref="AggregateException"/>.</returns>
+ /// <remarks>
+ /// If any inner exceptions are themselves instances of
+ /// <see cref="AggregateException"/>, this method will recursively flatten all of them. The
+ /// inner exceptions returned in the new <see cref="AggregateException"/>
+ /// will be the union of all of the the inner exceptions from exception tree rooted at the provided
+ /// <see cref="AggregateException"/> instance.
+ /// </remarks>
+ public AggregateException Flatten()
+ {
+ // Initialize a collection to contain the flattened exceptions.
+ List<Exception> flattenedExceptions = new List<Exception>();
+
+ // Create a list to remember all aggregates to be flattened, this will be accessed like a FIFO queue
+ List<AggregateException> exceptionsToFlatten = new List<AggregateException>();
+ exceptionsToFlatten.Add(this);
+ int nDequeueIndex = 0;
+
+ // Continue removing and recursively flattening exceptions, until there are no more.
+ while (exceptionsToFlatten.Count > nDequeueIndex)
+ {
+ // dequeue one from exceptionsToFlatten
+ IList<Exception> currentInnerExceptions = exceptionsToFlatten[nDequeueIndex++].InnerExceptions;
+
+ for (int i = 0; i < currentInnerExceptions.Count; i++)
+ {
+ Exception currentInnerException = currentInnerExceptions[i];
+
+ if (currentInnerException == null)
+ {
+ continue;
+ }
+
+ AggregateException currentInnerAsAggregate = currentInnerException as AggregateException;
+
+ // If this exception is an aggregate, keep it around for later. Otherwise,
+ // simply add it to the list of flattened exceptions to be returned.
+ if (currentInnerAsAggregate != null)
+ {
+ exceptionsToFlatten.Add(currentInnerAsAggregate);
+ }
+ else
+ {
+ flattenedExceptions.Add(currentInnerException);
+ }
+ }
+ }
+
+
+ return new AggregateException(Message, flattenedExceptions);
+ }
+
+ /// <summary>Gets a message that describes the exception.</summary>
+ public override string Message
+ {
+ get
+ {
+ if (m_innerExceptions.Count == 0)
+ {
+ return base.Message;
+ }
+
+ StringBuilder sb = StringBuilderCache.Acquire();
+ sb.Append(base.Message);
+ sb.Append(' ');
+ for (int i = 0; i < m_innerExceptions.Count; i++)
+ {
+ sb.Append('(');
+ sb.Append(m_innerExceptions[i].Message);
+ sb.Append(") ");
+ }
+ sb.Length -= 1;
+ return StringBuilderCache.GetStringAndRelease(sb);
+ }
+ }
+
+ /// <summary>
+ /// Creates and returns a string representation of the current <see cref="AggregateException"/>.
+ /// </summary>
+ /// <returns>A string representation of the current exception.</returns>
+ public override string ToString()
+ {
+ string text = base.ToString();
+
+ for (int i = 0; i < m_innerExceptions.Count; i++)
+ {
+ text = String.Format(
+ CultureInfo.InvariantCulture,
+ Environment.GetResourceString("AggregateException_ToString"),
+ text, Environment.NewLine, i, m_innerExceptions[i].ToString(), "<---", Environment.NewLine);
+ }
+
+ return text;
+ }
+
+ /// <summary>
+ /// This helper property is used by the DebuggerDisplay.
+ ///
+ /// Note that we don't want to remove this property and change the debugger display to {InnerExceptions.Count}
+ /// because DebuggerDisplay should be a single property access or parameterless method call, so that the debugger
+ /// can use a fast path without using the expression evaluator.
+ ///
+ /// See http://msdn.microsoft.com/en-us/library/x810d419.aspx
+ /// </summary>
+ private int InnerExceptionCount
+ {
+ get
+ {
+ return InnerExceptions.Count;
+ }
+ }
+ }
+
+}
diff --git a/src/mscorlib/src/System/AppContext/AppContext.cs b/src/mscorlib/src/System/AppContext/AppContext.cs
new file mode 100644
index 0000000000..0b0643d7b4
--- /dev/null
+++ b/src/mscorlib/src/System/AppContext/AppContext.cs
@@ -0,0 +1,189 @@
+// 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;
+
+namespace System
+{
+ public static class AppContext
+ {
+ [Flags]
+ private enum SwitchValueState
+ {
+ HasFalseValue = 0x1,
+ HasTrueValue = 0x2,
+ HasLookedForOverride = 0x4,
+ UnknownValue = 0x8 // Has no default and could not find an override
+ }
+ private static readonly Dictionary<string, SwitchValueState> s_switchMap = new Dictionary<string, SwitchValueState>();
+
+ public static string BaseDirectory
+ {
+#if FEATURE_CORECLR
+ [System.Security.SecuritySafeCritical]
+#endif
+ get
+ {
+ // The value of APP_CONTEXT_BASE_DIRECTORY key has to be a string and it is not allowed to be any other type.
+ // Otherwise the caller will get invalid cast exception
+ return (string) AppDomain.CurrentDomain.GetData("APP_CONTEXT_BASE_DIRECTORY") ?? AppDomain.CurrentDomain.BaseDirectory;
+ }
+ }
+
+ public static string TargetFrameworkName
+ {
+ get
+ {
+ // Forward the value that is set on the current domain.
+ return AppDomain.CurrentDomain.SetupInformation.TargetFrameworkName;
+ }
+ }
+
+#if FEATURE_CORECLR
+ [System.Security.SecuritySafeCritical]
+#endif
+ public static object GetData(string name)
+ {
+ return AppDomain.CurrentDomain.GetData(name);
+ }
+
+ #region Switch APIs
+ static AppContext()
+ {
+ // populate the AppContext with the default set of values
+ AppContextDefaultValues.PopulateDefaultValues();
+ }
+
+ /// <summary>
+ /// Try to get the value of the switch.
+ /// </summary>
+ /// <param name="switchName">The name of the switch</param>
+ /// <param name="isEnabled">A variable where to place the value of the switch</param>
+ /// <returns>A return value of true represents that the switch was set and <paramref name="isEnabled"/> contains the value of the switch</returns>
+ public static bool TryGetSwitch(string switchName, out bool isEnabled)
+ {
+ if (switchName == null)
+ throw new ArgumentNullException("switchName");
+ if (switchName.Length == 0)
+ throw new ArgumentException(Environment.GetResourceString("Argument_EmptyName"), "switchName");
+
+ // By default, the switch is not enabled.
+ isEnabled = false;
+
+ SwitchValueState switchValue;
+ lock (s_switchMap)
+ {
+ if (s_switchMap.TryGetValue(switchName, out switchValue))
+ {
+ // The value is in the dictionary.
+ // There are 3 cases here:
+ // 1. The value of the switch is 'unknown'. This means that the switch name is not known to the system (either via defaults or checking overrides).
+ // Example: This is the case when, during a servicing event, a switch is added to System.Xml which ships before mscorlib. The value of the switch
+ // Will be unknown to mscorlib.dll and we want to prevent checking the overrides every time we check this switch
+ // 2. The switch has a valid value AND we have read the overrides for it
+ // Example: TryGetSwitch is called for a switch set via SetSwitch
+ // 3. The switch has the default value and we need to check for overrides
+ // Example: TryGetSwitch is called for the first time for a switch that has a default value
+
+ // 1. The value is unknown
+ if (switchValue == SwitchValueState.UnknownValue)
+ {
+ isEnabled = false;
+ return false;
+ }
+
+ // We get the value of isEnabled from the value that we stored in the dictionary
+ isEnabled = (switchValue & SwitchValueState.HasTrueValue) == SwitchValueState.HasTrueValue;
+
+ // 2. The switch has a valid value AND we have checked for overrides
+ if ((switchValue & SwitchValueState.HasLookedForOverride) == SwitchValueState.HasLookedForOverride)
+ {
+ return true;
+ }
+
+ // 3. The switch has a valid value, but we need to check for overrides.
+ // Regardless of whether or not the switch has an override, we need to update the value to reflect
+ // the fact that we checked for overrides.
+ bool overrideValue;
+ if (AppContextDefaultValues.TryGetSwitchOverride(switchName, out overrideValue))
+ {
+ // we found an override!
+ isEnabled = overrideValue;
+ }
+
+ // Update the switch in the dictionary to mark it as 'checked for override'
+ s_switchMap[switchName] = (isEnabled ? SwitchValueState.HasTrueValue : SwitchValueState.HasFalseValue)
+ | SwitchValueState.HasLookedForOverride;
+
+ return true;
+ }
+ else
+ {
+ // The value is NOT in the dictionary
+ // In this case we need to see if we have an override defined for the value.
+ // There are 2 cases:
+ // 1. The value has an override specified. In this case we need to add the value to the dictionary
+ // and mark it as checked for overrides
+ // Example: In a servicing event, System.Xml introduces a switch and an override is specified.
+ // The value is not found in mscorlib (as System.Xml ships independent of mscorlib)
+ // 2. The value does not have an override specified
+ // In this case, we want to capture the fact that we looked for a value and found nothing by adding
+ // an entry in the dictionary with the 'sentinel' value of 'SwitchValueState.UnknownValue'.
+ // Example: This will prevent us from trying to find overrides for values that we don't have in the dictionary
+
+ // 1. The value has an override specified.
+ bool overrideValue;
+ if (AppContextDefaultValues.TryGetSwitchOverride(switchName, out overrideValue))
+ {
+ isEnabled = overrideValue;
+
+ // Update the switch in the dictionary to mark it as 'checked for override'
+ s_switchMap[switchName] = (isEnabled ? SwitchValueState.HasTrueValue : SwitchValueState.HasFalseValue)
+ | SwitchValueState.HasLookedForOverride;
+
+ return true;
+ }
+
+ // 2. The value does not have an override.
+ s_switchMap[switchName] = SwitchValueState.UnknownValue;
+ }
+ }
+ return false; // we did not find a value for the switch
+ }
+
+ /// <summary>
+ /// Assign a switch a value
+ /// </summary>
+ /// <param name="switchName">The name of the switch</param>
+ /// <param name="isEnabled">The value to assign</param>
+ public static void SetSwitch(string switchName, bool isEnabled)
+ {
+ if (switchName == null)
+ throw new ArgumentNullException("switchName");
+ if (switchName.Length == 0)
+ throw new ArgumentException(Environment.GetResourceString("Argument_EmptyName"), "switchName");
+
+ SwitchValueState switchValue = (isEnabled ? SwitchValueState.HasTrueValue : SwitchValueState.HasFalseValue)
+ | SwitchValueState.HasLookedForOverride;
+
+ lock (s_switchMap)
+ {
+ // Store the new value and the fact that we checked in the dictionary
+ s_switchMap[switchName] = switchValue;
+ }
+ }
+
+ /// <summary>
+ /// This method is going to be called from the AppContextDefaultValues class when setting up the
+ /// default values for the switches. !!!! This method is called during the static constructor so it does not
+ /// take a lock !!!! If you are planning to use this outside of that, please ensure proper locking.
+ /// </summary>
+ internal static void DefineSwitchDefault(string switchName, bool isEnabled)
+ {
+ s_switchMap[switchName] = isEnabled ? SwitchValueState.HasTrueValue : SwitchValueState.HasFalseValue;
+ }
+ #endregion
+ }
+}
diff --git a/src/mscorlib/src/System/AppContext/AppContextDefaultValues.CoreClrOverrides.cs b/src/mscorlib/src/System/AppContext/AppContextDefaultValues.CoreClrOverrides.cs
new file mode 100644
index 0000000000..89893c6bee
--- /dev/null
+++ b/src/mscorlib/src/System/AppContext/AppContextDefaultValues.CoreClrOverrides.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.
+
+namespace System
+{
+ internal static partial class AppContextDefaultValues
+ {
+ static partial void TryGetSwitchOverridePartial(string switchName, ref bool overrideFound, ref bool overrideValue)
+ {
+ overrideFound = false;
+ overrideValue = false;
+
+ string value = AppContext.GetData(switchName) as string;
+ if (value != null)
+ {
+ overrideFound = bool.TryParse(value, out overrideValue);
+ }
+ }
+ }
+}
diff --git a/src/mscorlib/src/System/AppContext/AppContextDefaultValues.Defaults.Central.cs b/src/mscorlib/src/System/AppContext/AppContextDefaultValues.Defaults.Central.cs
new file mode 100644
index 0000000000..92c9917113
--- /dev/null
+++ b/src/mscorlib/src/System/AppContext/AppContextDefaultValues.Defaults.Central.cs
@@ -0,0 +1,33 @@
+// 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 file is used to provide an implementation for defining a default value
+// This should be compiled only in mscorlib where the AppContext class is available
+//
+
+namespace System
+{
+ internal static partial class AppContextDefaultValues
+ {
+ /// <summary>
+ /// This method allows reading the override for a switch.
+ /// The implementation is platform specific
+ /// </summary>
+ public static bool TryGetSwitchOverride(string switchName, out bool overrideValue)
+ {
+ // The default value for a switch is 'false'
+ overrideValue = false;
+
+ // Read the override value
+ bool overrideFound = false;
+
+ // This partial method will be removed if there are no implementations of it.
+ TryGetSwitchOverridePartial(switchName, ref overrideFound, ref overrideValue);
+
+ return overrideFound;
+ }
+ }
+}
diff --git a/src/mscorlib/src/System/AppContext/AppContextDefaultValues.Defaults.cs b/src/mscorlib/src/System/AppContext/AppContextDefaultValues.Defaults.cs
new file mode 100644
index 0000000000..c80913e3a6
--- /dev/null
+++ b/src/mscorlib/src/System/AppContext/AppContextDefaultValues.Defaults.cs
@@ -0,0 +1,71 @@
+// 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
+{
+ internal static partial class AppContextDefaultValues
+ {
+
+ internal static readonly string SwitchNoAsyncCurrentCulture = "Switch.System.Globalization.NoAsyncCurrentCulture";
+ internal static readonly string SwitchThrowExceptionIfDisposedCancellationTokenSource = "Switch.System.Threading.ThrowExceptionIfDisposedCancellationTokenSource";
+ internal static readonly string SwitchPreserveEventListnerObjectIdentity = "Switch.System.Diagnostics.EventSource.PreserveEventListnerObjectIdentity";
+#if FEATURE_PATHCOMPAT
+ internal static readonly string SwitchUseLegacyPathHandling = "Switch.System.IO.UseLegacyPathHandling";
+ internal static readonly string SwitchBlockLongPaths = "Switch.System.IO.BlockLongPaths";
+#endif
+
+ // This is a partial method. Platforms can provide an implementation of it that will set override values
+ // from whatever mechanism is available on that platform. If no implementation is provided, the compiler is going to remove the calls
+ // to it from the code
+ // We are going to have an implementation of this method for the Desktop platform that will read the overrides from app.config, registry and
+ // the shim database. Additional implementation can be provided for other platforms.
+ static partial void PopulateOverrideValuesPartial();
+
+ static partial void PopulateDefaultValuesPartial(string platformIdentifier, string profile, int version)
+ {
+ // When defining a new switch you should add it to the last known version.
+ // For instance, if you are adding a switch in .NET 4.6 (the release after 4.5.2) you should defined your switch
+ // like this:
+ // if (version <= 40502) ...
+ // This ensures that all previous versions of that platform (up-to 4.5.2) will get the old behavior by default
+ // NOTE: When adding a default value for a switch please make sure that the default value is added to ALL of the existing platforms!
+ // NOTE: When adding a new if statement for the version please ensure that ALL previous switches are enabled (ie. don't use else if)
+ switch (platformIdentifier)
+ {
+ case ".NETCore":
+ case ".NETFramework":
+ {
+ if (version <= 40502)
+ {
+ AppContext.DefineSwitchDefault(SwitchNoAsyncCurrentCulture, true);
+ AppContext.DefineSwitchDefault(SwitchThrowExceptionIfDisposedCancellationTokenSource, true);
+ }
+#if FEATURE_PATHCOMPAT
+ if (version <= 40601)
+ {
+ AppContext.DefineSwitchDefault(SwitchUseLegacyPathHandling, true);
+ AppContext.DefineSwitchDefault(SwitchBlockLongPaths, true);
+ }
+#endif
+ break;
+ }
+ case "WindowsPhone":
+ case "WindowsPhoneApp":
+ {
+ if (version <= 80100)
+ {
+ AppContext.DefineSwitchDefault(SwitchNoAsyncCurrentCulture, true);
+ AppContext.DefineSwitchDefault(SwitchThrowExceptionIfDisposedCancellationTokenSource, true);
+ }
+ break;
+ }
+ }
+
+ // At this point we should read the overrides if any are defined
+ PopulateOverrideValuesPartial();
+ }
+ }
+}
diff --git a/src/mscorlib/src/System/AppContext/AppContextDefaultValues.cs b/src/mscorlib/src/System/AppContext/AppContextDefaultValues.cs
new file mode 100644
index 0000000000..7ab7ffbc04
--- /dev/null
+++ b/src/mscorlib/src/System/AppContext/AppContextDefaultValues.cs
@@ -0,0 +1,164 @@
+// 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;
+
+namespace System
+{
+ internal static partial class AppContextDefaultValues
+ {
+ public static void PopulateDefaultValues()
+ {
+ string platformIdentifier, profile;
+ int version;
+
+ ParseTargetFrameworkName(out platformIdentifier, out profile, out version);
+
+ // Call into each library to populate their default switches
+ PopulateDefaultValuesPartial(platformIdentifier, profile, version);
+ }
+
+ /// <summary>
+ /// We have this separate method for getting the parsed elements out of the TargetFrameworkName so we can
+ /// more easily support this on other platforms.
+ /// </summary>
+ private static void ParseTargetFrameworkName(out string identifier, out string profile, out int version)
+ {
+ string targetFrameworkMoniker = AppDomain.CurrentDomain.SetupInformation.TargetFrameworkName;
+
+ if (!TryParseFrameworkName(targetFrameworkMoniker, out identifier, out version, out profile))
+ {
+#if FEATURE_CORECLR
+ // If we can't parse the TFM or we don't have a TFM, default to latest behavior for all
+ // switches (ie. all of them false).
+ // If we want to use the latest behavior it is enough to set the value of the switch to string.Empty.
+ // When the get to the caller of this method (PopulateDefaultValuesPartial) we are going to use the
+ // identifier we just set to decide which switches to turn on. By having an empty string as the
+ // identifier we are simply saying -- don't turn on any switches, and we are going to get the latest
+ // behavior for all the switches
+ identifier = string.Empty;
+#else
+ identifier = ".NETFramework";
+ version = 40000;
+ profile = string.Empty;
+#endif
+ }
+ }
+
+ // This code was a constructor copied from the FrameworkName class, which is located in System.dll.
+ // Parses strings in the following format: "<identifier>, Version=[v|V]<version>, Profile=<profile>"
+ // - The identifier and version is required, profile is optional
+ // - Only three components are allowed.
+ // - The version string must be in the System.Version format; an optional "v" or "V" prefix is allowed
+ private static bool TryParseFrameworkName(String frameworkName, out String identifier, out int version, out String profile)
+ {
+ // For parsing a target Framework moniker, from the FrameworkName class
+ const char c_componentSeparator = ',';
+ const char c_keyValueSeparator = '=';
+ const char c_versionValuePrefix = 'v';
+ const String c_versionKey = "Version";
+ const String c_profileKey = "Profile";
+
+ identifier = profile = string.Empty;
+ version = 0;
+
+ if (frameworkName == null || frameworkName.Length == 0)
+ {
+ return false;
+ }
+
+ String[] components = frameworkName.Split(c_componentSeparator);
+ version = 0;
+
+ // Identifer and Version are required, Profile is optional.
+ if (components.Length < 2 || components.Length > 3)
+ {
+ return false;
+ }
+
+ //
+ // 1) Parse the "Identifier", which must come first. Trim any whitespace
+ //
+ identifier = components[0].Trim();
+
+ if (identifier.Length == 0)
+ {
+ return false;
+ }
+
+ bool versionFound = false;
+ profile = null;
+
+ //
+ // The required "Version" and optional "Profile" component can be in any order
+ //
+ for (int i = 1; i < components.Length; i++)
+ {
+ // Get the key/value pair separated by '='
+ string[] keyValuePair = components[i].Split(c_keyValueSeparator);
+
+ if (keyValuePair.Length != 2)
+ {
+ return false;
+ }
+
+ // Get the key and value, trimming any whitespace
+ string key = keyValuePair[0].Trim();
+ string value = keyValuePair[1].Trim();
+
+ //
+ // 2) Parse the required "Version" key value
+ //
+ if (key.Equals(c_versionKey, StringComparison.OrdinalIgnoreCase))
+ {
+ versionFound = true;
+
+ // Allow the version to include a 'v' or 'V' prefix...
+ if (value.Length > 0 && (value[0] == c_versionValuePrefix || value[0] == 'V'))
+ {
+ value = value.Substring(1);
+ }
+ Version realVersion = new Version(value);
+ // The version class will represent some unset values as -1 internally (instead of 0).
+ version = realVersion.Major * 10000;
+ if (realVersion.Minor > 0)
+ version += realVersion.Minor * 100;
+ if (realVersion.Build > 0)
+ version += realVersion.Build;
+ }
+ //
+ // 3) Parse the optional "Profile" key value
+ //
+ else if (key.Equals(c_profileKey, StringComparison.OrdinalIgnoreCase))
+ {
+ if (!String.IsNullOrEmpty(value))
+ {
+ profile = value;
+ }
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ if (!versionFound)
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ // This is a partial method. Platforms (such as Desktop) can provide an implementation of it that will read override value
+ // from whatever mechanism is available on that platform. If no implementation is provided, the compiler is going to remove the calls
+ // to it from the code
+ static partial void TryGetSwitchOverridePartial(string switchName, ref bool overrideFound, ref bool overrideValue);
+
+ /// This is a partial method. This method is responsible for populating the default values based on a TFM.
+ /// It is partial because each library should define this method in their code to contain their defaults.
+ static partial void PopulateDefaultValuesPartial(string platformIdentifier, string profile, int version);
+ }
+}
diff --git a/src/mscorlib/src/System/AppContext/AppContextSwitches.cs b/src/mscorlib/src/System/AppContext/AppContextSwitches.cs
new file mode 100644
index 0000000000..3a96ec2159
--- /dev/null
+++ b/src/mscorlib/src/System/AppContext/AppContextSwitches.cs
@@ -0,0 +1,110 @@
+// 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
+{
+ using System;
+ using System.Runtime.CompilerServices;
+
+ internal static class AppContextSwitches
+ {
+ private static int _noAsyncCurrentCulture;
+ public static bool NoAsyncCurrentCulture
+ {
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ get
+ {
+ return GetCachedSwitchValue(AppContextDefaultValues.SwitchNoAsyncCurrentCulture, ref _noAsyncCurrentCulture);
+ }
+ }
+
+ private static int _throwExceptionIfDisposedCancellationTokenSource;
+ public static bool ThrowExceptionIfDisposedCancellationTokenSource
+ {
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ get
+ {
+ return GetCachedSwitchValue(AppContextDefaultValues.SwitchThrowExceptionIfDisposedCancellationTokenSource, ref _throwExceptionIfDisposedCancellationTokenSource);
+ }
+ }
+
+ private static int _preserveEventListnerObjectIdentity;
+ public static bool PreserveEventListnerObjectIdentity
+ {
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ get
+ {
+ return GetCachedSwitchValue(AppContextDefaultValues.SwitchPreserveEventListnerObjectIdentity, ref _preserveEventListnerObjectIdentity);
+ }
+ }
+
+#if FEATURE_PATHCOMPAT
+ private static int _useLegacyPathHandling;
+
+ /// <summary>
+ /// Use legacy path normalization logic and blocking of extended syntax.
+ /// </summary>
+ public static bool UseLegacyPathHandling
+ {
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ get
+ {
+ return GetCachedSwitchValue(AppContextDefaultValues.SwitchUseLegacyPathHandling, ref _useLegacyPathHandling);
+ }
+ }
+
+ private static int _blockLongPaths;
+
+ /// <summary>
+ /// Throw PathTooLongException for paths greater than MAX_PATH or directories greater than 248 (as per CreateDirectory Win32 limitations)
+ /// </summary>
+ public static bool BlockLongPaths
+ {
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ get
+ {
+ return GetCachedSwitchValue(AppContextDefaultValues.SwitchBlockLongPaths, ref _blockLongPaths);
+ }
+ }
+#endif // FEATURE_PATHCOMPAT
+
+ //
+ // Implementation details
+ //
+
+ private static bool DisableCaching { get; set; }
+
+ static AppContextSwitches()
+ {
+ bool isEnabled;
+ if (AppContext.TryGetSwitch(@"TestSwitch.LocalAppContext.DisableCaching", out isEnabled))
+ {
+ DisableCaching = isEnabled;
+ }
+ }
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ internal static bool GetCachedSwitchValue(string switchName, ref int switchValue)
+ {
+ if (switchValue < 0) return false;
+ if (switchValue > 0) return true;
+
+ return GetCachedSwitchValueInternal(switchName, ref switchValue);
+ }
+
+ private static bool GetCachedSwitchValueInternal(string switchName, ref int switchValue)
+ {
+ bool isSwitchEnabled;
+ AppContext.TryGetSwitch(switchName, out isSwitchEnabled);
+
+ if (DisableCaching)
+ {
+ return isSwitchEnabled;
+ }
+
+ switchValue = isSwitchEnabled ? 1 /*true*/ : -1 /*false*/;
+ return isSwitchEnabled;
+ }
+ }
+}
diff --git a/src/mscorlib/src/System/AppDomain.cs b/src/mscorlib/src/System/AppDomain.cs
new file mode 100644
index 0000000000..abaaf48770
--- /dev/null
+++ b/src/mscorlib/src/System/AppDomain.cs
@@ -0,0 +1,4681 @@
+// 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.
+
+/*=============================================================================
+**
+**
+**
+** Purpose: Domains represent an application within the runtime. Objects can
+** not be shared between domains and each domain can be configured
+** independently.
+**
+**
+=============================================================================*/
+
+namespace System {
+ using System;
+#if FEATURE_CLICKONCE
+ using System.Deployment.Internal.Isolation;
+ using System.Deployment.Internal.Isolation.Manifest;
+ using System.Runtime.Hosting;
+#endif
+ using System.Reflection;
+ using System.Runtime;
+ using System.Runtime.CompilerServices;
+#if FEATURE_REMOTING
+ using System.Runtime.Remoting.Channels;
+ using System.Runtime.Remoting.Contexts;
+#endif
+ using System.Security;
+ using System.Security.Permissions;
+#if FEATURE_IMPERSONATION
+ using System.Security.Principal;
+#endif
+ using System.Security.Policy;
+ using System.Security.Util;
+ using System.Collections;
+ using System.Collections.Generic;
+ using System.Threading;
+ using System.Runtime.InteropServices;
+ using System.Runtime.Remoting;
+#if FEATURE_REMOTING
+ using Context = System.Runtime.Remoting.Contexts.Context;
+#endif
+ using System.Reflection.Emit;
+ using CultureInfo = System.Globalization.CultureInfo;
+#if !FEATURE_CORECLR
+ using System.Globalization;
+#endif
+ using System.IO;
+ using AssemblyHashAlgorithm = System.Configuration.Assemblies.AssemblyHashAlgorithm;
+ using System.Text;
+ using Microsoft.Win32;
+ using System.Runtime.ConstrainedExecution;
+ using System.Runtime.Versioning;
+ using System.Diagnostics.Contracts;
+#if FEATURE_EXCEPTION_NOTIFICATIONS
+ using System.Runtime.ExceptionServices;
+#endif // FEATURE_EXCEPTION_NOTIFICATIONS
+
+ [ComVisible(true)]
+ public class ResolveEventArgs : EventArgs
+ {
+ private String _Name;
+ private Assembly _RequestingAssembly;
+
+ public String Name {
+ get {
+ return _Name;
+ }
+ }
+
+ public Assembly RequestingAssembly
+ {
+ get
+ {
+ return _RequestingAssembly;
+ }
+ }
+
+ public ResolveEventArgs(String name)
+ {
+ _Name = name;
+ }
+
+ public ResolveEventArgs(String name, Assembly requestingAssembly)
+ {
+ _Name = name;
+ _RequestingAssembly = requestingAssembly;
+ }
+ }
+
+ [ComVisible(true)]
+ public class AssemblyLoadEventArgs : EventArgs
+ {
+ private Assembly _LoadedAssembly;
+
+ public Assembly LoadedAssembly {
+ get {
+ return _LoadedAssembly;
+ }
+ }
+
+ public AssemblyLoadEventArgs(Assembly loadedAssembly)
+ {
+ _LoadedAssembly = loadedAssembly;
+ }
+ }
+
+
+ #if FEATURE_CORECLR
+ [System.Security.SecurityCritical] // auto-generated
+ #endif
+ [Serializable]
+ [ComVisible(true)]
+ public delegate Assembly ResolveEventHandler(Object sender, ResolveEventArgs args);
+
+ [Serializable]
+ [ComVisible(true)]
+ public delegate void AssemblyLoadEventHandler(Object sender, AssemblyLoadEventArgs args);
+
+ [Serializable]
+ [ComVisible(true)]
+ public delegate void AppDomainInitializer(string[] args);
+
+ internal class AppDomainInitializerInfo
+ {
+ internal class ItemInfo
+ {
+ public string TargetTypeAssembly;
+ public string TargetTypeName;
+ public string MethodName;
+ }
+
+ internal ItemInfo[] Info;
+
+ internal AppDomainInitializerInfo(AppDomainInitializer init)
+ {
+ Info=null;
+ if (init==null)
+ return;
+ List<ItemInfo> itemInfo = new List<ItemInfo>();
+ List<AppDomainInitializer> nestedDelegates = new List<AppDomainInitializer>();
+ nestedDelegates.Add(init);
+ int idx=0;
+
+ while (nestedDelegates.Count>idx)
+ {
+ AppDomainInitializer curr = nestedDelegates[idx++];
+ Delegate[] list= curr.GetInvocationList();
+ for (int i=0;i<list.Length;i++)
+ {
+ if (!list[i].Method.IsStatic)
+ {
+ if(list[i].Target==null)
+ continue;
+
+ AppDomainInitializer nested = list[i].Target as AppDomainInitializer;
+ if (nested!=null)
+ nestedDelegates.Add(nested);
+ else
+ throw new ArgumentException(Environment.GetResourceString("Arg_MustBeStatic"),
+ list[i].Method.ReflectedType.FullName+"::"+list[i].Method.Name);
+ }
+ else
+ {
+ ItemInfo info=new ItemInfo();
+ info.TargetTypeAssembly=list[i].Method.ReflectedType.Module.Assembly.FullName;
+ info.TargetTypeName=list[i].Method.ReflectedType.FullName;
+ info.MethodName=list[i].Method.Name;
+ itemInfo.Add(info);
+ }
+
+ }
+ }
+
+ Info = itemInfo.ToArray();
+ }
+
+ [System.Security.SecuritySafeCritical] // auto-generated
+ internal AppDomainInitializer Unwrap()
+ {
+ if (Info==null)
+ return null;
+ AppDomainInitializer retVal=null;
+ new ReflectionPermission(ReflectionPermissionFlag.MemberAccess).Assert();
+ for (int i=0;i<Info.Length;i++)
+ {
+ Assembly assembly=Assembly.Load(Info[i].TargetTypeAssembly);
+ AppDomainInitializer newVal=(AppDomainInitializer)Delegate.CreateDelegate(typeof(AppDomainInitializer),
+ assembly.GetType(Info[i].TargetTypeName),
+ Info[i].MethodName);
+ if(retVal==null)
+ retVal=newVal;
+ else
+ retVal+=newVal;
+ }
+ return retVal;
+ }
+ }
+
+
+ [ClassInterface(ClassInterfaceType.None)]
+ [ComDefaultInterface(typeof(System._AppDomain))]
+ [ComVisible(true)]
+ public sealed class AppDomain :
+#if FEATURE_REMOTING
+ MarshalByRefObject,
+#endif
+ _AppDomain, IEvidenceFactory
+ {
+ // Domain security information
+ // These fields initialized from the other side only. (NOTE: order
+ // of these fields cannot be changed without changing the layout in
+ // the EE)
+
+ [System.Security.SecurityCritical] // auto-generated
+ private AppDomainManager _domainManager;
+ private Dictionary<String, Object[]> _LocalStore;
+ private AppDomainSetup _FusionStore;
+ private Evidence _SecurityIdentity;
+#pragma warning disable 169
+ private Object[] _Policies; // Called from the VM.
+#pragma warning restore 169
+ [method: System.Security.SecurityCritical]
+ public event AssemblyLoadEventHandler AssemblyLoad;
+
+ [System.Security.SecurityCritical]
+ private ResolveEventHandler _TypeResolve;
+
+ public event ResolveEventHandler TypeResolve
+ {
+ [System.Security.SecurityCritical]
+ add
+ {
+ lock (this)
+ {
+ _TypeResolve += value;
+ }
+ }
+
+ [System.Security.SecurityCritical]
+ remove
+ {
+ lock (this)
+ {
+ _TypeResolve -= value;
+ }
+ }
+ }
+
+ [System.Security.SecurityCritical]
+ private ResolveEventHandler _ResourceResolve;
+
+ public event ResolveEventHandler ResourceResolve
+ {
+ [System.Security.SecurityCritical]
+ add
+ {
+ lock (this)
+ {
+ _ResourceResolve += value;
+ }
+ }
+
+ [System.Security.SecurityCritical]
+ remove
+ {
+ lock (this)
+ {
+ _ResourceResolve -= value;
+ }
+ }
+ }
+
+ [System.Security.SecurityCritical]
+ private ResolveEventHandler _AssemblyResolve;
+
+ public event ResolveEventHandler AssemblyResolve
+ {
+ [System.Security.SecurityCritical]
+ add
+ {
+ lock (this)
+ {
+ _AssemblyResolve += value;
+ }
+ }
+
+ [System.Security.SecurityCritical]
+ remove
+ {
+ lock (this)
+ {
+ _AssemblyResolve -= value;
+ }
+ }
+ }
+
+#if FEATURE_REFLECTION_ONLY_LOAD
+ [method: System.Security.SecurityCritical]
+ public event ResolveEventHandler ReflectionOnlyAssemblyResolve;
+#endif // FEATURE_REFLECTION_ONLY
+
+#if FEATURE_REMOTING
+ private Context _DefaultContext;
+#endif
+
+#if FEATURE_CLICKONCE
+ private ActivationContext _activationContext;
+ private ApplicationIdentity _applicationIdentity;
+#endif
+ private ApplicationTrust _applicationTrust;
+
+#if FEATURE_IMPERSONATION
+ private IPrincipal _DefaultPrincipal;
+#endif // FEATURE_IMPERSONATION
+#if FEATURE_REMOTING
+ private DomainSpecificRemotingData _RemotingData;
+#endif
+ private EventHandler _processExit;
+
+ #if FEATURE_CORECLR
+ [System.Security.SecurityCritical]
+ #endif
+ private EventHandler _domainUnload;
+
+ #if FEATURE_CORECLR
+ [System.Security.SecurityCritical] // auto-generated
+ #endif
+ private UnhandledExceptionEventHandler _unhandledException;
+
+#if FEATURE_APTCA
+ private String[] _aptcaVisibleAssemblies;
+#endif
+
+ // The compat flags are set at domain creation time to indicate that the given breaking
+ // changes (named in the strings) should not be used in this domain. We only use the
+ // keys, the vhe values are ignored.
+ private Dictionary<String, object> _compatFlags;
+
+#if FEATURE_EXCEPTION_NOTIFICATIONS
+ // Delegate that will hold references to FirstChance exception notifications
+ private EventHandler<FirstChanceExceptionEventArgs> _firstChanceException;
+#endif // FEATURE_EXCEPTION_NOTIFICATIONS
+
+ private IntPtr _pDomain; // this is an unmanaged pointer (AppDomain * m_pDomain)` used from the VM.
+
+#if FEATURE_CAS_POLICY
+ private PrincipalPolicy _PrincipalPolicy; // this is an enum
+#endif
+ private bool _HasSetPolicy;
+ private bool _IsFastFullTrustDomain; // quick check to see if the AppDomain is fully trusted and homogenous
+ private bool _compatFlagsInitialized;
+
+ internal const String TargetFrameworkNameAppCompatSetting = "TargetFrameworkName";
+
+#if FEATURE_APPX
+ private static APPX_FLAGS s_flags;
+
+ //
+ // Keep in async with vm\appdomainnative.cpp
+ //
+ [Flags]
+ private enum APPX_FLAGS
+ {
+ APPX_FLAGS_INITIALIZED = 0x01,
+
+ APPX_FLAGS_APPX_MODEL = 0x02,
+ APPX_FLAGS_APPX_DESIGN_MODE = 0x04,
+ APPX_FLAGS_APPX_NGEN = 0x08,
+ APPX_FLAGS_APPX_MASK = APPX_FLAGS_APPX_MODEL |
+ APPX_FLAGS_APPX_DESIGN_MODE |
+ APPX_FLAGS_APPX_NGEN,
+
+ APPX_FLAGS_API_CHECK = 0x10,
+ }
+
+ private static APPX_FLAGS Flags
+ {
+ [SecuritySafeCritical]
+ get
+ {
+ if (s_flags == 0)
+ s_flags = nGetAppXFlags();
+
+ Contract.Assert(s_flags != 0);
+ return s_flags;
+ }
+ }
+
+ internal static bool ProfileAPICheck
+ {
+ [SecuritySafeCritical]
+ get
+ {
+ return (Flags & APPX_FLAGS.APPX_FLAGS_API_CHECK) != 0;
+ }
+ }
+
+ internal static bool IsAppXNGen
+ {
+ [SecuritySafeCritical]
+ get
+ {
+ return (Flags & APPX_FLAGS.APPX_FLAGS_APPX_NGEN) != 0;
+ }
+ }
+#endif // FEATURE_APPX
+
+ [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
+ [SecurityCritical]
+ [SuppressUnmanagedCodeSecurity]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ private static extern bool DisableFusionUpdatesFromADManager(AppDomainHandle domain);
+
+#if FEATURE_APPX
+ [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
+ [SecurityCritical]
+ [SuppressUnmanagedCodeSecurity]
+ [return: MarshalAs(UnmanagedType.I4)]
+ private static extern APPX_FLAGS nGetAppXFlags();
+#endif
+
+ [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
+ [SecurityCritical]
+ [SuppressUnmanagedCodeSecurity]
+ private static extern void GetAppDomainManagerType(AppDomainHandle domain,
+ StringHandleOnStack retAssembly,
+ StringHandleOnStack retType);
+
+ [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
+ [SecurityCritical]
+ [SuppressUnmanagedCodeSecurity]
+ private static extern void SetAppDomainManagerType(AppDomainHandle domain,
+ string assembly,
+ string type);
+
+ [System.Security.SecurityCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ private static extern void nSetHostSecurityManagerFlags (HostSecurityManagerOptions flags);
+
+ [SecurityCritical]
+ [SuppressUnmanagedCodeSecurity]
+ [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
+ private static extern void SetSecurityHomogeneousFlag(AppDomainHandle domain,
+ [MarshalAs(UnmanagedType.Bool)] bool runtimeSuppliedHomogenousGrantSet);
+
+#if FEATURE_CAS_POLICY
+ [SecurityCritical]
+ [SuppressUnmanagedCodeSecurity]
+ [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
+ private static extern void SetLegacyCasPolicyEnabled(AppDomainHandle domain);
+
+ [SecurityCritical]
+ private void SetLegacyCasPolicyEnabled()
+ {
+ SetLegacyCasPolicyEnabled(GetNativeHandle());
+ }
+#endif // FEATURE_CAS_POLICY
+
+ /// <summary>
+ /// Get a handle used to make a call into the VM pointing to this domain
+ /// </summary>
+ internal AppDomainHandle GetNativeHandle()
+ {
+ // This should never happen under normal circumstances. However, there ar ways to create an
+ // uninitialized object through remoting, etc.
+ if (_pDomain.IsNull())
+ {
+ throw new InvalidOperationException(Environment.GetResourceString("Argument_InvalidHandle"));
+ }
+
+#if FEATURE_REMOTING
+ BCLDebug.Assert(!RemotingServices.IsTransparentProxy(this), "QCalls should be made with the real AppDomain object rather than a transparent proxy");
+#endif // FEATURE_REMOTING
+ return new AppDomainHandle(_pDomain);
+ }
+
+ /// <summary>
+ /// If this AppDomain is configured to have an AppDomain manager then create the instance of it.
+ /// This method is also called from the VM to create the domain manager in the default domain.
+ /// </summary>
+ [SecuritySafeCritical]
+ private void CreateAppDomainManager()
+ {
+ Contract.Assert(_domainManager == null, "_domainManager == null");
+
+ AppDomainSetup adSetup = FusionStore;
+#if FEATURE_VERSIONING
+ String trustedPlatformAssemblies = (String)(GetData("TRUSTED_PLATFORM_ASSEMBLIES"));
+ if (trustedPlatformAssemblies != null)
+ {
+ String platformResourceRoots = (String)(GetData("PLATFORM_RESOURCE_ROOTS"));
+ if (platformResourceRoots == null)
+ {
+ platformResourceRoots = String.Empty;
+ }
+
+ String appPaths = (String)(GetData("APP_PATHS"));
+ if (appPaths == null)
+ {
+ appPaths = String.Empty;
+ }
+
+ String appNiPaths = (String)(GetData("APP_NI_PATHS"));
+ if (appNiPaths == null)
+ {
+ appNiPaths = String.Empty;
+ }
+
+ String appLocalWinMD = (String)(GetData("APP_LOCAL_WINMETADATA"));
+ if (appLocalWinMD == null)
+ {
+ appLocalWinMD = String.Empty;
+ }
+ SetupBindingPaths(trustedPlatformAssemblies, platformResourceRoots, appPaths, appNiPaths, appLocalWinMD);
+ }
+#endif // FEATURE_VERSIONING
+
+ string domainManagerAssembly;
+ string domainManagerType;
+ GetAppDomainManagerType(out domainManagerAssembly, out domainManagerType);
+
+ if (domainManagerAssembly != null && domainManagerType != null)
+ {
+ try
+ {
+ new PermissionSet(PermissionState.Unrestricted).Assert();
+ _domainManager = CreateInstanceAndUnwrap(domainManagerAssembly, domainManagerType) as AppDomainManager;
+ CodeAccessPermission.RevertAssert();
+ }
+ catch (FileNotFoundException e)
+ {
+ throw new TypeLoadException(Environment.GetResourceString("Argument_NoDomainManager"), e);
+ }
+ catch (SecurityException e)
+ {
+ throw new TypeLoadException(Environment.GetResourceString("Argument_NoDomainManager"), e);
+ }
+ catch (TypeLoadException e)
+ {
+ throw new TypeLoadException(Environment.GetResourceString("Argument_NoDomainManager"), e);
+ }
+
+ if (_domainManager == null)
+ {
+ throw new TypeLoadException(Environment.GetResourceString("Argument_NoDomainManager"));
+ }
+
+ // If this domain was not created by a managed call to CreateDomain, then the AppDomainSetup
+ // will not have the correct values for the AppDomainManager set.
+ FusionStore.AppDomainManagerAssembly = domainManagerAssembly;
+ FusionStore.AppDomainManagerType = domainManagerType;
+
+ bool notifyFusion = _domainManager.GetType() != typeof(System.AppDomainManager) && !DisableFusionUpdatesFromADManager();
+
+
+
+ AppDomainSetup FusionStoreOld = null;
+ if (notifyFusion)
+ FusionStoreOld = new AppDomainSetup(FusionStore, true);
+
+ // Initialize the AppDomainMAnager and register the instance with the native host if requested
+ _domainManager.InitializeNewDomain(FusionStore);
+
+ if (notifyFusion)
+ SetupFusionStore(_FusionStore, FusionStoreOld); // Notify Fusion about the changes the user implementation of InitializeNewDomain may have made to the FusionStore object.
+
+#if FEATURE_APPDOMAINMANAGER_INITOPTIONS
+ AppDomainManagerInitializationOptions flags = _domainManager.InitializationFlags;
+ if ((flags & AppDomainManagerInitializationOptions.RegisterWithHost) == AppDomainManagerInitializationOptions.RegisterWithHost)
+ {
+ _domainManager.RegisterWithHost();
+ }
+#endif // FEATURE_APPDOMAINMANAGER_INITOPTIONS
+ }
+
+ InitializeCompatibilityFlags();
+ }
+
+ /// <summary>
+ /// Initialize the compatibility flags to non-NULL values.
+ /// This method is also called from the VM when the default domain dosen't have a domain manager.
+ /// </summary>
+ private void InitializeCompatibilityFlags()
+ {
+ AppDomainSetup adSetup = FusionStore;
+
+ // set up shim flags regardless of whether we create a DomainManager in this method.
+ if (adSetup.GetCompatibilityFlags() != null)
+ {
+ _compatFlags = new Dictionary<String, object>(adSetup.GetCompatibilityFlags(), StringComparer.OrdinalIgnoreCase);
+ }
+
+ // for perf, we don't intialize the _compatFlags dictionary when we don't need to. However, we do need to make a
+ // note that we've run this method, because IsCompatibilityFlagsSet needs to return different values for the
+ // case where the compat flags have been setup.
+ Contract.Assert(!_compatFlagsInitialized);
+ _compatFlagsInitialized = true;
+
+ CompatibilitySwitches.InitializeSwitches();
+ }
+
+ // Retrieves a possibly-cached target framework name for this appdomain. This could be set
+ // either by a host in native, a host in managed using an AppDomainSetup, or by the
+ // TargetFrameworkAttribute on the executable (VS emits its target framework moniker using this
+ // attribute starting in version 4).
+ [SecuritySafeCritical]
+ internal String GetTargetFrameworkName()
+ {
+ String targetFrameworkName = _FusionStore.TargetFrameworkName;
+
+ if (targetFrameworkName == null && IsDefaultAppDomain() && !_FusionStore.CheckedForTargetFrameworkName)
+ {
+ // This should only be run in the default appdomain. All other appdomains should have
+ // values copied from the default appdomain and/or specified by the host.
+ Assembly assembly = Assembly.GetEntryAssembly();
+ if (assembly != null)
+ {
+ TargetFrameworkAttribute[] attrs = (TargetFrameworkAttribute[])assembly.GetCustomAttributes(typeof(TargetFrameworkAttribute));
+ if (attrs != null && attrs.Length > 0)
+ {
+ Contract.Assert(attrs.Length == 1);
+ targetFrameworkName = attrs[0].FrameworkName;
+ _FusionStore.TargetFrameworkName = targetFrameworkName;
+ }
+ }
+ _FusionStore.CheckedForTargetFrameworkName = true;
+ }
+
+ return targetFrameworkName;
+ }
+
+ /// <summary>
+ /// Returns the setting of the corresponding compatibility config switch (see CreateAppDomainManager for the impact).
+ /// </summary>
+ [SecuritySafeCritical]
+ internal bool DisableFusionUpdatesFromADManager()
+ {
+ return DisableFusionUpdatesFromADManager(GetNativeHandle());
+ }
+
+ /// <summary>
+ /// Returns whether the current AppDomain follows the AppX rules.
+ /// </summary>
+ [SecuritySafeCritical]
+ [Pure]
+ internal static bool IsAppXModel()
+ {
+#if FEATURE_APPX
+ return (Flags & APPX_FLAGS.APPX_FLAGS_APPX_MODEL) != 0;
+#else
+ return false;
+#endif
+ }
+
+ /// <summary>
+ /// Returns the setting of the AppXDevMode config switch.
+ /// </summary>
+ [SecuritySafeCritical]
+ [Pure]
+ internal static bool IsAppXDesignMode()
+ {
+#if FEATURE_APPX
+ return (Flags & APPX_FLAGS.APPX_FLAGS_APPX_MASK) == (APPX_FLAGS.APPX_FLAGS_APPX_MODEL | APPX_FLAGS.APPX_FLAGS_APPX_DESIGN_MODE);
+#else
+ return false;
+#endif
+ }
+
+ /// <summary>
+ /// Checks (and throws on failure) if the domain supports Assembly.LoadFrom.
+ /// </summary>
+ [SecuritySafeCritical]
+ [Pure]
+ internal static void CheckLoadFromSupported()
+ {
+#if FEATURE_APPX
+ if (IsAppXModel())
+ throw new NotSupportedException(Environment.GetResourceString("NotSupported_AppX", "Assembly.LoadFrom"));
+#endif
+ }
+
+ /// <summary>
+ /// Checks (and throws on failure) if the domain supports Assembly.LoadFile.
+ /// </summary>
+ [SecuritySafeCritical]
+ [Pure]
+ internal static void CheckLoadFileSupported()
+ {
+#if FEATURE_APPX
+ if (IsAppXModel())
+ throw new NotSupportedException(Environment.GetResourceString("NotSupported_AppX", "Assembly.LoadFile"));
+#endif
+ }
+
+ /// <summary>
+ /// Checks (and throws on failure) if the domain supports Assembly.ReflectionOnlyLoad.
+ /// </summary>
+ [SecuritySafeCritical]
+ [Pure]
+ internal static void CheckReflectionOnlyLoadSupported()
+ {
+#if FEATURE_APPX
+ if (IsAppXModel())
+ throw new NotSupportedException(Environment.GetResourceString("NotSupported_AppX", "Assembly.ReflectionOnlyLoad"));
+#endif
+ }
+
+ /// <summary>
+ /// Checks (and throws on failure) if the domain supports Assembly.LoadWithPartialName.
+ /// </summary>
+ [SecuritySafeCritical]
+ [Pure]
+ internal static void CheckLoadWithPartialNameSupported(StackCrawlMark stackMark)
+ {
+#if FEATURE_APPX
+ if (IsAppXModel())
+ {
+ RuntimeAssembly callingAssembly = RuntimeAssembly.GetExecutingAssembly(ref stackMark);
+ bool callerIsFxAssembly = callingAssembly != null && callingAssembly.IsFrameworkAssembly();
+ if (!callerIsFxAssembly)
+ {
+ throw new NotSupportedException(Environment.GetResourceString("NotSupported_AppX", "Assembly.LoadWithPartialName"));
+ }
+ }
+#endif
+ }
+
+ /// <summary>
+ /// Checks (and throws on failure) if the domain supports DefinePInvokeMethod.
+ /// </summary>
+ [SecuritySafeCritical]
+ [Pure]
+ internal static void CheckDefinePInvokeSupported()
+ {
+ // We don't want users to use DefinePInvokeMethod in RefEmit to bypass app store validation on allowed native libraries.
+#if FEATURE_APPX
+ if (IsAppXModel())
+ throw new NotSupportedException(Environment.GetResourceString("NotSupported_AppX", "DefinePInvokeMethod"));
+#endif
+ }
+
+ /// <summary>
+ /// Checks (and throws on failure) if the domain supports Assembly.Load(byte[] ...).
+ /// </summary>
+ [SecuritySafeCritical]
+ [Pure]
+ internal static void CheckLoadByteArraySupported()
+ {
+#if FEATURE_APPX
+ if (IsAppXModel())
+ throw new NotSupportedException(Environment.GetResourceString("NotSupported_AppX", "Assembly.Load(byte[], ...)"));
+#endif
+ }
+
+ /// <summary>
+ /// Checks (and throws on failure) if the domain supports AppDomain.CreateDomain.
+ /// </summary>
+ [SecuritySafeCritical]
+ [Pure]
+ internal static void CheckCreateDomainSupported()
+ {
+#if FEATURE_APPX
+ // Can create a new domain in an AppX process only when DevMode is enabled and
+ // AssemblyLoadingCompat is not enabled (since there is no multi-domain support
+ // for LoadFrom and LoadFile in AppX.
+ if(IsAppXModel())
+ {
+ if (!IsAppXDesignMode())
+ {
+ throw new NotSupportedException(Environment.GetResourceString("NotSupported_AppX", "AppDomain.CreateDomain"));
+ }
+ }
+#endif
+ }
+
+ /// <summary>
+ /// Get the name of the assembly and type that act as the AppDomainManager for this domain
+ /// </summary>
+ [SecuritySafeCritical]
+ internal void GetAppDomainManagerType(out string assembly, out string type)
+ {
+ // We can't just use our parameters because we need to ensure that the strings used for hte QCall
+ // are on the stack.
+ string localAssembly = null;
+ string localType = null;
+
+ GetAppDomainManagerType(GetNativeHandle(),
+ JitHelpers.GetStringHandleOnStack(ref localAssembly),
+ JitHelpers.GetStringHandleOnStack(ref localType));
+
+ assembly = localAssembly;
+ type = localType;
+ }
+
+ /// <summary>
+ /// Set the assembly and type which act as the AppDomainManager for this domain
+ /// </summary>
+ [SecuritySafeCritical]
+ private void SetAppDomainManagerType(string assembly, string type)
+ {
+ Contract.Assert(assembly != null, "assembly != null");
+ Contract.Assert(type != null, "type != null");
+ SetAppDomainManagerType(GetNativeHandle(), assembly, type);
+ }
+
+#if FEATURE_APTCA
+ internal String[] PartialTrustVisibleAssemblies
+ {
+ get { return _aptcaVisibleAssemblies; }
+
+ [SecuritySafeCritical]
+ set
+ {
+ _aptcaVisibleAssemblies = value;
+
+ // Build up the canonical representaiton of this list to allow the VM to do optimizations in
+ // common cases
+ string canonicalConditionalAptcaList = null;
+ if (value != null)
+ {
+ StringBuilder conditionalAptcaListBuilder = StringBuilderCache.Acquire();
+ for (int i = 0; i < value.Length; ++i)
+ {
+ if (value[i] != null)
+ {
+ conditionalAptcaListBuilder.Append(value[i].ToUpperInvariant());
+ if (i != value.Length - 1)
+ {
+ conditionalAptcaListBuilder.Append(';');
+ }
+ }
+ }
+
+ canonicalConditionalAptcaList = StringBuilderCache.GetStringAndRelease(conditionalAptcaListBuilder);
+ }
+
+ SetCanonicalConditionalAptcaList(canonicalConditionalAptcaList);
+ }
+ }
+
+ [SecurityCritical]
+ [SuppressUnmanagedCodeSecurity]
+ [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
+ private static extern void SetCanonicalConditionalAptcaList(AppDomainHandle appDomain, string canonicalList);
+
+ [SecurityCritical]
+ private void SetCanonicalConditionalAptcaList(string canonicalList)
+ {
+ SetCanonicalConditionalAptcaList(GetNativeHandle(), canonicalList);
+ }
+#endif // FEATURE_APTCA
+
+#if FEATURE_CLICKONCE
+ /// <summary>
+ /// If the CLR is being started up to run a ClickOnce applicaiton, setup the default AppDomain
+ /// with information about that application.
+ /// </summary>
+ private void SetupDefaultClickOnceDomain(string fullName, string[] manifestPaths, string[] activationData)
+ {
+ Contract.Requires(fullName != null, "fullName != null");
+ FusionStore.ActivationArguments = new ActivationArguments(fullName, manifestPaths, activationData);
+ }
+#endif // FEATURE_CLICKONCE
+
+ /// <summary>
+ /// Called for every AppDomain (including the default domain) to initialize the security of the AppDomain)
+ /// </summary>
+ [SecurityCritical]
+ private void InitializeDomainSecurity(Evidence providedSecurityInfo,
+ Evidence creatorsSecurityInfo,
+ bool generateDefaultEvidence,
+ IntPtr parentSecurityDescriptor,
+ bool publishAppDomain)
+ {
+ AppDomainSetup adSetup = FusionStore;
+
+#if FEATURE_CAS_POLICY
+ // If the AppDomain is setup to use legacy CAS policy, then set that bit in the application
+ // security descriptor.
+ if (CompatibilitySwitches.IsNetFx40LegacySecurityPolicy)
+ {
+ SetLegacyCasPolicyEnabled();
+ }
+#endif // FEATURE_CAS_POLICY
+
+#if FEATURE_CLICKONCE
+
+ // Check if the domain manager set an ActivationContext (Debug-In-Zone for example)
+ // or if this is an AppDomain with an ApplicationTrust.
+ if (adSetup.ActivationArguments != null) {
+ // Merge the new evidence with the manifest's evidence if applicable
+ ActivationContext activationContext = null;
+ ApplicationIdentity appIdentity = null;
+ string[] activationData = null;
+ CmsUtils.CreateActivationContext(adSetup.ActivationArguments.ApplicationFullName,
+ adSetup.ActivationArguments.ApplicationManifestPaths,
+ adSetup.ActivationArguments.UseFusionActivationContext,
+ out appIdentity, out activationContext);
+ activationData = adSetup.ActivationArguments.ActivationData;
+ providedSecurityInfo = CmsUtils.MergeApplicationEvidence(providedSecurityInfo,
+ appIdentity,
+ activationContext,
+ activationData,
+ adSetup.ApplicationTrust);
+ SetupApplicationHelper(providedSecurityInfo, creatorsSecurityInfo, appIdentity, activationContext, activationData);
+ }
+ else
+#endif // FEATURE_CLICKONCE
+ {
+ bool runtimeSuppliedHomogenousGrant = false;
+ ApplicationTrust appTrust = adSetup.ApplicationTrust;
+
+#if FEATURE_CAS_POLICY
+ // In non-legacy CAS mode, domains should be homogenous. If the host has not specified a sandbox
+ // of their own, we'll set it up to be fully trusted. We must read the IsLegacyCasPolicy
+ // enabled property here rathern than just reading the switch from above because the entire
+ // process may also be opted into legacy CAS policy mode.
+ if (appTrust == null && !IsLegacyCasPolicyEnabled) {
+ _IsFastFullTrustDomain = true;
+ runtimeSuppliedHomogenousGrant = true;
+ }
+#endif // FEATURE_CAS_POLICY
+
+ if (appTrust != null) {
+ SetupDomainSecurityForHomogeneousDomain(appTrust, runtimeSuppliedHomogenousGrant);
+ }
+ else if (_IsFastFullTrustDomain) {
+ SetSecurityHomogeneousFlag(GetNativeHandle(), runtimeSuppliedHomogenousGrant);
+ }
+ }
+
+ // Get the evidence supplied for the domain. If no evidence was supplied, it means that we want
+ // to use the default evidence creation strategy for this domain
+ Evidence newAppDomainEvidence = (providedSecurityInfo != null ? providedSecurityInfo : creatorsSecurityInfo);
+ if (newAppDomainEvidence == null && generateDefaultEvidence) {
+#if FEATURE_CAS_POLICY
+ newAppDomainEvidence = new Evidence(new AppDomainEvidenceFactory(this));
+#else // !FEATURE_CAS_POLICY
+ newAppDomainEvidence = new Evidence();
+#endif // FEATURE_CAS_POLICY
+ }
+
+#if FEATURE_CAS_POLICY
+ if (_domainManager != null) {
+ // Give the host a chance to alter the AppDomain evidence
+ HostSecurityManager securityManager = _domainManager.HostSecurityManager;
+ if (securityManager != null) {
+ nSetHostSecurityManagerFlags (securityManager.Flags);
+ if ((securityManager.Flags & HostSecurityManagerOptions.HostAppDomainEvidence) == HostSecurityManagerOptions.HostAppDomainEvidence) {
+ newAppDomainEvidence = securityManager.ProvideAppDomainEvidence(newAppDomainEvidence);
+ // If this is a disconnected evidence collection, then attach it to the AppDomain,
+ // allowing the host security manager to get callbacks for delay generated evidence
+ if (newAppDomainEvidence != null && newAppDomainEvidence.Target == null) {
+ newAppDomainEvidence.Target = new AppDomainEvidenceFactory(this);
+ }
+ }
+ }
+ }
+
+#endif // FEATURE_CAS_POLICY
+
+ // Set the evidence on the managed side
+ _SecurityIdentity = newAppDomainEvidence;
+
+ // Set the evidence of the AppDomain in the VM.
+ // Also, now that the initialization is complete, signal that to the security system.
+ // Finish the AppDomain initialization and resolve the policy for the AppDomain evidence.
+ SetupDomainSecurity(newAppDomainEvidence,
+ parentSecurityDescriptor,
+ publishAppDomain);
+
+#if FEATURE_CAS_POLICY
+ // The AppDomain is now resolved. Go ahead and set the PolicyLevel
+ // from the HostSecurityManager if specified.
+ if (_domainManager != null)
+ RunDomainManagerPostInitialization(_domainManager);
+#endif // FEATURE_CAS_POLICY
+ }
+
+#if FEATURE_CAS_POLICY
+ [System.Security.SecurityCritical] // auto-generated
+ private void RunDomainManagerPostInitialization (AppDomainManager domainManager)
+ {
+ // force creation of the HostExecutionContextManager for the current AppDomain
+ HostExecutionContextManager contextManager = domainManager.HostExecutionContextManager;
+
+ if (IsLegacyCasPolicyEnabled)
+ {
+#pragma warning disable 618
+ HostSecurityManager securityManager = domainManager.HostSecurityManager;
+ if (securityManager != null)
+ {
+ if ((securityManager.Flags & HostSecurityManagerOptions.HostPolicyLevel) == HostSecurityManagerOptions.HostPolicyLevel)
+ {
+ // set AppDomain policy if specified
+ PolicyLevel level = securityManager.DomainPolicy;
+ if (level != null)
+ SetAppDomainPolicy(level);
+ }
+ }
+#pragma warning restore 618
+ }
+ }
+#endif
+
+
+#if FEATURE_CLICKONCE
+
+ [System.Security.SecurityCritical] // auto-generated
+ private void SetupApplicationHelper (Evidence providedSecurityInfo, Evidence creatorsSecurityInfo, ApplicationIdentity appIdentity, ActivationContext activationContext, string[] activationData) {
+ Contract.Requires(providedSecurityInfo != null);
+ HostSecurityManager securityManager = AppDomain.CurrentDomain.HostSecurityManager;
+ ApplicationTrust appTrust = securityManager.DetermineApplicationTrust(providedSecurityInfo, creatorsSecurityInfo, new TrustManagerContext());
+ if (appTrust == null || !appTrust.IsApplicationTrustedToRun)
+ throw new PolicyException(Environment.GetResourceString("Policy_NoExecutionPermission"),
+ System.__HResults.CORSEC_E_NO_EXEC_PERM,
+ null);
+
+ // The application is trusted to run. Set up the AppDomain according to the manifests.
+ if (activationContext != null)
+ SetupDomainForApplication(activationContext, activationData);
+ SetupDomainSecurityForApplication(appIdentity, appTrust);
+ }
+
+ [System.Security.SecurityCritical] // auto-generated
+ private void SetupDomainForApplication(ActivationContext activationContext, string[] activationData) {
+ Contract.Requires(activationContext != null);
+ if (IsDefaultAppDomain()) {
+ // make the ActivationArguments available off the AppDomain object.
+ AppDomainSetup adSetup = this.FusionStore;
+ adSetup.ActivationArguments = new ActivationArguments(activationContext, activationData);
+
+ // set the application base to point at where the application resides
+ string entryPointPath = CmsUtils.GetEntryPointFullPath(activationContext);
+ if (!String.IsNullOrEmpty(entryPointPath))
+ adSetup.SetupDefaults(entryPointPath);
+ else
+ adSetup.ApplicationBase = activationContext.ApplicationDirectory;
+
+ // update fusion context
+ SetupFusionStore(adSetup, null);
+ }
+
+ // perform app data directory migration.
+ activationContext.PrepareForExecution();
+ activationContext.SetApplicationState(ActivationContext.ApplicationState.Starting);
+ // set current app data directory.
+ activationContext.SetApplicationState(ActivationContext.ApplicationState.Running);
+
+ // make data directory path available.
+ IPermission permission = null;
+ string dataDirectory = activationContext.DataDirectory;
+ if (dataDirectory != null && dataDirectory.Length > 0)
+ permission = new FileIOPermission(FileIOPermissionAccess.PathDiscovery, dataDirectory);
+ this.SetData("DataDirectory", dataDirectory, permission);
+
+ _activationContext = activationContext;
+ }
+
+ [System.Security.SecurityCritical] // auto-generated
+ private void SetupDomainSecurityForApplication(ApplicationIdentity appIdentity,
+ ApplicationTrust appTrust)
+ {
+ // Set the Application trust on the managed side.
+ _applicationIdentity = appIdentity;
+ SetupDomainSecurityForHomogeneousDomain(appTrust, false);
+ }
+#endif // FEATURE_CLICKONCE
+
+ [System.Security.SecurityCritical] // auto-generated
+ private void SetupDomainSecurityForHomogeneousDomain(ApplicationTrust appTrust,
+ bool runtimeSuppliedHomogenousGrantSet)
+ {
+ // If the CLR has supplied the homogenous grant set (that is, this domain would have been
+ // heterogenous in v2.0), then we need to strip the ApplicationTrust from the AppDomainSetup of
+ // the current domain. This prevents code which does:
+ // AppDomain.CreateDomain(..., AppDomain.CurrentDomain.SetupInformation);
+ //
+ // From looking like it is trying to create a homogenous domain intentionally, and therefore
+ // having its evidence check bypassed.
+ if (runtimeSuppliedHomogenousGrantSet)
+ {
+ BCLDebug.Assert(_FusionStore.ApplicationTrust != null, "Expected to find runtime supplied ApplicationTrust");
+#if FEATURE_CAS_POLICY
+ _FusionStore.ApplicationTrust = null;
+#endif // FEATURE_CAS_POLICY
+ }
+
+ _applicationTrust = appTrust;
+
+ // Set the homogeneous bit in the VM's ApplicationSecurityDescriptor.
+ SetSecurityHomogeneousFlag(GetNativeHandle(),
+ runtimeSuppliedHomogenousGrantSet);
+ }
+
+ // This method is called from CorHost2::ExecuteApplication to activate a ClickOnce application in the default AppDomain.
+#if FEATURE_CLICKONCE
+ [System.Security.SecuritySafeCritical] // auto-generated
+ private int ActivateApplication () {
+ ObjectHandle oh = Activator.CreateInstance(AppDomain.CurrentDomain.ActivationContext);
+ return (int) oh.Unwrap();
+ }
+#endif //FEATURE_CLICKONCE
+
+ public AppDomainManager DomainManager {
+ [System.Security.SecurityCritical] // auto-generated_required
+ get {
+ return _domainManager;
+ }
+ }
+
+#if FEATURE_CAS_POLICY
+ internal HostSecurityManager HostSecurityManager {
+ [System.Security.SecurityCritical] // auto-generated
+ get {
+ HostSecurityManager securityManager = null;
+ AppDomainManager domainManager = AppDomain.CurrentDomain.DomainManager;
+ if (domainManager != null)
+ securityManager = domainManager.HostSecurityManager;
+
+ if (securityManager == null)
+ securityManager = new HostSecurityManager();
+ return securityManager;
+ }
+ }
+#endif // FEATURE_CAS_POLICY
+#if FEATURE_REFLECTION_ONLY_LOAD
+ private Assembly ResolveAssemblyForIntrospection(Object sender, ResolveEventArgs args)
+ {
+ Contract.Requires(args != null);
+ return Assembly.ReflectionOnlyLoad(ApplyPolicy(args.Name));
+ }
+
+ // Helper class for method code:EnableResolveAssembliesForIntrospection
+ private class NamespaceResolverForIntrospection
+ {
+ private IEnumerable<string> _packageGraphFilePaths;
+ public NamespaceResolverForIntrospection(IEnumerable<string> packageGraphFilePaths)
+ {
+ _packageGraphFilePaths = packageGraphFilePaths;
+ }
+
+ [System.Security.SecurityCritical]
+ public void ResolveNamespace(
+ object sender,
+ System.Runtime.InteropServices.WindowsRuntime.NamespaceResolveEventArgs args)
+ {
+ Contract.Requires(args != null);
+
+ IEnumerable<string> fileNames = System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMetadata.ResolveNamespace(
+ args.NamespaceName,
+ null, // windowsSdkFilePath ... Use OS installed .winmd files
+ _packageGraphFilePaths);
+ foreach (string fileName in fileNames)
+ {
+ args.ResolvedAssemblies.Add(Assembly.ReflectionOnlyLoadFrom(fileName));
+ }
+ }
+ }
+
+ // Called only by native function code:ValidateWorker
+ [System.Security.SecuritySafeCritical]
+ private void EnableResolveAssembliesForIntrospection(string verifiedFileDirectory)
+ {
+ CurrentDomain.ReflectionOnlyAssemblyResolve += new ResolveEventHandler(ResolveAssemblyForIntrospection);
+
+ string[] packageGraphFilePaths = null;
+ if (verifiedFileDirectory != null)
+ packageGraphFilePaths = new string[] { verifiedFileDirectory };
+ NamespaceResolverForIntrospection namespaceResolver = new NamespaceResolverForIntrospection(packageGraphFilePaths);
+
+ System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMetadata.ReflectionOnlyNamespaceResolve +=
+ new EventHandler<System.Runtime.InteropServices.WindowsRuntime.NamespaceResolveEventArgs>(namespaceResolver.ResolveNamespace);
+ }
+#endif // FEATURE_REFLECTION_ONLY_LOAD
+
+
+ /**********************************************
+ * If an AssemblyName has a public key specified, the assembly is assumed
+ * to have a strong name and a hash will be computed when the assembly
+ * is saved.
+ **********************************************/
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
+ public AssemblyBuilder DefineDynamicAssembly(
+ AssemblyName name,
+ AssemblyBuilderAccess access)
+ {
+ Contract.Ensures(Contract.Result<AssemblyBuilder>() != null);
+
+ StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
+ return InternalDefineDynamicAssembly(name, access, null,
+ null, null, null, null, ref stackMark, null, SecurityContextSource.CurrentAssembly);
+ }
+
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
+ public AssemblyBuilder DefineDynamicAssembly(
+ AssemblyName name,
+ AssemblyBuilderAccess access,
+ IEnumerable<CustomAttributeBuilder> assemblyAttributes)
+ {
+ Contract.Ensures(Contract.Result<AssemblyBuilder>() != null);
+
+ StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
+ return InternalDefineDynamicAssembly(name,
+ access,
+ null, null, null, null, null,
+ ref stackMark,
+ assemblyAttributes, SecurityContextSource.CurrentAssembly);
+ }
+
+ [MethodImplAttribute(MethodImplOptions.NoInlining)] // Due to the stack crawl mark
+ [SecuritySafeCritical]
+ public AssemblyBuilder DefineDynamicAssembly(AssemblyName name,
+ AssemblyBuilderAccess access,
+ IEnumerable<CustomAttributeBuilder> assemblyAttributes,
+ SecurityContextSource securityContextSource)
+ {
+ Contract.Ensures(Contract.Result<AssemblyBuilder>() != null);
+
+ StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
+ return InternalDefineDynamicAssembly(name,
+ access,
+ null, null, null, null, null,
+ ref stackMark,
+ assemblyAttributes,
+ securityContextSource);
+ }
+
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
+ public AssemblyBuilder DefineDynamicAssembly(
+ AssemblyName name,
+ AssemblyBuilderAccess access,
+ String dir)
+ {
+ Contract.Ensures(Contract.Result<AssemblyBuilder>() != null);
+
+ StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
+ return InternalDefineDynamicAssembly(name, access, dir,
+ null, null, null, null,
+ ref stackMark,
+ null,
+ SecurityContextSource.CurrentAssembly);
+ }
+
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
+ [Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
+ public AssemblyBuilder DefineDynamicAssembly(
+ AssemblyName name,
+ AssemblyBuilderAccess access,
+ Evidence evidence)
+ {
+ Contract.Ensures(Contract.Result<AssemblyBuilder>() != null);
+
+ StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
+ return InternalDefineDynamicAssembly(name, access, null,
+ evidence, null, null, null,
+ ref stackMark,
+ null,
+ SecurityContextSource.CurrentAssembly);
+ }
+
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
+ [Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
+ public AssemblyBuilder DefineDynamicAssembly(
+ AssemblyName name,
+ AssemblyBuilderAccess access,
+ PermissionSet requiredPermissions,
+ PermissionSet optionalPermissions,
+ PermissionSet refusedPermissions)
+ {
+ Contract.Ensures(Contract.Result<AssemblyBuilder>() != null);
+
+ StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
+ return InternalDefineDynamicAssembly(name, access, null, null,
+ requiredPermissions,
+ optionalPermissions,
+ refusedPermissions,
+ ref stackMark,
+ null,
+ SecurityContextSource.CurrentAssembly);
+ }
+
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
+ [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of DefineDynamicAssembly which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkId=155570 for more information.")]
+ public AssemblyBuilder DefineDynamicAssembly(
+ AssemblyName name,
+ AssemblyBuilderAccess access,
+ String dir,
+ Evidence evidence)
+ {
+ Contract.Ensures(Contract.Result<AssemblyBuilder>() != null);
+
+ StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
+ return InternalDefineDynamicAssembly(name, access, dir, evidence,
+ null, null, null, ref stackMark, null, SecurityContextSource.CurrentAssembly);
+ }
+
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
+ [Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
+ public AssemblyBuilder DefineDynamicAssembly(
+ AssemblyName name,
+ AssemblyBuilderAccess access,
+ String dir,
+ PermissionSet requiredPermissions,
+ PermissionSet optionalPermissions,
+ PermissionSet refusedPermissions)
+ {
+ Contract.Ensures(Contract.Result<AssemblyBuilder>() != null);
+
+ StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
+ return InternalDefineDynamicAssembly(name, access, dir, null,
+ requiredPermissions,
+ optionalPermissions,
+ refusedPermissions,
+ ref stackMark,
+ null,
+ SecurityContextSource.CurrentAssembly);
+ }
+
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
+ [Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
+ public AssemblyBuilder DefineDynamicAssembly(
+ AssemblyName name,
+ AssemblyBuilderAccess access,
+ Evidence evidence,
+ PermissionSet requiredPermissions,
+ PermissionSet optionalPermissions,
+ PermissionSet refusedPermissions)
+ {
+ Contract.Ensures(Contract.Result<AssemblyBuilder>() != null);
+
+ StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
+ return InternalDefineDynamicAssembly(name, access, null,
+ evidence,
+ requiredPermissions,
+ optionalPermissions,
+ refusedPermissions,
+ ref stackMark,
+ null,
+ SecurityContextSource.CurrentAssembly);
+ }
+
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
+ [Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. Please see http://go.microsoft.com/fwlink/?LinkId=155570 for more information.")]
+ public AssemblyBuilder DefineDynamicAssembly(
+ AssemblyName name,
+ AssemblyBuilderAccess access,
+ String dir,
+ Evidence evidence,
+ PermissionSet requiredPermissions,
+ PermissionSet optionalPermissions,
+ PermissionSet refusedPermissions)
+ {
+ Contract.Ensures(Contract.Result<AssemblyBuilder>() != null);
+
+ StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
+ return InternalDefineDynamicAssembly(name, access, dir,
+ evidence,
+ requiredPermissions,
+ optionalPermissions,
+ refusedPermissions,
+ ref stackMark,
+ null,
+ SecurityContextSource.CurrentAssembly);
+ }
+
+
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
+ [Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
+ public AssemblyBuilder DefineDynamicAssembly(
+ AssemblyName name,
+ AssemblyBuilderAccess access,
+ String dir,
+ Evidence evidence,
+ PermissionSet requiredPermissions,
+ PermissionSet optionalPermissions,
+ PermissionSet refusedPermissions,
+ bool isSynchronized)
+ {
+ Contract.Ensures(Contract.Result<AssemblyBuilder>() != null);
+
+ StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
+ return InternalDefineDynamicAssembly(name,
+ access,
+ dir,
+ evidence,
+ requiredPermissions,
+ optionalPermissions,
+ refusedPermissions,
+ ref stackMark,
+ null,
+ SecurityContextSource.CurrentAssembly);
+ }
+
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
+ [Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
+ public AssemblyBuilder DefineDynamicAssembly(
+ AssemblyName name,
+ AssemblyBuilderAccess access,
+ String dir,
+ Evidence evidence,
+ PermissionSet requiredPermissions,
+ PermissionSet optionalPermissions,
+ PermissionSet refusedPermissions,
+ bool isSynchronized,
+ IEnumerable<CustomAttributeBuilder> assemblyAttributes)
+ {
+ Contract.Ensures(Contract.Result<AssemblyBuilder>() != null);
+
+ StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
+ return InternalDefineDynamicAssembly(name,
+ access,
+ dir,
+ evidence,
+ requiredPermissions,
+ optionalPermissions,
+ refusedPermissions,
+ ref stackMark,
+ assemblyAttributes,
+ SecurityContextSource.CurrentAssembly);
+ }
+
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
+ public AssemblyBuilder DefineDynamicAssembly(
+ AssemblyName name,
+ AssemblyBuilderAccess access,
+ String dir,
+ bool isSynchronized,
+ IEnumerable<CustomAttributeBuilder> assemblyAttributes)
+ {
+ Contract.Ensures(Contract.Result<AssemblyBuilder>() != null);
+
+ StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
+ return InternalDefineDynamicAssembly(name,
+ access,
+ dir,
+ null,
+ null,
+ null,
+ null,
+ ref stackMark,
+ assemblyAttributes,
+ SecurityContextSource.CurrentAssembly);
+ }
+
+ [System.Security.SecurityCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
+ private AssemblyBuilder InternalDefineDynamicAssembly(
+ AssemblyName name,
+ AssemblyBuilderAccess access,
+ String dir,
+ Evidence evidence,
+ PermissionSet requiredPermissions,
+ PermissionSet optionalPermissions,
+ PermissionSet refusedPermissions,
+ ref StackCrawlMark stackMark,
+ IEnumerable<CustomAttributeBuilder> assemblyAttributes,
+ SecurityContextSource securityContextSource)
+ {
+ return AssemblyBuilder.InternalDefineDynamicAssembly(name,
+ access,
+ dir,
+ evidence,
+ requiredPermissions,
+ optionalPermissions,
+ refusedPermissions,
+ ref stackMark,
+ assemblyAttributes,
+ securityContextSource);
+ }
+
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ private extern String nApplyPolicy(AssemblyName an);
+
+ // Return the assembly name that results from applying policy.
+ [ComVisible(false)]
+ public String ApplyPolicy(String assemblyName)
+ {
+ AssemblyName asmName = new AssemblyName(assemblyName);
+
+ byte[] pk = asmName.GetPublicKeyToken();
+ if (pk == null)
+ pk = asmName.GetPublicKey();
+
+ // Simply-named assemblies cannot have policy, so for those,
+ // we simply return the passed-in assembly name.
+ if ((pk == null) || (pk.Length == 0))
+ return assemblyName;
+ else
+ return nApplyPolicy(asmName);
+ }
+
+
+ public ObjectHandle CreateInstance(String assemblyName,
+ String typeName)
+
+ {
+ // jit does not check for that, so we should do it ...
+ if (this == null)
+ throw new NullReferenceException();
+
+ if (assemblyName == null)
+ throw new ArgumentNullException("assemblyName");
+ Contract.EndContractBlock();
+
+ return Activator.CreateInstance(assemblyName,
+ typeName);
+ }
+
+ [System.Security.SecurityCritical] // auto-generated
+ internal ObjectHandle InternalCreateInstanceWithNoSecurity (string assemblyName, string typeName) {
+ PermissionSet.s_fullTrust.Assert();
+ return CreateInstance(assemblyName, typeName);
+ }
+
+ public ObjectHandle CreateInstanceFrom(String assemblyFile,
+ String typeName)
+
+ {
+ // jit does not check for that, so we should do it ...
+ if (this == null)
+ throw new NullReferenceException();
+ Contract.EndContractBlock();
+
+ return Activator.CreateInstanceFrom(assemblyFile,
+ typeName);
+ }
+
+ [System.Security.SecurityCritical] // auto-generated
+ internal ObjectHandle InternalCreateInstanceFromWithNoSecurity (string assemblyName, string typeName) {
+ PermissionSet.s_fullTrust.Assert();
+ return CreateInstanceFrom(assemblyName, typeName);
+ }
+
+#if FEATURE_COMINTEROP
+ // The first parameter should be named assemblyFile, but it was incorrectly named in a previous
+ // release, and the compatibility police won't let us change the name now.
+ public ObjectHandle CreateComInstanceFrom(String assemblyName,
+ String typeName)
+
+ {
+ if (this == null)
+ throw new NullReferenceException();
+ Contract.EndContractBlock();
+
+ return Activator.CreateComInstanceFrom(assemblyName,
+ typeName);
+ }
+
+ public ObjectHandle CreateComInstanceFrom(String assemblyFile,
+ String typeName,
+ byte[] hashValue,
+ AssemblyHashAlgorithm hashAlgorithm)
+
+ {
+ if (this == null)
+ throw new NullReferenceException();
+ Contract.EndContractBlock();
+
+ return Activator.CreateComInstanceFrom(assemblyFile,
+ typeName,
+ hashValue,
+ hashAlgorithm);
+ }
+
+#endif // FEATURE_COMINTEROP
+
+ public ObjectHandle CreateInstance(String assemblyName,
+ String typeName,
+ Object[] activationAttributes)
+
+ {
+ // jit does not check for that, so we should do it ...
+ if (this == null)
+ throw new NullReferenceException();
+
+ if (assemblyName == null)
+ throw new ArgumentNullException("assemblyName");
+ Contract.EndContractBlock();
+
+ return Activator.CreateInstance(assemblyName,
+ typeName,
+ activationAttributes);
+ }
+
+ public ObjectHandle CreateInstanceFrom(String assemblyFile,
+ String typeName,
+ Object[] activationAttributes)
+
+ {
+ // jit does not check for that, so we should do it ...
+ if (this == null)
+ throw new NullReferenceException();
+ Contract.EndContractBlock();
+
+ return Activator.CreateInstanceFrom(assemblyFile,
+ typeName,
+ activationAttributes);
+ }
+
+ [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstance which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
+ public ObjectHandle CreateInstance(String assemblyName,
+ String typeName,
+ bool ignoreCase,
+ BindingFlags bindingAttr,
+ Binder binder,
+ Object[] args,
+ CultureInfo culture,
+ Object[] activationAttributes,
+ Evidence securityAttributes)
+ {
+ // jit does not check for that, so we should do it ...
+ if (this == null)
+ throw new NullReferenceException();
+
+ if (assemblyName == null)
+ throw new ArgumentNullException("assemblyName");
+ Contract.EndContractBlock();
+
+#if FEATURE_CAS_POLICY
+ if (securityAttributes != null && !IsLegacyCasPolicyEnabled)
+ {
+ throw new NotSupportedException(Environment.GetResourceString("NotSupported_RequiresCasPolicyImplicit"));
+ }
+#endif // FEATURE_CAS_POLICY
+
+#pragma warning disable 618
+ return Activator.CreateInstance(assemblyName,
+ typeName,
+ ignoreCase,
+ bindingAttr,
+ binder,
+ args,
+ culture,
+ activationAttributes,
+ securityAttributes);
+#pragma warning restore 618
+ }
+
+ public ObjectHandle CreateInstance(string assemblyName,
+ string typeName,
+ bool ignoreCase,
+ BindingFlags bindingAttr,
+ Binder binder,
+ object[] args,
+ CultureInfo culture,
+ object[] activationAttributes)
+ {
+ // jit does not check for that, so we should do it ...
+ if (this == null)
+ throw new NullReferenceException();
+
+ if (assemblyName == null)
+ throw new ArgumentNullException("assemblyName");
+ Contract.EndContractBlock();
+
+ return Activator.CreateInstance(assemblyName,
+ typeName,
+ ignoreCase,
+ bindingAttr,
+ binder,
+ args,
+ culture,
+ activationAttributes);
+ }
+
+ [System.Security.SecurityCritical] // auto-generated
+ internal ObjectHandle InternalCreateInstanceWithNoSecurity (string assemblyName,
+ string typeName,
+ bool ignoreCase,
+ BindingFlags bindingAttr,
+ Binder binder,
+ Object[] args,
+ CultureInfo culture,
+ Object[] activationAttributes,
+ Evidence securityAttributes)
+ {
+#if FEATURE_CAS_POLICY
+ Contract.Assert(IsLegacyCasPolicyEnabled || securityAttributes == null);
+#endif // FEATURE_CAS_POLICY
+
+ PermissionSet.s_fullTrust.Assert();
+#pragma warning disable 618
+ return CreateInstance(assemblyName, typeName, ignoreCase, bindingAttr, binder, args, culture, activationAttributes, securityAttributes);
+#pragma warning restore 618
+ }
+
+ [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
+ public ObjectHandle CreateInstanceFrom(String assemblyFile,
+ String typeName,
+ bool ignoreCase,
+ BindingFlags bindingAttr,
+ Binder binder,
+ Object[] args,
+ CultureInfo culture,
+ Object[] activationAttributes,
+ Evidence securityAttributes)
+
+ {
+ // jit does not check for that, so we should do it ...
+ if (this == null)
+ throw new NullReferenceException();
+ Contract.EndContractBlock();
+
+#if FEATURE_CAS_POLICY
+ if (securityAttributes != null && !IsLegacyCasPolicyEnabled)
+ {
+ throw new NotSupportedException(Environment.GetResourceString("NotSupported_RequiresCasPolicyImplicit"));
+ }
+#endif // FEATURE_CAS_POLICY
+
+ return Activator.CreateInstanceFrom(assemblyFile,
+ typeName,
+ ignoreCase,
+ bindingAttr,
+ binder,
+ args,
+ culture,
+ activationAttributes,
+ securityAttributes);
+ }
+
+ public ObjectHandle CreateInstanceFrom(string assemblyFile,
+ string typeName,
+ bool ignoreCase,
+ BindingFlags bindingAttr,
+ Binder binder,
+ object[] args,
+ CultureInfo culture,
+ object[] activationAttributes)
+ {
+ // jit does not check for that, so we should do it ...
+ if (this == null)
+ throw new NullReferenceException();
+ Contract.EndContractBlock();
+
+ return Activator.CreateInstanceFrom(assemblyFile,
+ typeName,
+ ignoreCase,
+ bindingAttr,
+ binder,
+ args,
+ culture,
+ activationAttributes);
+ }
+
+ [System.Security.SecurityCritical] // auto-generated
+ internal ObjectHandle InternalCreateInstanceFromWithNoSecurity (string assemblyName,
+ string typeName,
+ bool ignoreCase,
+ BindingFlags bindingAttr,
+ Binder binder,
+ Object[] args,
+ CultureInfo culture,
+ Object[] activationAttributes,
+ Evidence securityAttributes)
+ {
+#if FEATURE_CAS_POLICY
+ Contract.Assert(IsLegacyCasPolicyEnabled || securityAttributes == null);
+#endif // FEATURE_CAS_POLICY
+
+ PermissionSet.s_fullTrust.Assert();
+#pragma warning disable 618
+ return CreateInstanceFrom(assemblyName, typeName, ignoreCase, bindingAttr, binder, args, culture, activationAttributes, securityAttributes);
+#pragma warning restore 618
+ }
+
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
+ public Assembly Load(AssemblyName assemblyRef)
+ {
+ StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
+ return RuntimeAssembly.InternalLoadAssemblyName(assemblyRef, null, null, ref stackMark, true /*thrownOnFileNotFound*/, false, false);
+ }
+
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
+ public Assembly Load(String assemblyString)
+ {
+ StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
+ return RuntimeAssembly.InternalLoad(assemblyString, null, ref stackMark, false);
+ }
+
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
+ public Assembly Load(byte[] rawAssembly)
+ {
+ StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
+ return RuntimeAssembly.nLoadImage(rawAssembly,
+ null, // symbol store
+ null, // evidence
+ ref stackMark,
+ false,
+ SecurityContextSource.CurrentAssembly);
+
+ }
+
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
+ public Assembly Load(byte[] rawAssembly,
+ byte[] rawSymbolStore)
+ {
+ StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
+ return RuntimeAssembly.nLoadImage(rawAssembly,
+ rawSymbolStore,
+ null, // evidence
+ ref stackMark,
+ false, // fIntrospection
+ SecurityContextSource.CurrentAssembly);
+ }
+
+ [System.Security.SecuritySafeCritical] // auto-generated
+#pragma warning disable 618
+ [SecurityPermissionAttribute(SecurityAction.Demand, ControlEvidence = true)]
+#pragma warning restore 618
+ [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
+ [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of Load which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkId=155570 for more information.")]
+ public Assembly Load(byte[] rawAssembly,
+ byte[] rawSymbolStore,
+ Evidence securityEvidence)
+ {
+#if FEATURE_CAS_POLICY
+ if (securityEvidence != null && !IsLegacyCasPolicyEnabled)
+ {
+ throw new NotSupportedException(Environment.GetResourceString("NotSupported_RequiresCasPolicyImplicit"));
+ }
+#endif // FEATURE_CAS_POLICY
+
+ StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
+ return RuntimeAssembly.nLoadImage(rawAssembly,
+ rawSymbolStore,
+ securityEvidence,
+ ref stackMark,
+ false, // fIntrospection
+ SecurityContextSource.CurrentAssembly);
+ }
+
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
+ [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of Load which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
+ public Assembly Load(AssemblyName assemblyRef,
+ Evidence assemblySecurity)
+ {
+ StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
+ return RuntimeAssembly.InternalLoadAssemblyName(assemblyRef, assemblySecurity, null, ref stackMark, true /*thrownOnFileNotFound*/, false, false);
+ }
+
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable
+ [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of Load which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
+ public Assembly Load(String assemblyString,
+ Evidence assemblySecurity)
+ {
+ StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
+ return RuntimeAssembly.InternalLoad(assemblyString, assemblySecurity, ref stackMark, false);
+ }
+
+ public int ExecuteAssembly(String assemblyFile)
+ {
+ return ExecuteAssembly(assemblyFile, (string[])null);
+ }
+
+ [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssembly which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
+ public int ExecuteAssembly(String assemblyFile,
+ Evidence assemblySecurity)
+ {
+ return ExecuteAssembly(assemblyFile, assemblySecurity, null);
+ }
+
+ [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssembly which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
+ public int ExecuteAssembly(String assemblyFile,
+ Evidence assemblySecurity,
+ String[] args)
+ {
+#if FEATURE_CAS_POLICY
+ if (assemblySecurity != null && !IsLegacyCasPolicyEnabled)
+ {
+ throw new NotSupportedException(Environment.GetResourceString("NotSupported_RequiresCasPolicyImplicit"));
+ }
+#endif // FEATURE_CAS_POLICY
+
+ RuntimeAssembly assembly = (RuntimeAssembly)Assembly.LoadFrom(assemblyFile, assemblySecurity);
+
+ if (args == null)
+ args = new String[0];
+
+ return nExecuteAssembly(assembly, args);
+ }
+
+ public int ExecuteAssembly(string assemblyFile, string[] args)
+ {
+ RuntimeAssembly assembly = (RuntimeAssembly)Assembly.LoadFrom(assemblyFile);
+
+ if (args == null)
+ args = new String[0];
+
+ return nExecuteAssembly(assembly, args);
+ }
+
+ [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssembly which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
+ public int ExecuteAssembly(String assemblyFile,
+ Evidence assemblySecurity,
+ String[] args,
+ byte[] hashValue,
+ AssemblyHashAlgorithm hashAlgorithm)
+ {
+#if FEATURE_CAS_POLICY
+ if (assemblySecurity != null && !IsLegacyCasPolicyEnabled)
+ {
+ throw new NotSupportedException(Environment.GetResourceString("NotSupported_RequiresCasPolicyImplicit"));
+ }
+#endif // FEATURE_CAS_POLICY
+
+ RuntimeAssembly assembly = (RuntimeAssembly)Assembly.LoadFrom(assemblyFile,
+ assemblySecurity,
+ hashValue,
+ hashAlgorithm);
+ if (args == null)
+ args = new String[0];
+
+ return nExecuteAssembly(assembly, args);
+ }
+
+ public int ExecuteAssembly(string assemblyFile,
+ string[] args,
+ byte[] hashValue,
+ AssemblyHashAlgorithm hashAlgorithm)
+ {
+ RuntimeAssembly assembly = (RuntimeAssembly)Assembly.LoadFrom(assemblyFile,
+ hashValue,
+ hashAlgorithm);
+ if (args == null)
+ args = new String[0];
+
+ return nExecuteAssembly(assembly, args);
+ }
+
+ #if FEATURE_CORECLR
+ [System.Security.SecurityCritical] // auto-generated
+ #endif
+ public int ExecuteAssemblyByName(String assemblyName)
+ {
+ return ExecuteAssemblyByName(assemblyName, (string[])null);
+ }
+
+ [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssemblyByName which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
+ public int ExecuteAssemblyByName(String assemblyName,
+ Evidence assemblySecurity)
+ {
+#pragma warning disable 618
+ return ExecuteAssemblyByName(assemblyName, assemblySecurity, null);
+#pragma warning restore 618
+ }
+
+ [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssemblyByName which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
+ public int ExecuteAssemblyByName(String assemblyName,
+ Evidence assemblySecurity,
+ params String[] args)
+ {
+#if FEATURE_CAS_POLICY
+ if (assemblySecurity != null && !IsLegacyCasPolicyEnabled)
+ {
+ throw new NotSupportedException(Environment.GetResourceString("NotSupported_RequiresCasPolicyImplicit"));
+ }
+#endif // FEATURE_CAS_POLICY
+
+ RuntimeAssembly assembly = (RuntimeAssembly)Assembly.Load(assemblyName, assemblySecurity);
+
+ if (args == null)
+ args = new String[0];
+
+ return nExecuteAssembly(assembly, args);
+ }
+
+ public int ExecuteAssemblyByName(string assemblyName, params string[] args)
+ {
+ RuntimeAssembly assembly = (RuntimeAssembly)Assembly.Load(assemblyName);
+
+ if (args == null)
+ args = new String[0];
+
+ return nExecuteAssembly(assembly, args);
+ }
+
+ [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of ExecuteAssemblyByName which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
+ public int ExecuteAssemblyByName(AssemblyName assemblyName,
+ Evidence assemblySecurity,
+ params String[] args)
+ {
+#if FEATURE_CAS_POLICY
+ if (assemblySecurity != null && !IsLegacyCasPolicyEnabled)
+ {
+ throw new NotSupportedException(Environment.GetResourceString("NotSupported_RequiresCasPolicyImplicit"));
+ }
+#endif // FEATURE_CAS_POLICY
+
+ RuntimeAssembly assembly = (RuntimeAssembly)Assembly.Load(assemblyName, assemblySecurity);
+
+ if (args == null)
+ args = new String[0];
+
+ return nExecuteAssembly(assembly, args);
+ }
+
+ public int ExecuteAssemblyByName(AssemblyName assemblyName, params string[] args)
+ {
+ RuntimeAssembly assembly = (RuntimeAssembly)Assembly.Load(assemblyName);
+
+ if (args == null)
+ args = new String[0];
+
+ return nExecuteAssembly(assembly, args);
+ }
+
+ public static AppDomain CurrentDomain
+ {
+ get {
+ Contract.Ensures(Contract.Result<AppDomain>() != null);
+ return Thread.GetDomain();
+ }
+ }
+
+#if FEATURE_CAS_POLICY
+ public Evidence Evidence
+ {
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [SecurityPermissionAttribute(SecurityAction.Demand, ControlEvidence = true)]
+ get {
+ return EvidenceNoDemand;
+ }
+ }
+
+ internal Evidence EvidenceNoDemand {
+ [SecurityCritical]
+ get {
+ if (_SecurityIdentity == null) {
+ if (!IsDefaultAppDomain() && nIsDefaultAppDomainForEvidence()) {
+#if !FEATURE_CORECLR
+ //
+ // V1.x compatibility: If this is an AppDomain created
+ // by the default appdomain without an explicit evidence
+ // then reuse the evidence of the default AppDomain.
+ //
+ return GetDefaultDomain().Evidence;
+#else
+ Contract.Assert(false,"This code should not be called for core CLR");
+
+ // This operation is not allowed
+ throw new InvalidOperationException();
+#endif
+ }
+ else {
+ // We can't cache this value, since the VM needs to differentiate between AppDomains
+ // which have no user supplied evidence and those which do and it uses the presence
+ // of Evidence on the domain to make that switch.
+ return new Evidence(new AppDomainEvidenceFactory(this));
+ }
+ }
+ else {
+ return _SecurityIdentity.Clone();
+ }
+ }
+ }
+
+ internal Evidence InternalEvidence
+ {
+ get {
+ return _SecurityIdentity;
+ }
+ }
+
+ internal EvidenceBase GetHostEvidence(Type type)
+ {
+ if (_SecurityIdentity != null)
+ {
+ return _SecurityIdentity.GetHostEvidence(type);
+ }
+ else
+ {
+ return new Evidence(new AppDomainEvidenceFactory(this)).GetHostEvidence(type);
+ }
+ }
+#endif // FEATURE_CAS_POLICY
+
+ public String FriendlyName
+ {
+ [System.Security.SecuritySafeCritical] // auto-generated
+ get { return nGetFriendlyName(); }
+ }
+
+ public String BaseDirectory
+ {
+#if FEATURE_CORECLR
+ [System.Security.SecurityCritical]
+#endif
+ get {
+ return FusionStore.ApplicationBase;
+ }
+ }
+
+#if FEATURE_FUSION
+ public String RelativeSearchPath
+ {
+ get { return FusionStore.PrivateBinPath; }
+ }
+
+ public bool ShadowCopyFiles
+ {
+ get {
+ String s = FusionStore.ShadowCopyFiles;
+ if((s != null) &&
+ (String.Compare(s, "true", StringComparison.OrdinalIgnoreCase) == 0))
+ return true;
+ else
+ return false;
+ }
+ }
+#endif
+
+ [System.Security.SecuritySafeCritical] // auto-generated
+ public override String ToString()
+ {
+ StringBuilder sb = StringBuilderCache.Acquire();
+
+ String fn = nGetFriendlyName();
+ if (fn != null) {
+ sb.Append(Environment.GetResourceString("Loader_Name") + fn);
+ sb.Append(Environment.NewLine);
+ }
+
+ if(_Policies == null || _Policies.Length == 0)
+ sb.Append(Environment.GetResourceString("Loader_NoContextPolicies")
+ + Environment.NewLine);
+ else {
+ sb.Append(Environment.GetResourceString("Loader_ContextPolicies")
+ + Environment.NewLine);
+ for(int i = 0;i < _Policies.Length; i++) {
+ sb.Append(_Policies[i]);
+ sb.Append(Environment.NewLine);
+ }
+ }
+
+ return StringBuilderCache.GetStringAndRelease(sb);
+ }
+
+ public Assembly[] GetAssemblies()
+ {
+ return nGetAssemblies(false /* forIntrospection */);
+ }
+
+
+ public Assembly[] ReflectionOnlyGetAssemblies()
+ {
+ return nGetAssemblies(true /* forIntrospection */);
+ }
+
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ private extern Assembly[] nGetAssemblies(bool forIntrospection);
+
+ // this is true when we've removed the handles etc so really can't do anything
+ [System.Security.SecurityCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ internal extern bool IsUnloadingForcedFinalize();
+
+ // this is true when we've just started going through the finalizers and are forcing objects to finalize
+ // so must be aware that certain infrastructure may have gone away
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ public extern bool IsFinalizingForUnload();
+
+ [System.Security.SecurityCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ internal static extern void PublishAnonymouslyHostedDynamicMethodsAssembly(RuntimeAssembly assemblyHandle);
+
+#if FEATURE_FUSION
+ // Appends the following string to the private path. Valid paths
+ // are of the form "bin;util/i386" etc.
+ [System.Security.SecurityCritical] // auto-generated_required
+ [Obsolete("AppDomain.AppendPrivatePath has been deprecated. Please investigate the use of AppDomainSetup.PrivateBinPath instead. http://go.microsoft.com/fwlink/?linkid=14202")]
+ public void AppendPrivatePath(String path)
+ {
+ if(path == null || path.Length == 0)
+ return;
+
+ String current = FusionStore.Value[(int) AppDomainSetup.LoaderInformation.PrivateBinPathValue];
+ StringBuilder appendPath = StringBuilderCache.Acquire();
+
+ if(current != null && current.Length > 0) {
+ // See if the last character is a separator
+ appendPath.Append(current);
+ if((current[current.Length-1] != Path.PathSeparator) &&
+ (path[0] != Path.PathSeparator))
+ appendPath.Append(Path.PathSeparator);
+ }
+ appendPath.Append(path);
+
+ String result = StringBuilderCache.GetStringAndRelease(appendPath);
+ InternalSetPrivateBinPath(result);
+ }
+
+
+ [System.Security.SecurityCritical] // auto-generated_required
+ [Obsolete("AppDomain.ClearPrivatePath has been deprecated. Please investigate the use of AppDomainSetup.PrivateBinPath instead. http://go.microsoft.com/fwlink/?linkid=14202")]
+ public void ClearPrivatePath()
+ {
+ InternalSetPrivateBinPath(String.Empty);
+ }
+
+ [System.Security.SecurityCritical] // auto-generated_required
+ [Obsolete("AppDomain.ClearShadowCopyPath has been deprecated. Please investigate the use of AppDomainSetup.ShadowCopyDirectories instead. http://go.microsoft.com/fwlink/?linkid=14202")]
+ public void ClearShadowCopyPath()
+ {
+ InternalSetShadowCopyPath(String.Empty);
+ }
+
+ [System.Security.SecurityCritical] // auto-generated_required
+ [Obsolete("AppDomain.SetCachePath has been deprecated. Please investigate the use of AppDomainSetup.CachePath instead. http://go.microsoft.com/fwlink/?linkid=14202")]
+ public void SetCachePath(String path)
+ {
+ InternalSetCachePath(path);
+ }
+#endif // FEATURE_FUSION
+
+ [System.Security.SecurityCritical] // auto-generated_required
+ public void SetData (string name, object data) {
+#if FEATURE_CORECLR
+ if (!name.Equals("LOCATION_URI"))
+ {
+ // Only LOCATION_URI can be set using AppDomain.SetData
+ throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_SetData_OnlyLocationURI", name));
+ }
+#endif // FEATURE_CORECLR
+ SetDataHelper(name, data, null);
+ }
+
+ [System.Security.SecurityCritical] // auto-generated_required
+ public void SetData (string name, object data, IPermission permission) {
+#if FEATURE_CORECLR
+ if (!name.Equals("LOCATION_URI"))
+ {
+ // Only LOCATION_URI can be set using AppDomain.SetData
+ throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_SetData_OnlyLocationURI", name));
+ }
+#endif // FEATURE_CORECLR
+ SetDataHelper(name, data, permission);
+ }
+
+ [System.Security.SecurityCritical] // auto-generated
+ private void SetDataHelper (string name, object data, IPermission permission) {
+ if (name == null)
+ throw new ArgumentNullException("name");
+ Contract.EndContractBlock();
+
+ //
+ // Synopsis:
+ // IgnoreSystemPolicy is provided as a legacy flag to allow callers to
+ // skip enterprise, machine and user policy levels. When this flag is set,
+ // any demands triggered in this AppDomain will be evaluated against the
+ // AppDomain CAS policy level that is set on the AppDomain.
+ // Security Requirements:
+ // The caller needs to be fully trusted in order to be able to set
+ // this legacy mode.
+ // Remarks:
+ // There needs to be an AppDomain policy level set before this compat
+ // switch can be set on the AppDomain.
+ //
+#if FEATURE_FUSION
+ if (name.Equals(TargetFrameworkNameAppCompatSetting)) {
+ _FusionStore.TargetFrameworkName = (String) data;
+ return;
+ }
+#if FEATURE_CAS_POLICY
+ if (name.Equals("IgnoreSystemPolicy")) {
+ lock (this) {
+ if (!_HasSetPolicy)
+ throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_SetData"));
+ }
+ new PermissionSet(PermissionState.Unrestricted).Demand();
+ }
+#endif
+ int key = AppDomainSetup.Locate(name);
+
+ if(key == -1) {
+ lock (((ICollection)LocalStore).SyncRoot) {
+ LocalStore[name] = new object[] {data, permission};
+ }
+ }
+ else {
+ if (permission != null)
+ throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_SetData"));
+ // Be sure to call these properties, not Value, since
+ // these do more than call Value.
+ switch(key) {
+ case (int) AppDomainSetup.LoaderInformation.DynamicBaseValue:
+ FusionStore.DynamicBase = (string) data;
+ break;
+ case (int) AppDomainSetup.LoaderInformation.DevPathValue:
+ FusionStore.DeveloperPath = (string) data;
+ break;
+ case (int) AppDomainSetup.LoaderInformation.ShadowCopyDirectoriesValue:
+ FusionStore.ShadowCopyDirectories = (string) data;
+ break;
+ case (int) AppDomainSetup.LoaderInformation.DisallowPublisherPolicyValue:
+ if(data != null)
+ FusionStore.DisallowPublisherPolicy = true;
+ else
+ FusionStore.DisallowPublisherPolicy = false;
+ break;
+ case (int) AppDomainSetup.LoaderInformation.DisallowCodeDownloadValue:
+ if (data != null)
+ FusionStore.DisallowCodeDownload = true;
+ else
+ FusionStore.DisallowCodeDownload = false;
+ break;
+ case (int) AppDomainSetup.LoaderInformation.DisallowBindingRedirectsValue:
+ if(data != null)
+ FusionStore.DisallowBindingRedirects = true;
+ else
+ FusionStore.DisallowBindingRedirects = false;
+ break;
+ case (int) AppDomainSetup.LoaderInformation.DisallowAppBaseProbingValue:
+ if(data != null)
+ FusionStore.DisallowApplicationBaseProbing = true;
+ else
+ FusionStore.DisallowApplicationBaseProbing = false;
+ break;
+ case (int) AppDomainSetup.LoaderInformation.ConfigurationBytesValue:
+ FusionStore.SetConfigurationBytes((byte[]) data);
+ break;
+ default:
+ FusionStore.Value[key] = (string) data;
+ break;
+ }
+ }
+#else // FEATURE_FUSION
+#if FEATURE_CORECLR
+ // SetData should only be used to set values that don't already exist.
+ {
+ object[] currentVal;
+ lock (((ICollection)LocalStore).SyncRoot) {
+ LocalStore.TryGetValue(name, out currentVal);
+ }
+ if (currentVal != null && currentVal[0] != null)
+ {
+ throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_SetData_OnlyOnce"));
+ }
+ }
+
+#endif // FEATURE_CORECLR
+ lock (((ICollection)LocalStore).SyncRoot) {
+ LocalStore[name] = new object[] {data, permission};
+ }
+#endif // FEATURE_FUSION
+ }
+
+ [Pure]
+ #if FEATURE_CORECLR
+ [System.Security.SecurityCritical] // auto-generated
+ #else
+ [System.Security.SecuritySafeCritical]
+ #endif
+ public Object GetData(string name)
+ {
+ if(name == null)
+ throw new ArgumentNullException("name");
+ Contract.EndContractBlock();
+
+ int key = AppDomainSetup.Locate(name);
+ if(key == -1)
+ {
+#if FEATURE_LOADER_OPTIMIZATION
+ if(name.Equals(AppDomainSetup.LoaderOptimizationKey))
+ return FusionStore.LoaderOptimization;
+ else
+#endif // FEATURE_LOADER_OPTIMIZATION
+ {
+ object[] data;
+ lock (((ICollection)LocalStore).SyncRoot) {
+ LocalStore.TryGetValue(name, out data);
+ }
+ if (data == null)
+ return null;
+ if (data[1] != null) {
+ IPermission permission = (IPermission) data[1];
+ permission.Demand();
+ }
+ return data[0];
+ }
+ }
+ else {
+ // Be sure to call these properties, not Value, so
+ // that the appropriate permission demand will be done
+ switch(key) {
+ case (int) AppDomainSetup.LoaderInformation.ApplicationBaseValue:
+ return FusionStore.ApplicationBase;
+ case (int) AppDomainSetup.LoaderInformation.ApplicationNameValue:
+ return FusionStore.ApplicationName;
+#if FEATURE_FUSION
+ case (int) AppDomainSetup.LoaderInformation.ConfigurationFileValue:
+ return FusionStore.ConfigurationFile;
+ case (int) AppDomainSetup.LoaderInformation.DynamicBaseValue:
+ return FusionStore.DynamicBase;
+ case (int) AppDomainSetup.LoaderInformation.DevPathValue:
+ return FusionStore.DeveloperPath;
+ case (int) AppDomainSetup.LoaderInformation.PrivateBinPathValue:
+ return FusionStore.PrivateBinPath;
+ case (int) AppDomainSetup.LoaderInformation.PrivateBinPathProbeValue:
+ return FusionStore.PrivateBinPathProbe;
+ case (int) AppDomainSetup.LoaderInformation.ShadowCopyDirectoriesValue:
+ return FusionStore.ShadowCopyDirectories;
+ case (int) AppDomainSetup.LoaderInformation.ShadowCopyFilesValue:
+ return FusionStore.ShadowCopyFiles;
+ case (int) AppDomainSetup.LoaderInformation.CachePathValue:
+ return FusionStore.CachePath;
+ case (int) AppDomainSetup.LoaderInformation.LicenseFileValue:
+ return FusionStore.LicenseFile;
+ case (int) AppDomainSetup.LoaderInformation.DisallowPublisherPolicyValue:
+ return FusionStore.DisallowPublisherPolicy;
+ case (int) AppDomainSetup.LoaderInformation.DisallowCodeDownloadValue:
+ return FusionStore.DisallowCodeDownload;
+ case (int) AppDomainSetup.LoaderInformation.DisallowBindingRedirectsValue:
+ return FusionStore.DisallowBindingRedirects;
+ case (int) AppDomainSetup.LoaderInformation.DisallowAppBaseProbingValue:
+ return FusionStore.DisallowApplicationBaseProbing;
+ case (int) AppDomainSetup.LoaderInformation.ConfigurationBytesValue:
+ return FusionStore.GetConfigurationBytes();
+#endif //FEATURE_FUSION
+
+ default:
+ Contract.Assert(false, "Need to handle new LoaderInformation value in AppDomain.GetData()");
+ return null;
+ }
+ }
+
+ }
+
+ // The compat flags are set at domain creation time to indicate that the given breaking
+ // change should not be used in this domain.
+ //
+ // After the domain has been created, this Nullable boolean returned by this method should
+ // always have a value. Code in the runtime uses this to know if it is safe to cache values
+ // that might change if the compatibility switches have not been set yet.
+ public Nullable<bool> IsCompatibilitySwitchSet(String value)
+ {
+ Nullable<bool> fReturn;
+
+ if (_compatFlagsInitialized == false)
+ {
+ fReturn = new Nullable<bool>();
+ }
+ else
+ {
+ fReturn = new Nullable<bool>(_compatFlags != null && _compatFlags.ContainsKey(value));
+ }
+
+ return fReturn;
+ }
+
+ [Obsolete("AppDomain.GetCurrentThreadId has been deprecated because it does not provide a stable Id when managed threads are running on fibers (aka lightweight threads). To get a stable identifier for a managed thread, use the ManagedThreadId property on Thread. http://go.microsoft.com/fwlink/?linkid=14202", false)]
+ [DllImport(Microsoft.Win32.Win32Native.KERNEL32)]
+ public static extern int GetCurrentThreadId();
+
+#if FEATURE_REMOTING
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [SecurityPermissionAttribute( SecurityAction.Demand, ControlAppDomain = true ),
+ ReliabilityContract(Consistency.MayCorruptAppDomain, Cer.MayFail)]
+ public static void Unload(AppDomain domain)
+ {
+ if (domain == null)
+ throw new ArgumentNullException("domain");
+ Contract.EndContractBlock();
+
+ try {
+ Int32 domainID = AppDomain.GetIdForUnload(domain);
+ if (domainID==0)
+ throw new CannotUnloadAppDomainException();
+ AppDomain.nUnload(domainID);
+ }
+ catch(Exception e) {
+ throw e; // throw it again to reset stack trace
+ }
+ }
+#endif
+
+ // Explicitly set policy for a domain (providing policy hasn't been set
+ // previously). Making this call will guarantee that previously loaded
+ // assemblies will be granted permissions based on the default machine
+ // policy that was in place prior to this call.
+#if FEATURE_CAS_POLICY
+ [System.Security.SecurityCritical] // auto-generated_required
+ [Obsolete("AppDomain policy levels are obsolete and will be removed in a future release of the .NET Framework. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
+ public void SetAppDomainPolicy(PolicyLevel domainPolicy)
+ {
+ if (domainPolicy == null)
+ throw new ArgumentNullException("domainPolicy");
+ Contract.EndContractBlock();
+
+ if (!IsLegacyCasPolicyEnabled)
+ {
+ throw new NotSupportedException(Environment.GetResourceString("NotSupported_RequiresCasPolicyExplicit"));
+ }
+
+ // Check that policy has not been set previously.
+ lock (this) {
+ if (_HasSetPolicy)
+ throw new PolicyException(Environment.GetResourceString("Policy_PolicyAlreadySet"));
+ _HasSetPolicy = true;
+
+ // Make sure that the loader allows us to change security policy
+ // at this time (this will throw if not.)
+ nChangeSecurityPolicy();
+ }
+
+ // Add the new policy level.
+ SecurityManager.PolicyManager.AddLevel(domainPolicy);
+ }
+#endif //#if !FEATURE_CAS_POLICY
+#if FEATURE_CLICKONCE
+ public ActivationContext ActivationContext {
+ [System.Security.SecurityCritical] // auto-generated_required
+ get {
+ return _activationContext;
+ }
+ }
+
+ public ApplicationIdentity ApplicationIdentity {
+ [System.Security.SecurityCritical] // auto-generated_required
+ get {
+ return _applicationIdentity;
+ }
+ }
+#endif // FEATURE_CLICKONCE
+
+
+#if FEATURE_CLICKONCE
+ public ApplicationTrust ApplicationTrust {
+ [System.Security.SecurityCritical] // auto-generated_required
+#else // FEATURE_CLICKONCE
+ internal ApplicationTrust ApplicationTrust {
+#endif // FEATURE_CLICKONCE
+ get {
+ if (_applicationTrust == null && _IsFastFullTrustDomain) {
+ _applicationTrust = new ApplicationTrust(new PermissionSet(PermissionState.Unrestricted));
+ }
+
+ return _applicationTrust;
+ }
+ }
+
+#if FEATURE_IMPERSONATION
+ // Set the default principal object to be attached to threads if they
+ // attempt to bind to a principal while executing in this appdomain. The
+ // default can only be set once.
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [SecurityPermissionAttribute(SecurityAction.Demand, Flags=SecurityPermissionFlag.ControlPrincipal)]
+ public void SetThreadPrincipal(IPrincipal principal)
+ {
+ if (principal == null)
+ throw new ArgumentNullException("principal");
+ Contract.EndContractBlock();
+
+ lock (this) {
+ // Check that principal has not been set previously.
+ if (_DefaultPrincipal != null)
+ throw new PolicyException(Environment.GetResourceString("Policy_PrincipalTwice"));
+
+ _DefaultPrincipal = principal;
+ }
+ }
+#endif // FEATURE_IMPERSONATION
+
+#if FEATURE_CAS_POLICY
+ // Similar to the above, but sets the class of principal to be created
+ // instead.
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [SecurityPermissionAttribute(SecurityAction.Demand, Flags=SecurityPermissionFlag.ControlPrincipal)]
+ public void SetPrincipalPolicy(PrincipalPolicy policy)
+ {
+ _PrincipalPolicy = policy;
+ }
+#endif
+
+
+#if FEATURE_REMOTING
+ // This method gives AppDomain an infinite life time by preventing a lease from being
+ // created
+ [System.Security.SecurityCritical] // auto-generated_required
+ public override Object InitializeLifetimeService()
+ {
+ return null;
+ }
+ // This is useful for requesting execution of some code
+ // in another appDomain ... the delegate may be defined
+ // on a marshal-by-value object or a marshal-by-ref or
+ // contextBound object.
+ public void DoCallBack(CrossAppDomainDelegate callBackDelegate)
+ {
+ if (callBackDelegate == null)
+ throw new ArgumentNullException("callBackDelegate");
+ Contract.EndContractBlock();
+
+ callBackDelegate();
+ }
+#endif
+
+
+ public String DynamicDirectory
+ {
+ [System.Security.SecuritySafeCritical] // auto-generated
+ get {
+ String dyndir = GetDynamicDir();
+ if (dyndir != null)
+ new FileIOPermission( FileIOPermissionAccess.PathDiscovery, dyndir ).Demand();
+
+ return dyndir;
+ }
+ }
+
+#if FEATURE_CAS_POLICY
+ public static AppDomain CreateDomain(String friendlyName,
+ Evidence securityInfo) // Optional
+ {
+ return CreateDomain(friendlyName,
+ securityInfo,
+ null);
+ }
+
+ public static AppDomain CreateDomain(String friendlyName,
+ Evidence securityInfo, // Optional
+ String appBasePath,
+ String appRelativeSearchPath,
+ bool shadowCopyFiles)
+ {
+ AppDomainSetup info = new AppDomainSetup();
+ info.ApplicationBase = appBasePath;
+ info.PrivateBinPath = appRelativeSearchPath;
+ if(shadowCopyFiles)
+ info.ShadowCopyFiles = "true";
+
+ return CreateDomain(friendlyName,
+ securityInfo,
+ info);
+ }
+#endif // #if FEATURE_CAS_POLICY (not exposed in core)
+
+
+ [System.Security.SecurityCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ extern private String GetDynamicDir();
+
+ // Private helpers called from unmanaged code.
+
+#if FEATURE_REMOTING
+
+ public static AppDomain CreateDomain(String friendlyName)
+ {
+ return CreateDomain(friendlyName, null, null);
+ }
+
+
+ // Marshal a single object into a serialized blob.
+ [System.Security.SecurityCritical] // auto-generated
+ private static byte[] MarshalObject(Object o)
+ {
+ CodeAccessPermission.Assert(true);
+
+ return Serialize(o);
+ }
+
+ // Marshal two objects into serialized blobs.
+ [System.Security.SecurityCritical] // auto-generated
+ private static byte[] MarshalObjects(Object o1, Object o2, out byte[] blob2)
+ {
+ CodeAccessPermission.Assert(true);
+
+ byte[] blob1 = Serialize(o1);
+ blob2 = Serialize(o2);
+ return blob1;
+ }
+
+ // Unmarshal a single object from a serialized blob.
+ [System.Security.SecurityCritical] // auto-generated
+ private static Object UnmarshalObject(byte[] blob)
+ {
+ CodeAccessPermission.Assert(true);
+
+ return Deserialize(blob);
+ }
+
+ // Unmarshal two objects from serialized blobs.
+ [System.Security.SecurityCritical] // auto-generated
+ private static Object UnmarshalObjects(byte[] blob1, byte[] blob2, out Object o2)
+ {
+ CodeAccessPermission.Assert(true);
+
+ Object o1 = Deserialize(blob1);
+ o2 = Deserialize(blob2);
+ return o1;
+ }
+
+ // Helper routines.
+ [System.Security.SecurityCritical] // auto-generated
+ private static byte[] Serialize(Object o)
+ {
+ if (o == null)
+ {
+ return null;
+ }
+ else if (o is ISecurityEncodable)
+ {
+ SecurityElement element = ((ISecurityEncodable)o).ToXml();
+ MemoryStream ms = new MemoryStream( 4096 );
+ ms.WriteByte( 0 );
+ StreamWriter writer = new StreamWriter( ms, Encoding.UTF8 );
+ element.ToWriter( writer );
+ writer.Flush();
+ return ms.ToArray();
+ }
+ else
+ {
+ MemoryStream ms = new MemoryStream();
+ ms.WriteByte( 1 );
+ CrossAppDomainSerializer.SerializeObject(o, ms);
+ return ms.ToArray();
+ }
+ }
+
+ [System.Security.SecurityCritical] // auto-generated
+ private static Object Deserialize(byte[] blob)
+ {
+ if (blob == null)
+ return null;
+
+ if (blob[0] == 0)
+ {
+ Parser parser = new Parser( blob, Tokenizer.ByteTokenEncoding.UTF8Tokens, 1 );
+ SecurityElement root = parser.GetTopElement();
+ if (root.Tag.Equals( "IPermission" ) || root.Tag.Equals( "Permission" ))
+ {
+ IPermission ip = System.Security.Util.XMLUtil.CreatePermission( root, PermissionState.None, false );
+
+ if (ip == null)
+ {
+ return null;
+ }
+
+ ip.FromXml( root );
+
+ return ip;
+ }
+ else if (root.Tag.Equals( "PermissionSet" ))
+ {
+ PermissionSet permissionSet = new PermissionSet();
+
+ permissionSet.FromXml( root, false, false );
+
+ return permissionSet;
+ }
+ else if (root.Tag.Equals( "PermissionToken" ))
+ {
+ PermissionToken pToken = new PermissionToken();
+
+ pToken.FromXml( root );
+
+ return pToken;
+ }
+ else
+ {
+ return null;
+ }
+
+ }
+ else
+ {
+ Object obj = null;
+ using(MemoryStream stream = new MemoryStream( blob, 1, blob.Length - 1 )) {
+ obj = CrossAppDomainSerializer.DeserializeObject(stream);
+ }
+
+ Contract.Assert( !(obj is IPermission), "IPermission should be xml deserialized" );
+ Contract.Assert( !(obj is PermissionSet), "PermissionSet should be xml deserialized" );
+
+ return obj;
+ }
+ }
+
+#endif // FEATURE_REMOTING
+
+#if !FEATURE_CORECLR
+ //
+ // Called by the VM if ICLRExecutionManager::Pause is called with the PAUSE_APP_DOMAINS flag.
+ // This mimics the behavior of the CoreCLR FAS (fast application switching) model, to ensure
+ // that code that depends on things happening in a particular order will work.
+ //
+ [System.Security.SecurityCritical]
+ internal static void Pause()
+ {
+ AppDomainPauseManager.Instance.Pausing();
+ AppDomainPauseManager.Instance.Paused();
+ }
+
+ //
+ // Called by the VM if ICLRExecutionManager::Resume is called after ICLRExecutionManager::Pause
+ // was called with the PAUSE_APP_DOMAINS flag.
+ // This mimics the behavior of the CoreCLR FAS (fast application switching) model, to ensure
+ // that code that depends on things happening in a particular order will work.
+ //
+ [System.Security.SecurityCritical]
+ internal static void Resume()
+ {
+ if (AppDomainPauseManager.IsPaused)
+ {
+ AppDomainPauseManager.Instance.Resuming();
+ AppDomainPauseManager.Instance.Resumed();
+ }
+ }
+#endif
+
+ private AppDomain() {
+ throw new NotSupportedException(Environment.GetResourceString(ResId.NotSupported_Constructor));
+ }
+
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ private extern int _nExecuteAssembly(RuntimeAssembly assembly, String[] args);
+ internal int nExecuteAssembly(RuntimeAssembly assembly, String[] args)
+ {
+ return _nExecuteAssembly(assembly, args);
+ }
+
+#if FEATURE_VERSIONING
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ internal extern void nCreateContext();
+
+ [System.Security.SecurityCritical]
+ [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
+ [SuppressUnmanagedCodeSecurity]
+ private static extern void nSetupBindingPaths(String trustedPlatformAssemblies, String platformResourceRoots, String appPath, String appNiPaths, String appLocalWinMD);
+
+ #if FEATURE_CORECLR
+ [System.Security.SecurityCritical] // auto-generated
+ #endif
+ internal void SetupBindingPaths(String trustedPlatformAssemblies, String platformResourceRoots, String appPath, String appNiPaths, String appLocalWinMD)
+ {
+ nSetupBindingPaths(trustedPlatformAssemblies, platformResourceRoots, appPath, appNiPaths, appLocalWinMD);
+ }
+#endif // FEATURE_VERSIONING
+
+#if FEATURE_REMOTING
+ internal void CreateRemotingData()
+ {
+ lock(this) {
+ if (_RemotingData == null)
+ _RemotingData = new DomainSpecificRemotingData();
+ }
+ }
+
+ internal DomainSpecificRemotingData RemotingData
+ {
+ get
+ {
+ if (_RemotingData == null)
+ CreateRemotingData();
+
+ return _RemotingData;
+ }
+ }
+#endif // FEATURE_REMOTING
+
+ [System.Security.SecurityCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ private extern String nGetFriendlyName();
+ [System.Security.SecurityCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ private extern bool nIsDefaultAppDomainForEvidence();
+
+ // support reliability for certain event handlers, if the target
+ // methods also participate in this discipline. If caller passes
+ // an existing MulticastDelegate, then we could use a MDA to indicate
+ // that reliability is not guaranteed. But if it is a single cast
+ // scenario, we can make it work.
+
+ public event EventHandler ProcessExit
+ {
+ [System.Security.SecuritySafeCritical] // auto-generated_required
+ add
+ {
+ if (value != null)
+ {
+ RuntimeHelpers.PrepareContractedDelegate(value);
+ lock(this)
+ _processExit += value;
+ }
+ }
+ remove
+ {
+ lock(this)
+ _processExit -= value;
+ }
+ }
+
+
+ public event EventHandler DomainUnload
+ {
+ [System.Security.SecuritySafeCritical] // auto-generated_required
+ add
+ {
+ if (value != null)
+ {
+ RuntimeHelpers.PrepareContractedDelegate(value);
+ lock(this)
+ _domainUnload += value;
+ }
+ }
+#if FEATURE_CORECLR
+ [System.Security.SecuritySafeCritical]
+#endif
+ remove
+ {
+ lock(this)
+ _domainUnload -= value;
+ }
+ }
+
+
+ public event UnhandledExceptionEventHandler UnhandledException
+ {
+ [System.Security.SecurityCritical] // auto-generated_required
+ add
+ {
+ if (value != null)
+ {
+ RuntimeHelpers.PrepareContractedDelegate(value);
+ lock(this)
+ _unhandledException += value;
+ }
+ }
+ [System.Security.SecurityCritical] // auto-generated_required
+ remove
+ {
+ lock(this)
+ _unhandledException -= value;
+ }
+ }
+
+#if FEATURE_EXCEPTION_NOTIFICATIONS
+ // This is the event managed code can wireup against to be notified
+ // about first chance exceptions.
+ //
+ // To register/unregister the callback, the code must be SecurityCritical.
+ public event EventHandler<FirstChanceExceptionEventArgs> FirstChanceException
+ {
+ [System.Security.SecurityCritical] // auto-generated_required
+ add
+ {
+ if (value != null)
+ {
+ RuntimeHelpers.PrepareContractedDelegate(value);
+ lock(this)
+ _firstChanceException += value;
+ }
+ }
+ [System.Security.SecurityCritical] // auto-generated_required
+ remove
+ {
+ lock(this)
+ _firstChanceException -= value;
+ }
+ }
+#endif // FEATURE_EXCEPTION_NOTIFICATIONS
+
+ private void OnAssemblyLoadEvent(RuntimeAssembly LoadedAssembly)
+ {
+ AssemblyLoadEventHandler eventHandler = AssemblyLoad;
+ if (eventHandler != null) {
+ AssemblyLoadEventArgs ea = new AssemblyLoadEventArgs(LoadedAssembly);
+ eventHandler(this, ea);
+ }
+ }
+
+ // This method is called by the VM.
+ [System.Security.SecurityCritical]
+ private RuntimeAssembly OnResourceResolveEvent(RuntimeAssembly assembly, String resourceName)
+ {
+ ResolveEventHandler eventHandler = _ResourceResolve;
+ if ( eventHandler == null)
+ return null;
+
+ Delegate[] ds = eventHandler.GetInvocationList();
+ int len = ds.Length;
+ for (int i = 0; i < len; i++) {
+ Assembly asm = ((ResolveEventHandler)ds[i])(this, new ResolveEventArgs(resourceName, assembly));
+ RuntimeAssembly ret = GetRuntimeAssembly(asm);
+ if (ret != null)
+ return ret;
+ }
+
+ return null;
+ }
+
+ // This method is called by the VM
+ [System.Security.SecurityCritical]
+ private RuntimeAssembly OnTypeResolveEvent(RuntimeAssembly assembly, String typeName)
+ {
+ ResolveEventHandler eventHandler = _TypeResolve;
+ if (eventHandler == null)
+ return null;
+
+ Delegate[] ds = eventHandler.GetInvocationList();
+ int len = ds.Length;
+ for (int i = 0; i < len; i++) {
+ Assembly asm = ((ResolveEventHandler)ds[i])(this, new ResolveEventArgs(typeName, assembly));
+ RuntimeAssembly ret = GetRuntimeAssembly(asm);
+ if (ret != null)
+ return ret;
+ }
+
+ return null;
+ }
+
+ // This method is called by the VM.
+ [System.Security.SecurityCritical]
+ private RuntimeAssembly OnAssemblyResolveEvent(RuntimeAssembly assembly, String assemblyFullName)
+ {
+ ResolveEventHandler eventHandler = _AssemblyResolve;
+
+ if (eventHandler == null)
+ {
+ return null;
+ }
+
+ Delegate[] ds = eventHandler.GetInvocationList();
+ int len = ds.Length;
+ for (int i = 0; i < len; i++) {
+ Assembly asm = ((ResolveEventHandler)ds[i])(this, new ResolveEventArgs(assemblyFullName, assembly));
+ RuntimeAssembly ret = GetRuntimeAssembly(asm);
+ if (ret != null)
+ return ret;
+ }
+
+ return null;
+ }
+
+#if FEATURE_REFLECTION_ONLY_LOAD
+
+ private RuntimeAssembly OnReflectionOnlyAssemblyResolveEvent(RuntimeAssembly assembly, String assemblyFullName)
+ {
+ ResolveEventHandler eventHandler = ReflectionOnlyAssemblyResolve;
+ if (eventHandler != null) {
+
+ Delegate[] ds = eventHandler.GetInvocationList();
+ int len = ds.Length;
+ for (int i = 0; i < len; i++) {
+ Assembly asm = ((ResolveEventHandler)ds[i])(this, new ResolveEventArgs(assemblyFullName, assembly));
+ RuntimeAssembly ret = GetRuntimeAssembly(asm);
+ if (ret != null)
+ return ret;
+ }
+ }
+
+ return null;
+ }
+
+#if FEATURE_COMINTEROP
+ // Called by VM - code:CLRPrivTypeCacheReflectionOnlyWinRT::RaiseNamespaceResolveEvent
+ private RuntimeAssembly[] OnReflectionOnlyNamespaceResolveEvent(RuntimeAssembly assembly, string namespaceName)
+ {
+ return System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMetadata.OnReflectionOnlyNamespaceResolveEvent(this, assembly, namespaceName);
+ }
+#endif // FEATURE_COMINTEROP
+
+#endif // FEATURE_REFLECTION_ONLY_LOAD
+
+#if FEATURE_COMINTEROP
+ // Called by VM - code:CLRPrivTypeCacheWinRT::RaiseDesignerNamespaceResolveEvent
+ private string[] OnDesignerNamespaceResolveEvent(string namespaceName)
+ {
+ return System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMetadata.OnDesignerNamespaceResolveEvent(this, namespaceName);
+ }
+#endif // FEATURE_COMINTEROP
+
+ internal AppDomainSetup FusionStore
+ {
+ get {
+ Contract.Assert(_FusionStore != null,
+ "Fusion store has not been correctly setup in this domain");
+ return _FusionStore;
+ }
+ }
+
+ internal static RuntimeAssembly GetRuntimeAssembly(Assembly asm)
+ {
+ if (asm == null)
+ return null;
+
+ RuntimeAssembly rtAssembly = asm as RuntimeAssembly;
+ if (rtAssembly != null)
+ return rtAssembly;
+
+ AssemblyBuilder ab = asm as AssemblyBuilder;
+ if (ab != null)
+ return ab.InternalAssembly;
+
+ return null;
+ }
+
+ private Dictionary<String, Object[]> LocalStore
+ {
+ get {
+ if (_LocalStore != null)
+ return _LocalStore;
+ else {
+ _LocalStore = new Dictionary<String, Object[]>();
+ return _LocalStore;
+ }
+ }
+ }
+
+#if FEATURE_FUSION
+ private void TurnOnBindingRedirects()
+ {
+ _FusionStore.DisallowBindingRedirects = false;
+ }
+#endif
+
+ // This will throw a CannotUnloadAppDomainException if the appdomain is
+ // in another process.
+#if FEATURE_REMOTING
+ [System.Security.SecurityCritical] // auto-generated
+ [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
+ internal static Int32 GetIdForUnload(AppDomain domain)
+ {
+ if (RemotingServices.IsTransparentProxy(domain))
+ {
+ return RemotingServices.GetServerDomainIdForProxy(domain);
+ }
+ else
+ return domain.Id;
+ }
+#endif
+
+ // Used to determine if server object context is valid in
+ // x-domain remoting scenarios.
+ [System.Security.SecurityCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
+ internal static extern bool IsDomainIdValid(Int32 id);
+
+#if FEATURE_REMOTING
+ [System.Security.SecurityCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ static internal extern AppDomain GetDefaultDomain();
+#endif
+
+#if FEATURE_IMPERSONATION
+ // Internal routine to retrieve the default principal object. If this is
+ // called before the principal has been explicitly set, it will
+ // automatically allocate a default principal based on the policy set by
+ // SetPrincipalPolicy.
+ internal IPrincipal GetThreadPrincipal()
+ {
+ IPrincipal principal = null;
+ if (_DefaultPrincipal == null) {
+#if FEATURE_CAS_POLICY
+ switch (_PrincipalPolicy) {
+ case PrincipalPolicy.NoPrincipal:
+ principal = null;
+ break;
+ case PrincipalPolicy.UnauthenticatedPrincipal:
+ principal = new GenericPrincipal(new GenericIdentity("", ""),
+ new String[] {""});
+ break;
+ case PrincipalPolicy.WindowsPrincipal:
+ principal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
+ break;
+ default:
+ principal = null;
+ break;
+ }
+#else
+ principal = new GenericPrincipal(new GenericIdentity("", ""),
+ new String[] {""});
+
+#endif
+ }
+ else
+ principal = _DefaultPrincipal;
+
+ return principal;
+ }
+#endif // FEATURE_IMPERSONATION
+
+#if FEATURE_REMOTING
+
+ [System.Security.SecurityCritical] // auto-generated
+ internal void CreateDefaultContext()
+ {
+ lock(this) {
+ // if it has not been created we ask the Context class to
+ // create a new default context for this appdomain.
+ if (_DefaultContext == null)
+ _DefaultContext = Context.CreateDefaultContext();
+ }
+ }
+
+ [System.Security.SecurityCritical] // auto-generated
+ internal Context GetDefaultContext()
+ {
+ if (_DefaultContext == null)
+ CreateDefaultContext();
+ return _DefaultContext;
+ }
+
+ // Ensure that evidence provided when creating an AppDomain would not have been used to create a
+ // sandbox in legacy CAS mode. If it could have been used to create a sandbox, and we're not in CAS
+ // mode, then we throw an exception to prevent acciental creation of unsandboxed domains where a
+ // sandbox would have been expected.
+ [SecuritySafeCritical]
+ internal static void CheckDomainCreationEvidence(AppDomainSetup creationDomainSetup,
+ Evidence creationEvidence)
+ {
+ if (creationEvidence != null && !CurrentDomain.IsLegacyCasPolicyEnabled)
+ {
+ if (creationDomainSetup == null || creationDomainSetup.ApplicationTrust == null)
+ {
+ // We allow non-null evidence in CAS mode to support the common pattern of passing in
+ // AppDomain.CurrentDomain.Evidence. Since the zone evidence must have been changed
+ // if the user has any expectation of sandboxing the domain under legacy CAS policy,
+ // we use a zone comparison to check for this pattern. A strict comparison will not
+ // work, since MSDN samples for creating a domain show using a modified version of the
+ // current domain's evidence and we would capturce people who copied and pasted these
+ // samples without intending to sandbox.
+ Zone creatorsZone = CurrentDomain.EvidenceNoDemand.GetHostEvidence<Zone>();
+ SecurityZone creatorsSecurityZone = creatorsZone != null ?
+ creatorsZone.SecurityZone :
+ SecurityZone.MyComputer;
+
+ Zone suppliedZone = creationEvidence.GetHostEvidence<Zone>();
+ if (suppliedZone != null)
+ {
+ if (suppliedZone.SecurityZone != creatorsSecurityZone &&
+ suppliedZone.SecurityZone != SecurityZone.MyComputer)
+ {
+ throw new NotSupportedException(Environment.GetResourceString("NotSupported_RequiresCasPolicyImplicit"));
+ }
+ }
+ }
+ }
+ }
+
+#if FEATURE_CAS_POLICY
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [SecurityPermissionAttribute( SecurityAction.Demand, ControlAppDomain = true )]
+ public static AppDomain CreateDomain(String friendlyName,
+ Evidence securityInfo,
+ AppDomainSetup info)
+ {
+ return InternalCreateDomain(friendlyName, securityInfo, info);
+ }
+#else
+ internal static AppDomain CreateDomain(String friendlyName,
+ Evidence securityInfo,
+ AppDomainSetup info)
+ {
+ return InternalCreateDomain(friendlyName, securityInfo, info);
+ }
+#endif
+
+ [System.Security.SecurityCritical] // auto-generated
+ internal static AppDomain InternalCreateDomain(String friendlyName,
+ Evidence securityInfo,
+ AppDomainSetup info)
+ {
+ if (friendlyName == null)
+ throw new ArgumentNullException("friendlyName", Environment.GetResourceString("ArgumentNull_String"));
+
+ Contract.EndContractBlock();
+
+ AppDomain.CheckCreateDomainSupported();
+
+ if (info == null)
+ info = new AppDomainSetup();
+ if (info.TargetFrameworkName == null)
+ info.TargetFrameworkName = AppDomain.CurrentDomain.GetTargetFrameworkName();
+
+ AppDomainManager domainManager = AppDomain.CurrentDomain.DomainManager;
+ if (domainManager != null)
+ return domainManager.CreateDomain(friendlyName, securityInfo, info);
+
+ // No AppDomainManager is set up for this domain
+
+ // If evidence is provided, we check to make sure that is allowed.
+ if (securityInfo != null)
+ {
+ new SecurityPermission(SecurityPermissionFlag.ControlEvidence).Demand();
+
+ // If we're potentially trying to sandbox without using a homogenous domain, we need to reject
+ // the domain creation.
+ CheckDomainCreationEvidence(info, securityInfo);
+ }
+
+ return nCreateDomain(friendlyName,
+ info,
+ securityInfo,
+ securityInfo == null ? AppDomain.CurrentDomain.InternalEvidence : null,
+ AppDomain.CurrentDomain.GetSecurityDescriptor());
+ }
+#endif // FEATURE_REMOTING
+
+#if FEATURE_CAS_POLICY
+
+ public static AppDomain CreateDomain (string friendlyName,
+ Evidence securityInfo,
+ AppDomainSetup info,
+ PermissionSet grantSet,
+ params StrongName[] fullTrustAssemblies)
+ {
+ if (info == null)
+ throw new ArgumentNullException("info");
+ if (info.ApplicationBase == null)
+ throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_AppDomainSandboxAPINeedsExplicitAppBase"));
+ Contract.EndContractBlock();
+
+ if (fullTrustAssemblies == null)
+ {
+ fullTrustAssemblies = new StrongName[0];
+ }
+
+ info.ApplicationTrust = new ApplicationTrust(grantSet, fullTrustAssemblies);
+ return CreateDomain(friendlyName, securityInfo, info);
+ }
+
+ public static AppDomain CreateDomain(String friendlyName,
+ Evidence securityInfo, // Optional
+ String appBasePath,
+ String appRelativeSearchPath,
+ bool shadowCopyFiles,
+ AppDomainInitializer adInit,
+ string[] adInitArgs)
+ {
+ AppDomainSetup info = new AppDomainSetup();
+ info.ApplicationBase = appBasePath;
+ info.PrivateBinPath = appRelativeSearchPath;
+ info.AppDomainInitializer=adInit;
+ info.AppDomainInitializerArguments=adInitArgs;
+ if(shadowCopyFiles)
+ info.ShadowCopyFiles = "true";
+
+ return CreateDomain(friendlyName,
+ securityInfo,
+ info);
+ }
+#endif // FEATURE_CAS_POLICY
+
+#if FEATURE_CORECLR
+ [System.Security.SecurityCritical]
+ [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
+ [SuppressUnmanagedCodeSecurity]
+ private static extern void nSetNativeDllSearchDirectories(string paths);
+#endif
+
+ [System.Security.SecurityCritical] // auto-generated
+ private void SetupFusionStore(AppDomainSetup info, AppDomainSetup oldInfo)
+ {
+ Contract.Requires(info != null);
+
+#if FEATURE_FUSION
+ if (oldInfo == null) {
+
+ // Create the application base and configuration file from the imagelocation
+ // passed in or use the Win32 Image name.
+ if(info.Value[(int) AppDomainSetup.LoaderInformation.ApplicationBaseValue] == null ||
+ info.Value[(int) AppDomainSetup.LoaderInformation.ConfigurationFileValue] == null )
+#else
+ if (info.ApplicationBase == null)
+#endif
+
+ {
+#if FEATURE_FUSION
+ AppDomain defaultDomain = GetDefaultDomain();
+ if (this == defaultDomain) {
+ // The default domain gets its defaults from the main process.
+ info.SetupDefaults(RuntimeEnvironment.GetModuleFileName(), imageLocationAlreadyNormalized : true);
+ }
+ else {
+ // Other domains get their defaults from the default domain. This way, a host process
+ // can use AppDomainManager to set up the defaults for every domain created in the process.
+ if (info.Value[(int) AppDomainSetup.LoaderInformation.ConfigurationFileValue] == null)
+ info.ConfigurationFile = defaultDomain.FusionStore.Value[(int) AppDomainSetup.LoaderInformation.ConfigurationFileValue];
+ if (info.Value[(int) AppDomainSetup.LoaderInformation.ApplicationBaseValue] == null)
+ info.ApplicationBase = defaultDomain.FusionStore.Value[(int) AppDomainSetup.LoaderInformation.ApplicationBaseValue];
+ if (info.Value[(int) AppDomainSetup.LoaderInformation.ApplicationNameValue] == null)
+ info.ApplicationName = defaultDomain.FusionStore.Value[(int) AppDomainSetup.LoaderInformation.ApplicationNameValue];
+ }
+#else
+ info.SetupDefaults(RuntimeEnvironment.GetModuleFileName(), imageLocationAlreadyNormalized : true);
+#endif
+
+ }
+
+#if FEATURE_FUSION
+ // If there is no relative path then check the
+ // environment
+ if(info.Value[(int) AppDomainSetup.LoaderInformation.PrivateBinPathValue] == null)
+ info.PrivateBinPath = Environment.nativeGetEnvironmentVariable(AppDomainSetup.PrivateBinPathEnvironmentVariable);
+
+ // Add the developer path if it exists on this
+ // machine.
+ if(info.DeveloperPath == null)
+ info.DeveloperPath = RuntimeEnvironment.GetDeveloperPath();
+
+ }
+
+ // Set up the fusion context
+ IntPtr fusionContext = GetFusionContext();
+ info.SetupFusionContext(fusionContext, oldInfo);
+
+ // Set loader optimization policy
+#else
+#if FEATURE_VERSIONING
+ nCreateContext();
+#endif // FEATURE_VERSIONING
+#endif // FEATURE_FUSION
+
+#if FEATURE_LOADER_OPTIMIZATION
+ if (info.LoaderOptimization != LoaderOptimization.NotSpecified || (oldInfo != null && info.LoaderOptimization != oldInfo.LoaderOptimization))
+ UpdateLoaderOptimization(info.LoaderOptimization);
+#endif
+
+
+
+ // This must be the last action taken
+ _FusionStore = info;
+ }
+
+ // used to package up evidence, so it can be serialized
+ // for the call to InternalRemotelySetupRemoteDomain
+ [Serializable]
+ private class EvidenceCollection
+ {
+ public Evidence ProvidedSecurityInfo;
+ public Evidence CreatorsSecurityInfo;
+ }
+
+ private static void RunInitializer(AppDomainSetup setup)
+ {
+ if (setup.AppDomainInitializer!=null)
+ {
+ string[] args=null;
+ if (setup.AppDomainInitializerArguments!=null)
+ args=(string[])setup.AppDomainInitializerArguments.Clone();
+ setup.AppDomainInitializer(args);
+ }
+ }
+
+ // Used to switch into other AppDomain and call SetupRemoteDomain.
+ // We cannot simply call through the proxy, because if there
+ // are any remoting sinks registered, they can add non-mscorlib
+ // objects to the message (causing an assembly load exception when
+ // we try to deserialize it on the other side)
+ [System.Security.SecurityCritical] // auto-generated
+ private static object PrepareDataForSetup(String friendlyName,
+ AppDomainSetup setup,
+ Evidence providedSecurityInfo,
+ Evidence creatorsSecurityInfo,
+ IntPtr parentSecurityDescriptor,
+ string sandboxName,
+ string[] propertyNames,
+ string[] propertyValues)
+ {
+ byte[] serializedEvidence = null;
+ bool generateDefaultEvidence = false;
+
+#if FEATURE_CAS_POLICY
+ // serialize evidence
+ EvidenceCollection evidenceCollection = null;
+
+ if (providedSecurityInfo != null || creatorsSecurityInfo != null)
+ {
+ // If we're just passing through AppDomain.CurrentDomain.Evidence, and that evidence is just
+ // using the standard runtime AppDomainEvidenceFactory, don't waste time serializing it and
+ // deserializing it back -- instead, we can recreate a new AppDomainEvidenceFactory in the new
+ // domain. We only want to do this if there is no HostSecurityManager, otherwise the
+ // HostSecurityManager could have added additional evidence on top of our standard factory.
+ HostSecurityManager hsm = CurrentDomain.DomainManager != null ? CurrentDomain.DomainManager.HostSecurityManager : null;
+ bool hostMayContributeEvidence = hsm != null &&
+ hsm.GetType() != typeof(HostSecurityManager) &&
+ (hsm.Flags & HostSecurityManagerOptions.HostAppDomainEvidence) == HostSecurityManagerOptions.HostAppDomainEvidence;
+ if (!hostMayContributeEvidence)
+ {
+ if (providedSecurityInfo != null &&
+ providedSecurityInfo.IsUnmodified &&
+ providedSecurityInfo.Target != null &&
+ providedSecurityInfo.Target is AppDomainEvidenceFactory)
+ {
+ providedSecurityInfo = null;
+ generateDefaultEvidence = true;
+ }
+ if (creatorsSecurityInfo != null &&
+ creatorsSecurityInfo.IsUnmodified &&
+ creatorsSecurityInfo.Target != null &&
+ creatorsSecurityInfo.Target is AppDomainEvidenceFactory)
+ {
+ creatorsSecurityInfo = null;
+ generateDefaultEvidence = true;
+ }
+ }
+ }
+ if ((providedSecurityInfo != null) ||
+ (creatorsSecurityInfo != null)) {
+ evidenceCollection = new EvidenceCollection();
+ evidenceCollection.ProvidedSecurityInfo = providedSecurityInfo;
+ evidenceCollection.CreatorsSecurityInfo = creatorsSecurityInfo;
+ }
+
+ if (evidenceCollection != null) {
+ serializedEvidence =
+ CrossAppDomainSerializer.SerializeObject(evidenceCollection).GetBuffer();
+ }
+#endif // FEATURE_CAS_POLICY
+
+ AppDomainInitializerInfo initializerInfo = null;
+ if (setup!=null && setup.AppDomainInitializer!=null)
+ initializerInfo=new AppDomainInitializerInfo(setup.AppDomainInitializer);
+
+ // will travel x-Ad, drop non-agile data
+ AppDomainSetup newSetup = new AppDomainSetup(setup, false);
+
+#if FEATURE_CORECLR
+ // Remove the special AppDomainCompatSwitch entries from the set of name value pairs
+ // And add them to the AppDomainSetup
+ //
+ // This is only supported on CoreCLR through ICLRRuntimeHost2.CreateAppDomainWithManager
+ // Desktop code should use System.AppDomain.CreateDomain() or
+ // System.AppDomainManager.CreateDomain() and add the flags to the AppDomainSetup
+ List<String> compatList = new List<String>();
+
+ if(propertyNames!=null && propertyValues != null)
+ {
+ for (int i=0; i<propertyNames.Length; i++)
+ {
+ if(String.Compare(propertyNames[i], "AppDomainCompatSwitch", StringComparison.OrdinalIgnoreCase) == 0)
+ {
+ compatList.Add(propertyValues[i]);
+ propertyNames[i] = null;
+ propertyValues[i] = null;
+ }
+
+ }
+
+ if (compatList.Count > 0)
+ {
+ newSetup.SetCompatibilitySwitches(compatList);
+ }
+ }
+#endif // FEATURE_CORECLR
+
+
+ return new Object[]
+ {
+ friendlyName,
+ newSetup,
+ parentSecurityDescriptor,
+ generateDefaultEvidence,
+ serializedEvidence,
+ initializerInfo,
+ sandboxName,
+ propertyNames,
+ propertyValues
+ };
+ } // PrepareDataForSetup
+
+
+ [System.Security.SecurityCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.NoInlining)]
+ private static Object Setup(Object arg)
+ {
+ Contract.Requires(arg != null && arg is Object[]);
+ Contract.Requires(((Object[])arg).Length >= 8);
+
+ Object[] args=(Object[])arg;
+ String friendlyName = (String)args[0];
+ AppDomainSetup setup = (AppDomainSetup)args[1];
+ IntPtr parentSecurityDescriptor = (IntPtr)args[2];
+ bool generateDefaultEvidence = (bool)args[3];
+ byte[] serializedEvidence = (byte[])args[4];
+ AppDomainInitializerInfo initializerInfo = (AppDomainInitializerInfo)args[5];
+ string sandboxName = (string)args[6];
+ string[] propertyNames = (string[])args[7]; // can contain null elements
+ string[] propertyValues = (string[])args[8]; // can contain null elements
+ // extract evidence
+ Evidence providedSecurityInfo = null;
+ Evidence creatorsSecurityInfo = null;
+
+
+ AppDomain ad = AppDomain.CurrentDomain;
+ AppDomainSetup newSetup=new AppDomainSetup(setup,false);
+
+ if(propertyNames!=null && propertyValues != null)
+ {
+#if FEATURE_CORECLR
+ StringBuilder normalisedAppPathList = null;
+#endif // FEATURE_CORECLR
+ for (int i=0; i<propertyNames.Length; i++)
+ {
+ if(propertyNames[i]=="APPBASE") // make sure in sync with Fusion
+ {
+ if(propertyValues[i]==null)
+ throw new ArgumentNullException("APPBASE");
+
+ if (Path.IsRelative(propertyValues[i]))
+ throw new ArgumentException( Environment.GetResourceString( "Argument_AbsolutePathRequired" ) );
+
+ newSetup.ApplicationBase = NormalizePath(propertyValues[i], fullCheck: true);
+
+ }
+#if FEATURE_CAS_POLICY
+ else if(propertyNames[i]=="LOCATION_URI" && providedSecurityInfo==null)
+ {
+ providedSecurityInfo=new Evidence();
+ providedSecurityInfo.AddHostEvidence(new Url(propertyValues[i]));
+ ad.SetDataHelper(propertyNames[i],propertyValues[i],null);
+ }
+#endif // FEATURE_CAS_POLICY
+#if FEATURE_LOADER_OPTIMIZATION
+ else
+ if(propertyNames[i]=="LOADER_OPTIMIZATION")
+ {
+ if(propertyValues[i]==null)
+ throw new ArgumentNullException("LOADER_OPTIMIZATION");
+
+ switch(propertyValues[i])
+ {
+ case "SingleDomain": newSetup.LoaderOptimization=LoaderOptimization.SingleDomain;break;
+ case "MultiDomain": newSetup.LoaderOptimization=LoaderOptimization.MultiDomain;break;
+ case "MultiDomainHost": newSetup.LoaderOptimization=LoaderOptimization.MultiDomainHost;break;
+ case "NotSpecified": newSetup.LoaderOptimization=LoaderOptimization.NotSpecified;break;
+ default: throw new ArgumentException(Environment.GetResourceString("Argument_UnrecognizedLoaderOptimization"), "LOADER_OPTIMIZATION");
+ }
+ }
+#endif // FEATURE_LOADER_OPTIMIZATION
+#if FEATURE_CORECLR
+ else
+ if(propertyNames[i]=="NATIVE_DLL_SEARCH_DIRECTORIES")
+ {
+ if(propertyValues[i]==null)
+ throw new ArgumentNullException("NATIVE_DLL_SEARCH_DIRECTORIES");
+ ad.SetDataHelper(propertyNames[i],propertyValues[i],null);
+ string paths = (string)propertyValues[i];
+ if( paths.Length==0 )
+ continue;
+ nSetNativeDllSearchDirectories(paths);
+ }
+ else
+ if(propertyNames[i]=="TRUSTED_PLATFORM_ASSEMBLIES" ||
+ propertyNames[i]=="PLATFORM_RESOURCE_ROOTS" ||
+ propertyNames[i]=="APP_PATHS" ||
+ propertyNames[i]=="APP_NI_PATHS")
+ {
+ string values = propertyValues[i];
+ if(values==null)
+ throw new ArgumentNullException(propertyNames[i]);
+
+ int estimatedLength = values.Length + 1; // +1 for extra separator temporarily added at end
+ if (normalisedAppPathList == null) {
+ normalisedAppPathList = new StringBuilder(estimatedLength);
+ }
+ else {
+ normalisedAppPathList.Clear();
+ if (normalisedAppPathList.Capacity < estimatedLength)
+ normalisedAppPathList.Capacity = estimatedLength;
+ }
+
+ for (int pos = 0; pos < values.Length; pos++)
+ {
+ string path;
+
+ int nextPos = values.IndexOf(Path.PathSeparator, pos);
+ if (nextPos == -1)
+ {
+ path = values.Substring(pos);
+ pos = values.Length - 1;
+ }
+ else
+ {
+ path = values.Substring(pos, nextPos - pos);
+ pos = nextPos;
+ }
+
+ if( path.Length==0 ) // skip empty dirs
+ continue;
+
+ if (Path.IsRelative(path))
+ throw new ArgumentException( Environment.GetResourceString( "Argument_AbsolutePathRequired" ) );
+
+ string appPath = NormalizePath(path, fullCheck: true);
+ normalisedAppPathList.Append(appPath);
+ normalisedAppPathList.Append(Path.PathSeparator);
+ }
+ // Strip the last separator
+ if (normalisedAppPathList.Length > 0)
+ {
+ normalisedAppPathList.Remove(normalisedAppPathList.Length - 1, 1);
+ }
+ ad.SetDataHelper(propertyNames[i],normalisedAppPathList.ToString(),null); // not supported by fusion, so set explicitly
+ }
+ else
+ if(propertyNames[i]!= null)
+ {
+ ad.SetDataHelper(propertyNames[i],propertyValues[i],null); // just propagate
+ }
+#endif
+
+ }
+ }
+
+#if !FEATURE_CORECLR
+ AppDomainSortingSetupInfo sortingSetup = newSetup._AppDomainSortingSetupInfo;
+
+ if(sortingSetup != null)
+ {
+ if(sortingSetup._pfnIsNLSDefinedString == IntPtr.Zero || sortingSetup._pfnCompareStringEx == IntPtr.Zero || sortingSetup._pfnLCMapStringEx == IntPtr.Zero || sortingSetup._pfnFindNLSStringEx == IntPtr.Zero
+ || sortingSetup._pfnCompareStringOrdinal == IntPtr.Zero || sortingSetup._pfnGetNLSVersionEx == IntPtr.Zero)
+ {
+
+ if(!(sortingSetup._pfnIsNLSDefinedString == IntPtr.Zero && sortingSetup._pfnCompareStringEx == IntPtr.Zero && sortingSetup._pfnLCMapStringEx == IntPtr.Zero && sortingSetup._pfnFindNLSStringEx == IntPtr.Zero
+ && sortingSetup._pfnCompareStringOrdinal == IntPtr.Zero && sortingSetup._pfnGetNLSVersionEx == IntPtr.Zero))
+ {
+ // Some functions defined but not all of them.
+ throw new ArgumentException(Environment.GetResourceString("ArgumentException_NotAllCustomSortingFuncsDefined"));
+ }
+
+ }
+ }
+#endif
+
+ ad.SetupFusionStore(newSetup, null); // makes FusionStore a ref to newSetup
+
+ // technically, we don't need this, newSetup refers to the same object as FusionStore
+ // but it's confusing since it isn't immediately obvious whether we have a ref or a copy
+ AppDomainSetup adSetup = ad.FusionStore;
+
+#if FEATURE_CORECLR
+ adSetup.InternalSetApplicationTrust(sandboxName);
+#endif // FEATURE_CORECLR
+
+#if !FEATURE_CORECLR // not used by coreclr
+ if (serializedEvidence != null) {
+ EvidenceCollection evidenceCollection = (EvidenceCollection)
+ CrossAppDomainSerializer.DeserializeObject(new MemoryStream(serializedEvidence));
+ providedSecurityInfo = evidenceCollection.ProvidedSecurityInfo;
+ creatorsSecurityInfo = evidenceCollection.CreatorsSecurityInfo;
+ }
+#endif
+ // set up the friendly name
+ ad.nSetupFriendlyName(friendlyName);
+
+#if FEATURE_COMINTEROP
+ if (setup != null && setup.SandboxInterop)
+ {
+ ad.nSetDisableInterfaceCache();
+ }
+#endif // FEATURE_COMINTEROP
+
+ // set up the AppDomainManager for this domain and initialize security.
+ if (adSetup.AppDomainManagerAssembly != null && adSetup.AppDomainManagerType != null)
+ {
+ ad.SetAppDomainManagerType(adSetup.AppDomainManagerAssembly, adSetup.AppDomainManagerType);
+ }
+
+#if FEATURE_APTCA
+ // set any conditial-aptca visible assemblies
+ ad.PartialTrustVisibleAssemblies = adSetup.PartialTrustVisibleAssemblies;
+#endif // FEATURE_APTCA
+
+ ad.CreateAppDomainManager(); // could modify FusionStore's object
+ ad.InitializeDomainSecurity(providedSecurityInfo,
+ creatorsSecurityInfo,
+ generateDefaultEvidence,
+ parentSecurityDescriptor,
+ true);
+
+ // can load user code now
+ if(initializerInfo!=null)
+ adSetup.AppDomainInitializer=initializerInfo.Unwrap();
+ RunInitializer(adSetup);
+
+ // Activate the application if needed.
+#if FEATURE_CLICKONCE
+ ObjectHandle oh = null;
+ if (adSetup.ActivationArguments != null && adSetup.ActivationArguments.ActivateInstance)
+ oh = Activator.CreateInstance(ad.ActivationContext);
+ return RemotingServices.MarshalInternal(oh, null, null);
+#else
+ return null;
+#endif // FEATURE_CLICKONCE
+ }
+
+ [SecuritySafeCritical]
+ internal static string NormalizePath(string path, bool fullCheck)
+ {
+#if FEATURE_PATHCOMPAT
+ // Appcontext switches can't currently be safely hit during AppDomain bringup
+ return Path.LegacyNormalizePath(
+ path: path,
+ fullCheck: fullCheck,
+ maxPathLength: PathInternal.MaxShortPath,
+ expandShortPaths: true);
+#else
+ return Path.NormalizePath(
+ path: path,
+ fullCheck: fullCheck,
+ expandShortPaths: true);
+#endif
+ }
+
+#if FEATURE_APTCA
+ // Called from DomainAssembly in Conditional APTCA cases
+ [PermissionSet(SecurityAction.Assert, Unrestricted = true)]
+ [SecuritySafeCritical]
+ private bool IsAssemblyOnAptcaVisibleList(RuntimeAssembly assembly)
+ {
+ if (_aptcaVisibleAssemblies == null)
+ return false;
+
+ AssemblyName assemblyName = assembly.GetName();
+ String name = assemblyName.GetNameWithPublicKey();
+
+ name = name.ToUpperInvariant();
+
+ int index = Array.BinarySearch<string>(_aptcaVisibleAssemblies, name,
+ StringComparer.OrdinalIgnoreCase);
+ return (index >=0);
+
+ }
+
+ //Used to binary search the list of C-APTCA strings for an AssemblyName. It compares assembly name
+ //and public key token.
+ private class CAPTCASearcher : IComparer
+ {
+ int IComparer.Compare(object /*string*/lhs, object /*AssemblyName*/rhs)
+ {
+ AssemblyName captcaEntry = new AssemblyName((string)lhs);
+ AssemblyName comparand = (AssemblyName)rhs;
+ int nameComp = string.Compare(captcaEntry.Name,
+ comparand.Name,
+ StringComparison.OrdinalIgnoreCase);
+ if (nameComp != 0)
+ {
+ return nameComp;
+ }
+
+ //simple names match. Compare public key tokens.
+ byte[] lhsKey = captcaEntry.GetPublicKeyToken();
+ byte[] rhsKey = comparand.GetPublicKeyToken();
+
+ // We require both sides have a public key token
+ if (lhsKey == null)
+ {
+ return -1;
+ }
+ if (rhsKey == null)
+ {
+ return 1;
+ }
+ if (lhsKey.Length < rhsKey.Length)
+ {
+ return -1;
+ }
+ if (lhsKey.Length > rhsKey.Length)
+ {
+ return 1;
+ }
+
+ // Tokens seem valid - make sure the compare correctly
+ for (int i = 0; i < lhsKey.Length; ++i)
+ {
+ byte lhsByte = lhsKey[i];
+ byte rhsByte = rhsKey[i];
+
+ if (lhsByte < rhsByte)
+ {
+ return -1;
+ }
+ if (lhsByte > rhsByte)
+ {
+ return 1;
+ }
+ }
+
+ //They match.
+ return 0;
+ }
+ }
+
+ [System.Security.SecurityCritical]
+ private unsafe bool IsAssemblyOnAptcaVisibleListRaw(char * namePtr, int nameLen, byte * keyTokenPtr,
+ int keyTokenLen)
+ {
+ //This version is used for checking ngen dependencies against the C-APTCA list. It lets us
+ //reject ngen images that depend on an assembly that has been disabled in the current domain.
+ //Since we only have the public key token in the ngen image, we'll check against that. The
+ //rationale is that if you have a public key token collision in your process you have many
+ //problems. Since the source of this public key token is an ngen image for a full trust
+ //assembly, there is essentially no risk to the reduced check.
+ if (_aptcaVisibleAssemblies == null)
+ return false;
+
+ string name = new string(namePtr, 0, nameLen);
+ byte[] keyToken = new byte[keyTokenLen];
+ for( int i = 0; i < keyToken.Length; ++i )
+ keyToken[i] = keyTokenPtr[i];
+
+ AssemblyName asmName = new AssemblyName();
+ asmName.Name = name;
+ asmName.SetPublicKeyToken(keyToken);
+ try
+ {
+ int index = Array.BinarySearch(_aptcaVisibleAssemblies, asmName, new CAPTCASearcher());
+ return (index >= 0);
+ }
+ catch (InvalidOperationException) { /* Can happen for poorly formed assembly names */ return false; }
+ }
+
+#endif
+
+ // This routine is called from unmanaged code to
+ // set the default fusion context.
+ [System.Security.SecurityCritical] // auto-generated
+ private void SetupDomain(bool allowRedirects, String path, String configFile, String[] propertyNames, String[] propertyValues)
+ {
+ // It is possible that we could have multiple threads initializing
+ // the default domain. We will just take the winner of these two.
+ // (eg. one thread doing a com call and another doing attach for IJW)
+ lock (this) {
+ if(_FusionStore == null) {
+ AppDomainSetup setup = new AppDomainSetup();
+#if FEATURE_CORECLR
+ // always use internet permission set
+ setup.InternalSetApplicationTrust("Internet");
+#endif // FEATURE_CORECLR
+#if FEATURE_FUSION
+ setup.SetupDefaults(RuntimeEnvironment.GetModuleFileName(), imageLocationAlreadyNormalized : true);
+ if(path != null)
+ setup.Value[(int) AppDomainSetup.LoaderInformation.ApplicationBaseValue] = path;
+ if(configFile != null)
+ setup.Value[(int) AppDomainSetup.LoaderInformation.ConfigurationFileValue] = configFile;
+
+ // Default fusion context starts with binding redirects turned off.
+ if (!allowRedirects)
+ setup.DisallowBindingRedirects = true;
+#endif
+
+#if !FEATURE_CORECLR
+ if (propertyNames != null) {
+ BCLDebug.Assert(propertyValues != null, "propertyValues != null");
+ BCLDebug.Assert(propertyNames.Length == propertyValues.Length, "propertyNames.Length == propertyValues.Length");
+
+ for (int i = 0; i < propertyNames.Length; ++i) {
+ if (String.Equals(propertyNames[i], "PARTIAL_TRUST_VISIBLE_ASSEMBLIES", StringComparison.Ordinal)) {
+ // The value of the PARTIAL_TRUST_VISIBLE_ASSEMBLIES property is a semicolon
+ // delimited list of assembly names to add to the
+ // PartialTrustVisibleAssemblies setting of the domain setup
+ if (propertyValues[i] != null) {
+ if (propertyValues[i].Length > 0) {
+ setup.PartialTrustVisibleAssemblies = propertyValues[i].Split(';');
+ }
+ else {
+ setup.PartialTrustVisibleAssemblies = new string[0];
+ }
+ }
+ }
+ else {
+ // In v4 we disallow anything but PARTIAL_TRUST_VISIBLE_ASSEMBLIES to come
+ // in via the default domain properties. That restriction could be lifted
+ // in a future release, at which point this assert should be removed.
+ //
+ // This should be kept in sync with the real externally facing filter code
+ // in CorHost2::SetPropertiesForDefaultAppDomain
+ BCLDebug.Assert(false, "Unexpected default domain property");
+ }
+ }
+ }
+#endif // !FEATURE_CORECLR
+
+#if FEATURE_APTCA
+ // Propigate the set of conditional APTCA assemblies that will be used in the default
+ // domain onto the domain itself and also into the VM
+ PartialTrustVisibleAssemblies = setup.PartialTrustVisibleAssemblies;
+#endif // FEATURE_APTCA
+
+ SetupFusionStore(setup, null);
+ }
+ }
+ }
+
+#if FEATURE_LOADER_OPTIMIZATION
+ [System.Security.SecurityCritical] // auto-generated
+ private void SetupLoaderOptimization(LoaderOptimization policy)
+ {
+ if(policy != LoaderOptimization.NotSpecified) {
+ Contract.Assert(FusionStore.LoaderOptimization == LoaderOptimization.NotSpecified,
+ "It is illegal to change the Loader optimization on a domain");
+
+ FusionStore.LoaderOptimization = policy;
+ UpdateLoaderOptimization(FusionStore.LoaderOptimization);
+ }
+ }
+#endif
+
+#if FEATURE_FUSION
+ [System.Security.SecurityCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ internal extern IntPtr GetFusionContext();
+#endif // FEATURE_FUSION
+
+ [System.Security.SecurityCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ internal extern IntPtr GetSecurityDescriptor();
+
+#if FEATURE_REMOTING
+ [System.Security.SecurityCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ internal static extern AppDomain nCreateDomain(String friendlyName,
+ AppDomainSetup setup,
+ Evidence providedSecurityInfo,
+ Evidence creatorsSecurityInfo,
+ IntPtr parentSecurityDescriptor);
+
+ [System.Security.SecurityCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ internal static extern ObjRef nCreateInstance(String friendlyName,
+ AppDomainSetup setup,
+ Evidence providedSecurityInfo,
+ Evidence creatorsSecurityInfo,
+ IntPtr parentSecurityDescriptor);
+#endif
+
+ [SecurityCritical]
+ private void SetupDomainSecurity(Evidence appDomainEvidence,
+ IntPtr creatorsSecurityDescriptor,
+ bool publishAppDomain)
+ {
+ Evidence stackEvidence = appDomainEvidence;
+ SetupDomainSecurity(GetNativeHandle(),
+ JitHelpers.GetObjectHandleOnStack(ref stackEvidence),
+ creatorsSecurityDescriptor,
+ publishAppDomain);
+
+ }
+
+ [SecurityCritical]
+ [SuppressUnmanagedCodeSecurity]
+ [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
+ private static extern void SetupDomainSecurity(AppDomainHandle appDomain,
+ ObjectHandleOnStack appDomainEvidence,
+ IntPtr creatorsSecurityDescriptor,
+ [MarshalAs(UnmanagedType.Bool)] bool publishAppDomain);
+
+ [System.Security.SecurityCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ private extern void nSetupFriendlyName(string friendlyName);
+
+#if FEATURE_COMINTEROP
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ private extern void nSetDisableInterfaceCache();
+#endif // FEATURE_COMINTEROP
+
+#if FEATURE_LOADER_OPTIMIZATION
+ [System.Security.SecurityCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ internal extern void UpdateLoaderOptimization(LoaderOptimization optimization);
+#endif
+
+#if FEATURE_FUSION
+ //
+ // This is just designed to prevent compiler warnings.
+ // This field is used from native, but we need to prevent the compiler warnings.
+ //
+
+ [System.Security.SecurityCritical] // auto-generated_required
+ [Obsolete("AppDomain.SetShadowCopyPath has been deprecated. Please investigate the use of AppDomainSetup.ShadowCopyDirectories instead. http://go.microsoft.com/fwlink/?linkid=14202")]
+ public void SetShadowCopyPath(String path)
+ {
+ InternalSetShadowCopyPath(path);
+ }
+
+ [System.Security.SecurityCritical] // auto-generated_required
+ [Obsolete("AppDomain.SetShadowCopyFiles has been deprecated. Please investigate the use of AppDomainSetup.ShadowCopyFiles instead. http://go.microsoft.com/fwlink/?linkid=14202")]
+ public void SetShadowCopyFiles()
+ {
+ InternalSetShadowCopyFiles();
+ }
+
+ [System.Security.SecurityCritical] // auto-generated_required
+ [Obsolete("AppDomain.SetDynamicBase has been deprecated. Please investigate the use of AppDomainSetup.DynamicBase instead. http://go.microsoft.com/fwlink/?linkid=14202")]
+ public void SetDynamicBase(String path)
+ {
+ InternalSetDynamicBase(path);
+ }
+#endif // FEATURE_FUSION
+
+ public AppDomainSetup SetupInformation
+ {
+ get {
+ return new AppDomainSetup(FusionStore,true);
+ }
+ }
+
+#if FEATURE_FUSION
+ [System.Security.SecurityCritical] // auto-generated
+ internal void InternalSetShadowCopyPath(String path)
+ {
+ if (path != null)
+ {
+ IntPtr fusionContext = GetFusionContext();
+ AppDomainSetup.UpdateContextProperty(fusionContext, AppDomainSetup.ShadowCopyDirectoriesKey, path);
+ }
+ FusionStore.ShadowCopyDirectories = path;
+ }
+
+ [System.Security.SecurityCritical] // auto-generated
+ internal void InternalSetShadowCopyFiles()
+ {
+ IntPtr fusionContext = GetFusionContext();
+ AppDomainSetup.UpdateContextProperty(fusionContext, AppDomainSetup.ShadowCopyFilesKey, "true");
+ FusionStore.ShadowCopyFiles = "true";
+ }
+
+ [System.Security.SecurityCritical] // auto-generated
+ internal void InternalSetCachePath(String path)
+ {
+ FusionStore.CachePath = path;
+ if (FusionStore.Value[(int) AppDomainSetup.LoaderInformation.CachePathValue] != null)
+ {
+ IntPtr fusionContext = GetFusionContext();
+ AppDomainSetup.UpdateContextProperty(fusionContext, AppDomainSetup.CachePathKey,
+ FusionStore.Value[(int) AppDomainSetup.LoaderInformation.CachePathValue]);
+ }
+ }
+
+ [System.Security.SecurityCritical] // auto-generated
+ internal void InternalSetPrivateBinPath(String path)
+ {
+ IntPtr fusionContext = GetFusionContext();
+ AppDomainSetup.UpdateContextProperty(fusionContext, AppDomainSetup.PrivateBinPathKey, path);
+ FusionStore.PrivateBinPath = path;
+ }
+
+ [System.Security.SecurityCritical] // auto-generated
+ internal void InternalSetDynamicBase(String path)
+ {
+ FusionStore.DynamicBase = path;
+ if (FusionStore.Value[(int) AppDomainSetup.LoaderInformation.DynamicBaseValue] != null)
+ {
+ IntPtr fusionContext = GetFusionContext();
+ AppDomainSetup.UpdateContextProperty(fusionContext, AppDomainSetup.DynamicBaseKey,
+ FusionStore.Value[(int) AppDomainSetup.LoaderInformation.DynamicBaseValue]);
+ }
+ }
+#endif // FEATURE_FUSION
+
+ [System.Security.SecurityCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ internal extern String IsStringInterned(String str);
+
+ [System.Security.SecurityCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ internal extern String GetOrInternString(String str);
+
+ [SecurityCritical]
+ [SuppressUnmanagedCodeSecurity]
+ [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
+ private static extern void GetGrantSet(AppDomainHandle domain, ObjectHandleOnStack retGrantSet);
+
+#if FEATURE_CAS_POLICY
+ [SecurityCritical]
+ [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
+ [SuppressUnmanagedCodeSecurity]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ private static extern bool GetIsLegacyCasPolicyEnabled(AppDomainHandle domain);
+#endif // FEATURE_CAS_POLICY
+
+ public PermissionSet PermissionSet
+ {
+ // SecurityCritical because permissions can contain sensitive information such as paths
+ [SecurityCritical]
+ get
+ {
+ PermissionSet grantSet = null;
+ GetGrantSet(GetNativeHandle(), JitHelpers.GetObjectHandleOnStack(ref grantSet));
+
+ if (grantSet != null)
+ {
+ return grantSet.Copy();
+ }
+ else
+ {
+ return new PermissionSet(PermissionState.Unrestricted);
+ }
+ }
+ }
+
+ public bool IsFullyTrusted
+ {
+ [SecuritySafeCritical]
+ get
+ {
+ PermissionSet grantSet = null;
+ GetGrantSet(GetNativeHandle(), JitHelpers.GetObjectHandleOnStack(ref grantSet));
+
+ return grantSet == null || grantSet.IsUnrestricted();
+ }
+ }
+
+ public bool IsHomogenous
+ {
+ get
+ {
+ // Homogenous AppDomains always have an ApplicationTrust associated with them
+ return _IsFastFullTrustDomain || _applicationTrust != null;
+ }
+ }
+
+#if FEATURE_CAS_POLICY
+ internal bool IsLegacyCasPolicyEnabled
+ {
+ [SecuritySafeCritical]
+ get
+ {
+ return GetIsLegacyCasPolicyEnabled(GetNativeHandle());
+ }
+ }
+
+ // Determine what this homogenous domain thinks the grant set should be for a specific set of evidence
+ [SecuritySafeCritical]
+ internal PermissionSet GetHomogenousGrantSet(Evidence evidence)
+ {
+ Contract.Assert(evidence != null);
+ Contract.Assert(IsHomogenous);
+ Contract.Assert(evidence.GetHostEvidence<GacInstalled>() == null);
+
+ if (_IsFastFullTrustDomain)
+ {
+ return new PermissionSet(PermissionState.Unrestricted);
+ }
+
+ // If the ApplicationTrust's full trust list calls out the assembly, then it is fully trusted
+ if (evidence.GetDelayEvaluatedHostEvidence<StrongName>() != null)
+ {
+ foreach (StrongName fullTrustAssembly in ApplicationTrust.FullTrustAssemblies)
+ {
+ StrongNameMembershipCondition sn = new StrongNameMembershipCondition(fullTrustAssembly.PublicKey,
+ fullTrustAssembly.Name,
+ fullTrustAssembly.Version);
+
+ object usedEvidence = null;
+ if ((sn as IReportMatchMembershipCondition).Check(evidence, out usedEvidence))
+ {
+ IDelayEvaluatedEvidence delayEvidence = usedEvidence as IDelayEvaluatedEvidence;
+ if (usedEvidence != null)
+ {
+ delayEvidence.MarkUsed();
+ }
+
+ return new PermissionSet(PermissionState.Unrestricted);
+ }
+ }
+ }
+
+ // Otherwise, the grant set is just the default grant set
+ return ApplicationTrust.DefaultGrantSet.PermissionSet.Copy();
+ }
+#endif // FEATURE_CAS_POLICY
+
+ [System.Security.SecurityCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ private extern void nChangeSecurityPolicy();
+
+ [System.Security.SecurityCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ [ReliabilityContract(Consistency.MayCorruptAppDomain, Cer.MayFail)]
+ internal static extern void nUnload(Int32 domainInternal);
+
+ public Object CreateInstanceAndUnwrap(String assemblyName,
+ String typeName)
+ {
+ ObjectHandle oh = CreateInstance(assemblyName, typeName);
+ if (oh == null)
+ return null;
+
+ return oh.Unwrap();
+ } // CreateInstanceAndUnwrap
+
+
+ public Object CreateInstanceAndUnwrap(String assemblyName,
+ String typeName,
+ Object[] activationAttributes)
+ {
+ ObjectHandle oh = CreateInstance(assemblyName, typeName, activationAttributes);
+ if (oh == null)
+ return null;
+
+ return oh.Unwrap();
+ } // CreateInstanceAndUnwrap
+
+
+ [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceAndUnwrap which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
+ public Object CreateInstanceAndUnwrap(String assemblyName,
+ String typeName,
+ bool ignoreCase,
+ BindingFlags bindingAttr,
+ Binder binder,
+ Object[] args,
+ CultureInfo culture,
+ Object[] activationAttributes,
+ Evidence securityAttributes)
+ {
+#pragma warning disable 618
+ ObjectHandle oh = CreateInstance(assemblyName, typeName, ignoreCase, bindingAttr,
+ binder, args, culture, activationAttributes, securityAttributes);
+#pragma warning restore 618
+
+ if (oh == null)
+ return null;
+
+ return oh.Unwrap();
+ } // CreateInstanceAndUnwrap
+
+ public object CreateInstanceAndUnwrap(string assemblyName,
+ string typeName,
+ bool ignoreCase,
+ BindingFlags bindingAttr,
+ Binder binder,
+ object[] args,
+ CultureInfo culture,
+ object[] activationAttributes)
+ {
+ ObjectHandle oh = CreateInstance(assemblyName,
+ typeName,
+ ignoreCase,
+ bindingAttr,
+ binder,
+ args,
+ culture,
+ activationAttributes);
+
+ if (oh == null)
+ {
+ return null;
+ }
+
+ return oh.Unwrap();
+ }
+
+ // The first parameter should be named assemblyFile, but it was incorrectly named in a previous
+ // release, and the compatibility police won't let us change the name now.
+ public Object CreateInstanceFromAndUnwrap(String assemblyName,
+ String typeName)
+ {
+ ObjectHandle oh = CreateInstanceFrom(assemblyName, typeName);
+ if (oh == null)
+ return null;
+
+ return oh.Unwrap();
+ } // CreateInstanceAndUnwrap
+
+
+ // The first parameter should be named assemblyFile, but it was incorrectly named in a previous
+ // release, and the compatibility police won't let us change the name now.
+ public Object CreateInstanceFromAndUnwrap(String assemblyName,
+ String typeName,
+ Object[] activationAttributes)
+ {
+ ObjectHandle oh = CreateInstanceFrom(assemblyName, typeName, activationAttributes);
+ if (oh == null)
+ return null;
+
+ return oh.Unwrap();
+ } // CreateInstanceAndUnwrap
+
+
+ // The first parameter should be named assemblyFile, but it was incorrectly named in a previous
+ // release, and the compatibility police won't let us change the name now.
+ [Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFromAndUnwrap which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
+ public Object CreateInstanceFromAndUnwrap(String assemblyName,
+ String typeName,
+ bool ignoreCase,
+ BindingFlags bindingAttr,
+ Binder binder,
+ Object[] args,
+ CultureInfo culture,
+ Object[] activationAttributes,
+ Evidence securityAttributes)
+ {
+#pragma warning disable 618
+ ObjectHandle oh = CreateInstanceFrom(assemblyName, typeName, ignoreCase, bindingAttr,
+ binder, args, culture, activationAttributes, securityAttributes);
+#pragma warning restore 618
+
+ if (oh == null)
+ return null;
+
+ return oh.Unwrap();
+ } // CreateInstanceAndUnwrap
+
+ public object CreateInstanceFromAndUnwrap(string assemblyFile,
+ string typeName,
+ bool ignoreCase,
+ BindingFlags bindingAttr,
+ Binder binder,
+ object[] args,
+ CultureInfo culture,
+ object[] activationAttributes)
+ {
+ ObjectHandle oh = CreateInstanceFrom(assemblyFile,
+ typeName,
+ ignoreCase,
+ bindingAttr,
+ binder,
+ args,
+ culture,
+ activationAttributes);
+ if (oh == null)
+ {
+ return null;
+ }
+
+ return oh.Unwrap();
+ }
+
+ public Int32 Id
+ {
+ [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
+ get {
+ return GetId();
+ }
+ }
+
+ [System.Security.SecuritySafeCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
+ internal extern Int32 GetId();
+
+ internal const Int32 DefaultADID = 1;
+
+ public bool IsDefaultAppDomain()
+ {
+ if (GetId()==DefaultADID)
+ return true;
+ return false;
+ }
+
+#if FEATURE_FUSION
+ private static AppDomainSetup InternalCreateDomainSetup(String imageLocation)
+ {
+ int i = imageLocation.LastIndexOf('\\');
+
+ Contract.Assert(i != -1, "invalid image location");
+
+ AppDomainSetup info = new AppDomainSetup();
+ info.ApplicationBase = imageLocation.Substring(0, i+1);
+
+ StringBuilder config = new StringBuilder(imageLocation.Substring(i+1));
+ config.Append(AppDomainSetup.ConfigurationExtension);
+ info.ConfigurationFile = config.ToString();
+
+ return info;
+ }
+
+ // Used by the validator for testing but not executing an assembly
+ private static AppDomain InternalCreateDomain(String imageLocation)
+ {
+ AppDomainSetup info = InternalCreateDomainSetup(imageLocation);
+ return CreateDomain("Validator",
+ null,
+ info);
+ }
+
+ [System.Security.SecurityCritical] // auto-generated
+ private void InternalSetDomainContext(String imageLocation)
+ {
+ SetupFusionStore(InternalCreateDomainSetup(imageLocation), null);
+ }
+#endif
+
+#if FEATURE_APPDOMAIN_RESOURCE_MONITORING
+ [System.Security.SecurityCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ private static extern void nEnableMonitoring();
+
+ [System.Security.SecurityCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ private static extern bool nMonitoringIsEnabled();
+
+ // return -1 if ARM is not supported.
+ [System.Security.SecurityCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ private extern Int64 nGetTotalProcessorTime();
+
+ // return -1 if ARM is not supported.
+ [System.Security.SecurityCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ private extern Int64 nGetTotalAllocatedMemorySize();
+
+ // return -1 if ARM is not supported.
+ [System.Security.SecurityCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ private extern Int64 nGetLastSurvivedMemorySize();
+
+ // return -1 if ARM is not supported.
+ [System.Security.SecurityCritical] // auto-generated
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ private static extern Int64 nGetLastSurvivedProcessMemorySize();
+
+ public static bool MonitoringIsEnabled
+ {
+ [System.Security.SecurityCritical]
+ get {
+ return nMonitoringIsEnabled();
+ }
+
+ [System.Security.SecurityCritical]
+ set {
+ if (value == false)
+ {
+ throw new ArgumentException(Environment.GetResourceString("Arg_MustBeTrue"));
+ }
+ else
+ {
+ nEnableMonitoring();
+ }
+ }
+ }
+
+ // Gets the total processor time for this AppDomain.
+ // Throws NotSupportedException if ARM is not enabled.
+ public TimeSpan MonitoringTotalProcessorTime
+ {
+ [System.Security.SecurityCritical]
+ get {
+ Int64 i64ProcessorTime = nGetTotalProcessorTime();
+ if (i64ProcessorTime == -1)
+ {
+ throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_WithoutARM"));
+ }
+ return new TimeSpan(i64ProcessorTime);
+ }
+ }
+
+ // Gets the number of bytes allocated in this AppDomain since
+ // the AppDomain was created.
+ // Throws NotSupportedException if ARM is not enabled.
+ public Int64 MonitoringTotalAllocatedMemorySize
+ {
+ [System.Security.SecurityCritical]
+ get {
+ Int64 i64AllocatedMemory = nGetTotalAllocatedMemorySize();
+ if (i64AllocatedMemory == -1)
+ {
+ throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_WithoutARM"));
+ }
+ return i64AllocatedMemory;
+ }
+ }
+
+ // Gets the number of bytes survived after the last collection
+ // that are known to be held by this AppDomain. After a full
+ // collection this number is accurate and complete. After an
+ // ephemeral collection this number is potentially incomplete.
+ // Throws NotSupportedException if ARM is not enabled.
+ public Int64 MonitoringSurvivedMemorySize
+ {
+ [System.Security.SecurityCritical]
+ get {
+ Int64 i64LastSurvivedMemory = nGetLastSurvivedMemorySize();
+ if (i64LastSurvivedMemory == -1)
+ {
+ throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_WithoutARM"));
+ }
+ return i64LastSurvivedMemory;
+ }
+ }
+
+ // Gets the total bytes survived from the last collection. After
+ // a full collection this number represents the number of the bytes
+ // being held live in managed heaps. (This number should be close
+ // to the number obtained from GC.GetTotalMemory for a full collection.)
+ // After an ephemeral collection this number represents the number
+ // of bytes being held live in ephemeral generations.
+ // Throws NotSupportedException if ARM is not enabled.
+ public static Int64 MonitoringSurvivedProcessMemorySize
+ {
+ [System.Security.SecurityCritical]
+ get {
+ Int64 i64LastSurvivedProcessMemory = nGetLastSurvivedProcessMemorySize();
+ if (i64LastSurvivedProcessMemory == -1)
+ {
+ throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_WithoutARM"));
+ }
+ return i64LastSurvivedProcessMemory;
+ }
+ }
+#endif
+
+#if !FEATURE_CORECLR
+ // this method is required so Object.GetType is not made virtual by the compiler
+ // _AppDomain.GetType()
+ public new Type GetType()
+ {
+ return base.GetType();
+ }
+
+ void _AppDomain.GetTypeInfoCount(out uint pcTInfo)
+ {
+ throw new NotImplementedException();
+ }
+
+ void _AppDomain.GetTypeInfo(uint iTInfo, uint lcid, IntPtr ppTInfo)
+ {
+ throw new NotImplementedException();
+ }
+
+ void _AppDomain.GetIDsOfNames([In] ref Guid riid, IntPtr rgszNames, uint cNames, uint lcid, IntPtr rgDispId)
+ {
+ throw new NotImplementedException();
+ }
+
+ // If you implement this method, make sure to include _AppDomain.Invoke in VM\DangerousAPIs.h and
+ // include _AppDomain in SystemDomain::IsReflectionInvocationMethod in AppDomain.cpp.
+ void _AppDomain.Invoke(uint dispIdMember, [In] ref Guid riid, uint lcid, short wFlags, IntPtr pDispParams, IntPtr pVarResult, IntPtr pExcepInfo, IntPtr puArgErr)
+ {
+ throw new NotImplementedException();
+ }
+#endif
+ }
+
+ // CallBacks provide a facility to request execution of some code
+ // in another context/appDomain.
+ // CrossAppDomainDelegate type is defined for appdomain call backs.
+ // The delegate used to request a callbak through the DoCallBack method
+ // must be of CrossContextDelegate type.
+#if FEATURE_REMOTING
+[System.Runtime.InteropServices.ComVisible(true)]
+ public delegate void CrossAppDomainDelegate();
+#endif
+
+ /// <summary>
+ /// Handle used to marshal an AppDomain to the VM (eg QCall). When marshaled via a QCall, the target
+ /// method in the VM will recieve a QCall::AppDomainHandle parameter.
+ /// </summary>
+ internal struct AppDomainHandle
+ {
+ private IntPtr m_appDomainHandle;
+
+ // Note: generall an AppDomainHandle should not be directly constructed, instead the
+ // code:System.AppDomain.GetNativeHandle method should be called to get the handle for a specific
+ // AppDomain.
+ internal AppDomainHandle(IntPtr domainHandle)
+ {
+ m_appDomainHandle = domainHandle;
+ }
+ }
+}
diff --git a/src/mscorlib/src/System/AppDomainAttributes.cs b/src/mscorlib/src/System/AppDomainAttributes.cs
new file mode 100644
index 0000000000..0980b5fe90
--- /dev/null
+++ b/src/mscorlib/src/System/AppDomainAttributes.cs
@@ -0,0 +1,48 @@
+// 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.
+
+/*=============================================================================
+**
+**
+**
+** Purpose: For AppDomain-related custom attributes.
+**
+**
+=============================================================================*/
+
+namespace System {
+
+ [Serializable]
+ [System.Runtime.InteropServices.ComVisible(true)]
+ public enum LoaderOptimization
+ {
+ NotSpecified = 0,
+ SingleDomain = 1,
+ MultiDomain = 2,
+ MultiDomainHost = 3,
+ [Obsolete("This method has been deprecated. Please use Assembly.Load() instead. http://go.microsoft.com/fwlink/?linkid=14202")]
+ DomainMask = 3,
+ [Obsolete("This method has been deprecated. Please use Assembly.Load() instead. http://go.microsoft.com/fwlink/?linkid=14202")]
+ DisallowBindings = 4
+ }
+
+ [AttributeUsage (AttributeTargets.Method)]
+ [System.Runtime.InteropServices.ComVisible(true)]
+ public sealed class LoaderOptimizationAttribute : Attribute
+ {
+ internal byte _val;
+
+ public LoaderOptimizationAttribute(byte value)
+ {
+ _val = value;
+ }
+ public LoaderOptimizationAttribute(LoaderOptimization value)
+ {
+ _val = (byte) value;
+ }
+ public LoaderOptimization Value
+ { get {return (LoaderOptimization) _val;} }
+ }
+}
+
diff --git a/src/mscorlib/src/System/AppDomainManager.cs b/src/mscorlib/src/System/AppDomainManager.cs
new file mode 100644
index 0000000000..291099e199
--- /dev/null
+++ b/src/mscorlib/src/System/AppDomainManager.cs
@@ -0,0 +1,220 @@
+// 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.
+
+
+//
+// An AppDomainManager gives a hosting application the chance to
+// participate in the creation and control the settings of new AppDomains.
+//
+
+namespace System {
+ using System.Collections;
+ using System.Globalization;
+ using System.IO;
+ using System.Reflection;
+ using System.Runtime.CompilerServices;
+ using System.Security;
+ using System.Security.Permissions;
+ using System.Security.Policy;
+ using System.Threading;
+#if FEATURE_CLICKONCE
+ using System.Runtime.Hosting;
+#endif
+ using System.Runtime.Versioning;
+ using System.Runtime.InteropServices;
+ using System.Diagnostics.Contracts;
+
+#if FEATURE_APPDOMAINMANAGER_INITOPTIONS
+ [Flags]
+ [System.Runtime.InteropServices.ComVisible(true)]
+ public enum AppDomainManagerInitializationOptions {
+ None = 0x0000,
+ RegisterWithHost = 0x0001
+ }
+#endif // FEATURE_APPDOMAINMANAGER_INITOPTIONS
+
+ [System.Security.SecurityCritical] // auto-generated_required
+ [System.Runtime.InteropServices.ComVisible(true)]
+#if !FEATURE_CORECLR
+ [SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags = SecurityPermissionFlag.Infrastructure)]
+#endif
+#if FEATURE_REMOTING
+ public class AppDomainManager : MarshalByRefObject {
+#else // FEATURE_REMOTING
+ public class AppDomainManager {
+#endif // FEATURE_REMOTING
+ public AppDomainManager () {}
+#if FEATURE_REMOTING
+ [System.Security.SecurityCritical] // auto-generated
+ public virtual AppDomain CreateDomain (string friendlyName,
+ Evidence securityInfo,
+ AppDomainSetup appDomainInfo) {
+ return CreateDomainHelper(friendlyName, securityInfo, appDomainInfo);
+ }
+
+ [System.Security.SecurityCritical] // auto-generated_required
+ [SecurityPermissionAttribute(SecurityAction.Demand, ControlAppDomain = true)]
+ protected static AppDomain CreateDomainHelper (string friendlyName,
+ Evidence securityInfo,
+ AppDomainSetup appDomainInfo) {
+ if (friendlyName == null)
+ throw new ArgumentNullException("friendlyName", Environment.GetResourceString("ArgumentNull_String"));
+
+ Contract.EndContractBlock();
+ // If evidence is provided, we check to make sure that is allowed.
+ if (securityInfo != null) {
+ new SecurityPermission(SecurityPermissionFlag.ControlEvidence).Demand();
+
+ // Check the evidence to ensure that if it expects a sandboxed domain, it actually gets one.
+ AppDomain.CheckDomainCreationEvidence(appDomainInfo, securityInfo);
+ }
+
+ if (appDomainInfo == null) {
+ appDomainInfo = new AppDomainSetup();
+ }
+
+ // If there was no specified AppDomainManager for the new domain, default it to being the same
+ // as the current domain's AppDomainManager.
+ if (appDomainInfo.AppDomainManagerAssembly == null || appDomainInfo.AppDomainManagerType == null) {
+ string inheritedDomainManagerAssembly;
+ string inheritedDomainManagerType;
+
+ AppDomain.CurrentDomain.GetAppDomainManagerType(out inheritedDomainManagerAssembly,
+ out inheritedDomainManagerType);
+
+ if (appDomainInfo.AppDomainManagerAssembly == null) {
+ appDomainInfo.AppDomainManagerAssembly = inheritedDomainManagerAssembly;
+ }
+ if (appDomainInfo.AppDomainManagerType == null) {
+ appDomainInfo.AppDomainManagerType = inheritedDomainManagerType;
+ }
+ }
+
+ // If there was no specified TargetFrameworkName for the new domain, default it to the current domain's.
+ if (appDomainInfo.TargetFrameworkName == null)
+ appDomainInfo.TargetFrameworkName = AppDomain.CurrentDomain.GetTargetFrameworkName();
+
+ return AppDomain.nCreateDomain(friendlyName,
+ appDomainInfo,
+ securityInfo,
+ securityInfo == null ? AppDomain.CurrentDomain.InternalEvidence : null,
+ AppDomain.CurrentDomain.GetSecurityDescriptor());
+ }
+#endif // FEATURE_REMOTING
+
+ [System.Security.SecurityCritical]
+ public virtual void InitializeNewDomain (AppDomainSetup appDomainInfo) {
+ // By default, InitializeNewDomain does nothing. AppDomain.CreateAppDomainManager relies on this fact.
+ }
+
+#if FEATURE_APPDOMAINMANAGER_INITOPTIONS
+
+ private AppDomainManagerInitializationOptions m_flags = AppDomainManagerInitializationOptions.None;
+ public AppDomainManagerInitializationOptions InitializationFlags {
+ get {
+ return m_flags;
+ }
+ set {
+ m_flags = value;
+ }
+ }
+#endif // FEATURE_APPDOMAINMANAGER_INITOPTIONS
+
+#if FEATURE_CLICKONCE
+ private ApplicationActivator m_appActivator = null;
+ public virtual ApplicationActivator ApplicationActivator {
+ get {
+ if (m_appActivator == null)
+ m_appActivator = new ApplicationActivator();
+ return m_appActivator;
+ }
+ }
+#endif //#if FEATURE_CLICKONCE
+
+#if FEATURE_CAS_POLICY
+ public virtual HostSecurityManager HostSecurityManager {
+ get {
+ return null;
+ }
+ }
+
+ public virtual HostExecutionContextManager HostExecutionContextManager {
+ get {
+ // By default, the AppDomainManager returns the HostExecutionContextManager.
+ return HostExecutionContextManager.GetInternalHostExecutionContextManager();
+ }
+ }
+#endif // FEATURE_CAS_POLICY
+
+ [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity]
+ private static extern void GetEntryAssembly(ObjectHandleOnStack retAssembly);
+
+ private Assembly m_entryAssembly = null;
+ public virtual Assembly EntryAssembly {
+ [System.Security.SecurityCritical] // auto-generated
+ get {
+ // The default AppDomainManager sets the EntryAssembly depending on whether the
+ // AppDomain is a manifest application domain or not. In the first case, we parse
+ // the application manifest to find out the entry point assembly and return that assembly.
+ // In the second case, we maintain the old behavior by calling GetEntryAssembly().
+ if (m_entryAssembly == null)
+ {
+
+#if FEATURE_CLICKONCE
+ AppDomain domain = AppDomain.CurrentDomain;
+ if (domain.IsDefaultAppDomain() && domain.ActivationContext != null) {
+ ManifestRunner runner = new ManifestRunner(domain, domain.ActivationContext);
+ m_entryAssembly = runner.EntryAssembly;
+ } else
+#endif //#if FEATURE_CLICKONCE
+ {
+ RuntimeAssembly entryAssembly = null;
+ GetEntryAssembly(JitHelpers.GetObjectHandleOnStack(ref entryAssembly));
+ m_entryAssembly = entryAssembly;
+ }
+ }
+ return m_entryAssembly;
+ }
+ }
+
+ internal static AppDomainManager CurrentAppDomainManager {
+ [System.Security.SecurityCritical] // auto-generated
+ get {
+ return AppDomain.CurrentDomain.DomainManager;
+ }
+ }
+
+ public virtual bool CheckSecuritySettings (SecurityState state)
+ {
+ return false;
+ }
+
+#if FEATURE_APPDOMAINMANAGER_INITOPTIONS
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ private static extern bool HasHost();
+
+ [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
+ [SecurityCritical]
+ [SuppressUnmanagedCodeSecurity]
+ private static extern void RegisterWithHost(IntPtr appDomainManager);
+
+ internal void RegisterWithHost() {
+ if (HasHost()) {
+ IntPtr punkAppDomainManager = IntPtr.Zero;
+
+ RuntimeHelpers.PrepareConstrainedRegions();
+ try {
+ punkAppDomainManager = Marshal.GetIUnknownForObject(this);
+ RegisterWithHost(punkAppDomainManager);
+ }
+ finally {
+ if (!punkAppDomainManager.IsNull()) {
+ Marshal.Release(punkAppDomainManager);
+ }
+ }
+ }
+ }
+#endif // FEATURE_APPDOMAINMANAGER_INITOPTIONS
+ }
+}
diff --git a/src/mscorlib/src/System/AppDomainSetup.cs b/src/mscorlib/src/System/AppDomainSetup.cs
new file mode 100644
index 0000000000..f1057da082
--- /dev/null
+++ b/src/mscorlib/src/System/AppDomainSetup.cs
@@ -0,0 +1,1444 @@
+// 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.
+
+/*=============================================================================
+**
+** Class: AppDomainSetup
+**
+** Purpose: Defines the settings that the loader uses to find assemblies in an
+** AppDomain
+**
+** Date: Dec 22, 2000
+**
+=============================================================================*/
+
+namespace System {
+ using System;
+#if FEATURE_CLICKONCE
+ using System.Deployment.Internal.Isolation;
+ using System.Deployment.Internal.Isolation.Manifest;
+ using System.Runtime.Hosting;
+#endif
+ using System.Runtime.CompilerServices;
+ using System.Runtime;
+ using System.Text;
+ using System.Threading;
+ using System.Runtime.InteropServices;
+ using System.Runtime.Serialization;
+ using System.Reflection;
+ using System.Security;
+ using System.Security.Permissions;
+ using System.Security.Policy;
+ using System.Globalization;
+ using Path = System.IO.Path;
+ using System.Runtime.Versioning;
+ using System.Diagnostics.Contracts;
+ using System.Collections;
+ using System.Collections.Generic;
+
+ [Serializable]
+ [ClassInterface(ClassInterfaceType.None)]
+ [System.Runtime.InteropServices.ComVisible(true)]
+ public sealed class AppDomainSetup :
+ IAppDomainSetup
+ {
+ [Serializable]
+ internal enum LoaderInformation
+ {
+ // If you add a new value, add the corresponding property
+ // to AppDomain.GetData() and SetData()'s switch statements,
+ // as well as fusionsetup.h.
+ ApplicationBaseValue = 0, // LOADER_APPLICATION_BASE
+ ConfigurationFileValue = 1, // LOADER_CONFIGURATION_BASE
+ DynamicBaseValue = 2, // LOADER_DYNAMIC_BASE
+ DevPathValue = 3, // LOADER_DEVPATH
+ ApplicationNameValue = 4, // LOADER_APPLICATION_NAME
+ PrivateBinPathValue = 5, // LOADER_PRIVATE_PATH
+ PrivateBinPathProbeValue = 6, // LOADER_PRIVATE_BIN_PATH_PROBE
+ ShadowCopyDirectoriesValue = 7, // LOADER_SHADOW_COPY_DIRECTORIES
+ ShadowCopyFilesValue = 8, // LOADER_SHADOW_COPY_FILES
+ CachePathValue = 9, // LOADER_CACHE_PATH
+ LicenseFileValue = 10, // LOADER_LICENSE_FILE
+ DisallowPublisherPolicyValue = 11, // LOADER_DISALLOW_PUBLISHER_POLICY
+ DisallowCodeDownloadValue = 12, // LOADER_DISALLOW_CODE_DOWNLOAD
+ DisallowBindingRedirectsValue = 13, // LOADER_DISALLOW_BINDING_REDIRECTS
+ DisallowAppBaseProbingValue = 14, // LOADER_DISALLOW_APPBASE_PROBING
+ ConfigurationBytesValue = 15, // LOADER_CONFIGURATION_BYTES
+ LoaderMaximum = 18 // LOADER_MAXIMUM
+ }
+
+ // Constants from fusionsetup.h.
+ private const string LOADER_OPTIMIZATION = "LOADER_OPTIMIZATION";
+ private const string CONFIGURATION_EXTENSION = ".config";
+ private const string APPENV_RELATIVEPATH = "RELPATH";
+ private const string MACHINE_CONFIGURATION_FILE = "config\\machine.config";
+ private const string ACTAG_HOST_CONFIG_FILE = "HOST_CONFIG";
+
+#if FEATURE_FUSION
+ private const string LICENSE_FILE = "LICENSE_FILE";
+#endif
+
+ // Constants from fusionpriv.h
+ private const string ACTAG_APP_CONFIG_FILE = "APP_CONFIG_FILE";
+ private const string ACTAG_MACHINE_CONFIG = "MACHINE_CONFIG";
+ private const string ACTAG_APP_BASE_URL = "APPBASE";
+ private const string ACTAG_APP_NAME = "APP_NAME";
+ private const string ACTAG_BINPATH_PROBE_ONLY = "BINPATH_PROBE_ONLY";
+ private const string ACTAG_APP_CACHE_BASE = "CACHE_BASE";
+ private const string ACTAG_DEV_PATH = "DEV_PATH";
+ private const string ACTAG_APP_DYNAMIC_BASE = "DYNAMIC_BASE";
+ private const string ACTAG_FORCE_CACHE_INSTALL = "FORCE_CACHE_INSTALL";
+ private const string ACTAG_APP_PRIVATE_BINPATH = "PRIVATE_BINPATH";
+ private const string ACTAG_APP_SHADOW_COPY_DIRS = "SHADOW_COPY_DIRS";
+ private const string ACTAG_DISALLOW_APPLYPUBLISHERPOLICY = "DISALLOW_APP";
+ private const string ACTAG_CODE_DOWNLOAD_DISABLED = "CODE_DOWNLOAD_DISABLED";
+ private const string ACTAG_DISALLOW_APP_BINDING_REDIRECTS = "DISALLOW_APP_REDIRECTS";
+ private const string ACTAG_DISALLOW_APP_BASE_PROBING = "DISALLOW_APP_BASE_PROBING";
+ private const string ACTAG_APP_CONFIG_BLOB = "APP_CONFIG_BLOB";
+
+ // This class has an unmanaged representation so be aware you will need to make edits in vm\object.h if you change the order
+ // of these fields or add new ones.
+
+ private string[] _Entries;
+ private LoaderOptimization _LoaderOptimization;
+#pragma warning disable 169
+ private String _AppBase; // for compat with v1.1
+#pragma warning restore 169
+ [OptionalField(VersionAdded = 2)]
+ private AppDomainInitializer _AppDomainInitializer;
+ [OptionalField(VersionAdded = 2)]
+ private string[] _AppDomainInitializerArguments;
+#if FEATURE_CLICKONCE
+ [OptionalField(VersionAdded = 2)]
+ private ActivationArguments _ActivationArguments;
+#endif
+#if FEATURE_CORECLR
+ // On the CoreCLR, this contains just the name of the permission set that we install in the new appdomain.
+ // Not the ToXml().ToString() of an ApplicationTrust object.
+#endif
+ [OptionalField(VersionAdded = 2)]
+ private string _ApplicationTrust;
+ [OptionalField(VersionAdded = 2)]
+ private byte[] _ConfigurationBytes;
+#if FEATURE_COMINTEROP
+ [OptionalField(VersionAdded = 3)]
+ private bool _DisableInterfaceCache = false;
+#endif // FEATURE_COMINTEROP
+ [OptionalField(VersionAdded = 4)]
+ private string _AppDomainManagerAssembly;
+ [OptionalField(VersionAdded = 4)]
+ private string _AppDomainManagerType;
+
+#if FEATURE_APTCA
+ [OptionalField(VersionAdded = 4)]
+ private string[] _AptcaVisibleAssemblies;
+#endif
+
+ // A collection of strings used to indicate which breaking changes shouldn't be applied
+ // to an AppDomain. We only use the keys, the values are ignored.
+ [OptionalField(VersionAdded = 4)]
+ private Dictionary<string, object> _CompatFlags;
+
+ [OptionalField(VersionAdded = 5)] // This was added in .NET FX v4.5
+ private String _TargetFrameworkName;
+
+#if !FEATURE_CORECLR
+ [NonSerialized]
+ internal AppDomainSortingSetupInfo _AppDomainSortingSetupInfo;
+#endif
+
+ [OptionalField(VersionAdded = 5)] // This was added in .NET FX v4.5
+ private bool _CheckedForTargetFrameworkName;
+
+#if FEATURE_RANDOMIZED_STRING_HASHING
+ [OptionalField(VersionAdded = 5)] // This was added in .NET FX v4.5
+ private bool _UseRandomizedStringHashing;
+#endif
+
+ [SecuritySafeCritical]
+ internal AppDomainSetup(AppDomainSetup copy, bool copyDomainBoundData)
+ {
+ string[] mine = Value;
+ if(copy != null) {
+ string[] other = copy.Value;
+ int mineSize = _Entries.Length;
+ int otherSize = other.Length;
+ int size = (otherSize < mineSize) ? otherSize : mineSize;
+
+ for (int i = 0; i < size; i++)
+ mine[i] = other[i];
+
+ if (size < mineSize)
+ {
+ // This case can happen when the copy is a deserialized version of
+ // an AppDomainSetup object serialized by Everett.
+ for (int i = size; i < mineSize; i++)
+ mine[i] = null;
+ }
+
+ _LoaderOptimization = copy._LoaderOptimization;
+
+ _AppDomainInitializerArguments = copy.AppDomainInitializerArguments;
+#if FEATURE_CLICKONCE
+ _ActivationArguments = copy.ActivationArguments;
+#endif
+ _ApplicationTrust = copy._ApplicationTrust;
+ if (copyDomainBoundData)
+ _AppDomainInitializer = copy.AppDomainInitializer;
+ else
+ _AppDomainInitializer = null;
+
+ _ConfigurationBytes = copy.GetConfigurationBytes();
+#if FEATURE_COMINTEROP
+ _DisableInterfaceCache = copy._DisableInterfaceCache;
+#endif // FEATURE_COMINTEROP
+ _AppDomainManagerAssembly = copy.AppDomainManagerAssembly;
+ _AppDomainManagerType = copy.AppDomainManagerType;
+#if FEATURE_APTCA
+ _AptcaVisibleAssemblies = copy.PartialTrustVisibleAssemblies;
+#endif
+
+ if (copy._CompatFlags != null)
+ {
+ SetCompatibilitySwitches(copy._CompatFlags.Keys);
+ }
+
+#if !FEATURE_CORECLR
+ if(copy._AppDomainSortingSetupInfo != null)
+ {
+ _AppDomainSortingSetupInfo = new AppDomainSortingSetupInfo(copy._AppDomainSortingSetupInfo);
+ }
+#endif
+ _TargetFrameworkName = copy._TargetFrameworkName;
+
+#if FEATURE_RANDOMIZED_STRING_HASHING
+ _UseRandomizedStringHashing = copy._UseRandomizedStringHashing;
+#endif
+
+ }
+ else
+ _LoaderOptimization = LoaderOptimization.NotSpecified;
+ }
+
+ public AppDomainSetup()
+ {
+ _LoaderOptimization = LoaderOptimization.NotSpecified;
+ }
+
+#if FEATURE_CLICKONCE
+ // Creates an AppDomainSetup object from an application identity.
+ public AppDomainSetup (ActivationContext activationContext) : this (new ActivationArguments(activationContext)) {}
+
+ [System.Security.SecuritySafeCritical] // auto-generated
+ public AppDomainSetup (ActivationArguments activationArguments) {
+ if (activationArguments == null)
+ throw new ArgumentNullException("activationArguments");
+ Contract.EndContractBlock();
+
+ _LoaderOptimization = LoaderOptimization.NotSpecified;
+ ActivationArguments = activationArguments;
+
+ Contract.Assert(activationArguments.ActivationContext != null, "Cannot set base directory without activation context");
+ string entryPointPath = CmsUtils.GetEntryPointFullPath(activationArguments);
+ if (!String.IsNullOrEmpty(entryPointPath))
+ SetupDefaults(entryPointPath);
+ else
+ ApplicationBase = activationArguments.ActivationContext.ApplicationDirectory;
+
+ }
+#endif // !FEATURE_CLICKONCE
+
+ #if FEATURE_CORECLR
+ [System.Security.SecurityCritical] // auto-generated
+ #endif
+ internal void SetupDefaults(string imageLocation, bool imageLocationAlreadyNormalized = false) {
+ char[] sep = {'\\', '/'};
+ int i = imageLocation.LastIndexOfAny(sep);
+
+ if (i == -1) {
+ ApplicationName = imageLocation;
+ }
+ else {
+ ApplicationName = imageLocation.Substring(i+1);
+ string appBase = imageLocation.Substring(0, i+1);
+
+ if (imageLocationAlreadyNormalized)
+ Value[(int) LoaderInformation.ApplicationBaseValue] = appBase;
+ else
+ ApplicationBase = appBase;
+ }
+ ConfigurationFile = ApplicationName + AppDomainSetup.ConfigurationExtension;
+ }
+
+ internal string[] Value
+ {
+ get {
+ if( _Entries == null)
+ _Entries = new String[(int)LoaderInformation.LoaderMaximum];
+ return _Entries;
+ }
+ }
+
+ internal String GetUnsecureApplicationBase()
+ {
+ return Value[(int) LoaderInformation.ApplicationBaseValue];
+ }
+
+ public string AppDomainManagerAssembly
+ {
+ get { return _AppDomainManagerAssembly; }
+ set { _AppDomainManagerAssembly = value; }
+ }
+
+ public string AppDomainManagerType
+ {
+ get { return _AppDomainManagerType; }
+ set { _AppDomainManagerType = value; }
+ }
+
+#if FEATURE_APTCA
+ public string[] PartialTrustVisibleAssemblies
+ {
+ get { return _AptcaVisibleAssemblies; }
+ set {
+ if (value != null) {
+ _AptcaVisibleAssemblies = (string[])value.Clone();
+ Array.Sort<string>(_AptcaVisibleAssemblies, StringComparer.OrdinalIgnoreCase);
+ }
+ else {
+ _AptcaVisibleAssemblies = null;
+ }
+ }
+ }
+#endif
+
+ public String ApplicationBase
+ {
+ #if FEATURE_CORECLR
+ [System.Security.SecurityCritical] // auto-generated
+ #else
+ [System.Security.SecuritySafeCritical]
+ #endif
+ [Pure]
+ get {
+ return VerifyDir(GetUnsecureApplicationBase(), false);
+ }
+
+ #if FEATURE_CORECLR
+ [System.Security.SecurityCritical] // auto-generated
+ #endif
+ set {
+ Value[(int) LoaderInformation.ApplicationBaseValue] = NormalizePath(value, false);
+ }
+ }
+
+ private String NormalizePath(String path, bool useAppBase)
+ {
+ if(path == null)
+ return null;
+
+ // If we add very long file name support ("\\?\") to the Path class then this is unnecesary,
+ // but we do not plan on doing this for now.
+
+ // Long path checks can be quirked, and as loading default quirks too early in the setup of an AppDomain is risky
+ // we'll avoid checking path lengths- we'll still fail at MAX_PATH later if we're !useAppBase when we call Path's
+ // NormalizePath.
+ if (!useAppBase)
+ path = Security.Util.URLString.PreProcessForExtendedPathRemoval(
+ checkPathLength: false,
+ url: path,
+ isFileUrl: false);
+
+
+ int len = path.Length;
+ if (len == 0)
+ return null;
+
+#if !PLATFORM_UNIX
+ bool UNCpath = false;
+#endif // !PLATFORM_UNIX
+
+ if ((len > 7) &&
+ (String.Compare( path, 0, "file:", 0, 5, StringComparison.OrdinalIgnoreCase) == 0)) {
+ int trim;
+
+ if (path[6] == '\\') {
+ if ((path[7] == '\\') || (path[7] == '/')) {
+
+ // Don't allow "file:\\\\", because we can't tell the difference
+ // with it for "file:\\" + "\\server" and "file:\\\" + "\localpath"
+ if ( (len > 8) &&
+ ((path[8] == '\\') || (path[8] == '/')) )
+ throw new ArgumentException(Environment.GetResourceString("Argument_InvalidPathChars"));
+
+ // file:\\\ means local path
+ else
+#if !PLATFORM_UNIX
+ trim = 8;
+#else
+ // For Unix platform, trim the first 7 charcaters only.
+ // Trimming the first 8 characters will cause
+ // the root path separator to be trimmed away,
+ // and the absolute local path becomes a relative local path.
+ trim = 7;
+#endif // !PLATFORM_UNIX
+ }
+
+ // file:\\ means remote server
+ else {
+ trim = 5;
+#if !PLATFORM_UNIX
+ UNCpath = true;
+#endif // !PLATFORM_UNIX
+ }
+ }
+
+ // local path
+ else if (path[7] == '/')
+#if !PLATFORM_UNIX
+ trim = 8;
+#else
+ // For Unix platform, trim the first 7 characters only.
+ // Trimming the first 8 characters will cause
+ // the root path separator to be trimmed away,
+ // and the absolute local path becomes a relative local path.
+ trim = 7;
+#endif // !PLATFORM_UNIX
+
+ // remote
+ else {
+ // file://\\remote
+ if ( (len > 8) && (path[7] == '\\') && (path[8] == '\\') )
+ trim = 7;
+ else { // file://remote
+ trim = 5;
+#if !PLATFORM_UNIX
+ // Create valid UNC path by changing
+ // all occurences of '/' to '\\' in path
+ System.Text.StringBuilder winPathBuilder =
+ new System.Text.StringBuilder(len);
+ for (int i = 0; i < len; i++) {
+ char c = path[i];
+ if (c == '/')
+ winPathBuilder.Append('\\');
+ else
+ winPathBuilder.Append(c);
+ }
+ path = winPathBuilder.ToString();
+#endif // !PLATFORM_UNIX
+ }
+#if !PLATFORM_UNIX
+ UNCpath = true;
+#endif // !PLATFORM_UNIX
+ }
+
+ path = path.Substring(trim);
+ len -= trim;
+ }
+
+#if !PLATFORM_UNIX
+ bool localPath;
+
+ // UNC
+ if (UNCpath ||
+ ( (len > 1) &&
+ ( (path[0] == '/') || (path[0] == '\\') ) &&
+ ( (path[1] == '/') || (path[1] == '\\') ) ))
+ localPath = false;
+
+ else {
+ int colon = path.IndexOf(':') + 1;
+
+ // protocol other than file:
+ if ((colon != 0) &&
+ (len > colon+1) &&
+ ( (path[colon] == '/') || (path[colon] == '\\') ) &&
+ ( (path[colon+1] == '/') || (path[colon+1] == '\\') ))
+ localPath = false;
+
+ else
+ localPath = true;
+ }
+
+ if (localPath)
+#else
+ if ( (len == 1) ||
+ ( (path[0] != '/') && (path[0] != '\\') ) )
+#endif // !PLATFORM_UNIX
+ {
+
+ if (useAppBase &&
+ ( (len == 1) || (path[1] != ':') )) {
+ String appBase = Value[(int) LoaderInformation.ApplicationBaseValue];
+
+ if ((appBase == null) || (appBase.Length == 0))
+ throw new MemberAccessException(Environment.GetResourceString("AppDomain_AppBaseNotSet"));
+
+ StringBuilder result = StringBuilderCache.Acquire();
+
+ bool slash = false;
+ if ((path[0] == '/') || (path[0] == '\\')) {
+ string pathRoot = AppDomain.NormalizePath(appBase, fullCheck: false);
+ pathRoot = pathRoot.Substring(0, IO.PathInternal.GetRootLength(pathRoot));
+
+ if (pathRoot.Length == 0) { // URL
+ int index = appBase.IndexOf(":/", StringComparison.Ordinal);
+ if (index == -1)
+ index = appBase.IndexOf(":\\", StringComparison.Ordinal);
+
+ // Get past last slashes of "url:http://"
+ int urlLen = appBase.Length;
+ for (index += 1;
+ (index < urlLen) && ((appBase[index] == '/') || (appBase[index] == '\\'));
+ index++);
+
+ // Now find the next slash to get domain name
+ for(; (index < urlLen) && (appBase[index] != '/') && (appBase[index] != '\\');
+ index++);
+
+ pathRoot = appBase.Substring(0, index);
+ }
+
+ result.Append(pathRoot);
+ slash = true;
+ }
+ else
+ result.Append(appBase);
+
+ // Make sure there's a slash separator (and only one)
+ int aLen = result.Length - 1;
+ if ((result[aLen] != '/') &&
+ (result[aLen] != '\\')) {
+ if (!slash) {
+#if !PLATFORM_UNIX
+ if (appBase.IndexOf(":/", StringComparison.Ordinal) == -1)
+ result.Append('\\');
+ else
+#endif // !PLATFORM_UNIX
+ result.Append('/');
+ }
+ }
+ else if (slash)
+ result.Remove(aLen, 1);
+
+ result.Append(path);
+ path = StringBuilderCache.GetStringAndRelease(result);
+ }
+ else
+ path = AppDomain.NormalizePath(path, fullCheck: true);
+ }
+
+ return path;
+ }
+
+ private bool IsFilePath(String path)
+ {
+#if !PLATFORM_UNIX
+ return (path[1] == ':') || ( (path[0] == '\\') && (path[1] == '\\') );
+#else
+ return (path[0] == '/');
+#endif // !PLATFORM_UNIX
+ }
+
+ internal static String ApplicationBaseKey
+ {
+ get {
+ return ACTAG_APP_BASE_URL;
+ }
+ }
+
+ public String ConfigurationFile
+ {
+ [System.Security.SecuritySafeCritical] // auto-generated
+ get {
+ return VerifyDir(Value[(int) LoaderInformation.ConfigurationFileValue], true);
+ }
+
+ set {
+ Value[(int) LoaderInformation.ConfigurationFileValue] = value;
+ }
+ }
+
+ // Used by the ResourceManager internally. This must not do any
+ // security checks to avoid infinite loops.
+ internal String ConfigurationFileInternal
+ {
+ get {
+ return NormalizePath(Value[(int) LoaderInformation.ConfigurationFileValue], true);
+ }
+ }
+
+ internal static String ConfigurationFileKey
+ {
+ get {
+ return ACTAG_APP_CONFIG_FILE;
+ }
+ }
+
+ public byte[] GetConfigurationBytes()
+ {
+ if (_ConfigurationBytes == null)
+ return null;
+
+ return (byte[]) _ConfigurationBytes.Clone();
+ }
+
+ public void SetConfigurationBytes(byte[] value)
+ {
+ _ConfigurationBytes = value;
+ }
+
+ private static String ConfigurationBytesKey
+ {
+ get {
+ return ACTAG_APP_CONFIG_BLOB;
+ }
+ }
+
+ // only needed by AppDomain.Setup(). Not really needed by users.
+ internal Dictionary<string, object> GetCompatibilityFlags()
+ {
+ return _CompatFlags;
+ }
+
+ public void SetCompatibilitySwitches(IEnumerable<String> switches)
+ {
+
+#if !FEATURE_CORECLR
+ if(_AppDomainSortingSetupInfo != null)
+ {
+ _AppDomainSortingSetupInfo._useV2LegacySorting = false;
+ _AppDomainSortingSetupInfo._useV4LegacySorting = false;
+ }
+#endif
+
+#if FEATURE_RANDOMIZED_STRING_HASHING
+ _UseRandomizedStringHashing = false;
+#endif
+ if (switches != null)
+ {
+ _CompatFlags = new Dictionary<string, object>();
+ foreach (String str in switches)
+ {
+#if !FEATURE_CORECLR
+ if(StringComparer.OrdinalIgnoreCase.Equals("NetFx40_Legacy20SortingBehavior", str)) {
+ if(_AppDomainSortingSetupInfo == null)
+ {
+ _AppDomainSortingSetupInfo = new AppDomainSortingSetupInfo();
+ }
+ _AppDomainSortingSetupInfo._useV2LegacySorting = true;
+ }
+
+ if(StringComparer.OrdinalIgnoreCase.Equals("NetFx45_Legacy40SortingBehavior", str)) {
+ if(_AppDomainSortingSetupInfo == null)
+ {
+ _AppDomainSortingSetupInfo = new AppDomainSortingSetupInfo();
+ }
+ _AppDomainSortingSetupInfo._useV4LegacySorting = true;
+ }
+#endif
+
+#if FEATURE_RANDOMIZED_STRING_HASHING
+ if(StringComparer.OrdinalIgnoreCase.Equals("UseRandomizedStringHashAlgorithm", str)) {
+ _UseRandomizedStringHashing = true;
+ }
+#endif
+
+ _CompatFlags.Add(str, null);
+ }
+ }
+ else
+ {
+ _CompatFlags = null;
+ }
+
+ }
+
+ // A target Framework moniker, in a format parsible by the FrameworkName class.
+ public String TargetFrameworkName {
+ get {
+ return _TargetFrameworkName;
+ }
+ set {
+ _TargetFrameworkName = value;
+ }
+ }
+
+ internal bool CheckedForTargetFrameworkName
+ {
+ get { return _CheckedForTargetFrameworkName; }
+ set { _CheckedForTargetFrameworkName = value; }
+ }
+
+#if !FEATURE_CORECLR
+ [SecurityCritical]
+ public void SetNativeFunction(string functionName, int functionVersion, IntPtr functionPointer)
+ {
+ if(functionName == null)
+ {
+ throw new ArgumentNullException("functionName");
+ }
+
+ if(functionPointer == IntPtr.Zero)
+ {
+ throw new ArgumentNullException("functionPointer");
+ }
+
+ if(String.IsNullOrWhiteSpace(functionName))
+ {
+ throw new ArgumentException(Environment.GetResourceString("Argument_NPMSInvalidName"), "functionName");
+ }
+
+ Contract.EndContractBlock();
+
+ if(functionVersion < 1)
+ {
+ throw new ArgumentException(Environment.GetResourceString("ArgumentException_MinSortingVersion", 1, functionName));
+ }
+
+ if(_AppDomainSortingSetupInfo == null)
+ {
+ _AppDomainSortingSetupInfo = new AppDomainSortingSetupInfo();
+ }
+
+ if(String.Equals(functionName, "IsNLSDefinedString", StringComparison.OrdinalIgnoreCase))
+ {
+ _AppDomainSortingSetupInfo._pfnIsNLSDefinedString = functionPointer;
+ }
+
+ if (String.Equals(functionName, "CompareStringEx", StringComparison.OrdinalIgnoreCase))
+ {
+ _AppDomainSortingSetupInfo._pfnCompareStringEx = functionPointer;
+ }
+
+ if (String.Equals(functionName, "LCMapStringEx", StringComparison.OrdinalIgnoreCase))
+ {
+ _AppDomainSortingSetupInfo._pfnLCMapStringEx = functionPointer;
+ }
+
+ if (String.Equals(functionName, "FindNLSStringEx", StringComparison.OrdinalIgnoreCase))
+ {
+ _AppDomainSortingSetupInfo._pfnFindNLSStringEx = functionPointer;
+ }
+
+ if (String.Equals(functionName, "CompareStringOrdinal", StringComparison.OrdinalIgnoreCase))
+ {
+ _AppDomainSortingSetupInfo._pfnCompareStringOrdinal = functionPointer;
+ }
+
+ if (String.Equals(functionName, "GetNLSVersionEx", StringComparison.OrdinalIgnoreCase))
+ {
+ _AppDomainSortingSetupInfo._pfnGetNLSVersionEx = functionPointer;
+ }
+
+ if (String.Equals(functionName, "FindStringOrdinal", StringComparison.OrdinalIgnoreCase))
+ {
+ _AppDomainSortingSetupInfo._pfnFindStringOrdinal = functionPointer;
+ }
+ }
+#endif
+
+ public String DynamicBase
+ {
+ [System.Security.SecuritySafeCritical] // auto-generated
+ get {
+ return VerifyDir(Value[(int) LoaderInformation.DynamicBaseValue], true);
+ }
+
+ [System.Security.SecuritySafeCritical] // auto-generated
+ set {
+ if (value == null)
+ Value[(int) LoaderInformation.DynamicBaseValue] = null;
+ else {
+ if(ApplicationName == null)
+ throw new MemberAccessException(Environment.GetResourceString("AppDomain_RequireApplicationName"));
+
+ StringBuilder s = new StringBuilder( NormalizePath(value, false) );
+ s.Append('\\');
+ string h = ParseNumbers.IntToString(ApplicationName.GetLegacyNonRandomizedHashCode(),
+ 16, 8, '0', ParseNumbers.PrintAsI4);
+ s.Append(h);
+
+ Value[(int) LoaderInformation.DynamicBaseValue] = s.ToString();
+ }
+ }
+ }
+
+ internal static String DynamicBaseKey
+ {
+ get {
+ return ACTAG_APP_DYNAMIC_BASE;
+ }
+ }
+
+
+ public bool DisallowPublisherPolicy
+ {
+ get
+ {
+ return (Value[(int) LoaderInformation.DisallowPublisherPolicyValue] != null);
+ }
+ set
+ {
+ if (value)
+ Value[(int) LoaderInformation.DisallowPublisherPolicyValue]="true";
+ else
+ Value[(int) LoaderInformation.DisallowPublisherPolicyValue]=null;
+ }
+ }
+
+
+ public bool DisallowBindingRedirects
+ {
+ get
+ {
+ return (Value[(int) LoaderInformation.DisallowBindingRedirectsValue] != null);
+ }
+ set
+ {
+ if (value)
+ Value[(int) LoaderInformation.DisallowBindingRedirectsValue] = "true";
+ else
+ Value[(int) LoaderInformation.DisallowBindingRedirectsValue] = null;
+ }
+ }
+
+ public bool DisallowCodeDownload
+ {
+ get
+ {
+ return (Value[(int) LoaderInformation.DisallowCodeDownloadValue] != null);
+ }
+ set
+ {
+ if (value)
+ Value[(int) LoaderInformation.DisallowCodeDownloadValue] = "true";
+ else
+ Value[(int) LoaderInformation.DisallowCodeDownloadValue] = null;
+ }
+ }
+
+
+ public bool DisallowApplicationBaseProbing
+ {
+ get
+ {
+ return (Value[(int) LoaderInformation.DisallowAppBaseProbingValue] != null);
+ }
+ set
+ {
+ if (value)
+ Value[(int) LoaderInformation.DisallowAppBaseProbingValue] = "true";
+ else
+ Value[(int) LoaderInformation.DisallowAppBaseProbingValue] = null;
+ }
+ }
+
+ [System.Security.SecurityCritical] // auto-generated
+ private String VerifyDir(String dir, bool normalize)
+ {
+ if (dir != null) {
+ if (dir.Length == 0)
+ dir = null;
+ else {
+ if (normalize)
+ dir = NormalizePath(dir, true);
+
+ // The only way AppDomainSetup is exposed in coreclr is through the AppDomainManager
+ // and the AppDomainManager is a SecurityCritical type. Also, all callers of callstacks
+ // leading from VerifyDir are SecurityCritical. So we can remove the Demand because
+ // we have validated that all callers are SecurityCritical
+#if !FEATURE_CORECLR
+ if (IsFilePath(dir))
+ new FileIOPermission( FileIOPermissionAccess.PathDiscovery, dir ).Demand();
+#endif // !FEATURE_CORECLR
+ }
+ }
+
+ return dir;
+ }
+
+ [System.Security.SecurityCritical] // auto-generated
+ private void VerifyDirList(String dirs)
+ {
+ if (dirs != null) {
+ String[] dirArray = dirs.Split(';');
+ int len = dirArray.Length;
+
+ for (int i = 0; i < len; i++)
+ VerifyDir(dirArray[i], true);
+ }
+ }
+
+ internal String DeveloperPath
+ {
+ [System.Security.SecurityCritical] // auto-generated
+ get {
+ String dirs = Value[(int) LoaderInformation.DevPathValue];
+ VerifyDirList(dirs);
+ return dirs;
+ }
+
+ set {
+ if(value == nul