├── .gitattributes ├── .github └── ISSUE_TEMPLATE │ └── config.yml ├── .gitignore ├── Documentation ├── KnownIssues │ ├── 776516-InvalidOperationException in System_Web_ni!System.Web.Hosting.RecycleLimitMonitor+RecycleLimitMonitorSingleton.AlertProxyMonitors.md │ ├── README.md │ ├── Template │ │ └── NETFXKnownIssuesTemplate.md │ ├── wpf-binding-issue.md │ └── wpf-pma-window-drag.md ├── README.md ├── compatibility │ ├── ! Template.md │ ├── !categories.md │ ├── ASPNET-accessibility-improvement.md │ ├── Change-SignedXML-and-SignedCMS-default-algorithms-to-SHA256.md │ ├── GetECDsaPublicKey-correctly-handles-brainpool-curves.md │ ├── README.md │ ├── RSACng-and-DSACng-not-usable-in-Partial-Trust-scenarios.md │ ├── SerialPort-background-thread-exceptions.md │ ├── ServiceBase-doesnt-propagate-OnStart-exceptions.md │ ├── SignedXml.GetPublicKey-returns-RSACng-on-net462.md │ ├── Stack-traces-obtained-when-using-portable-PDBs-now-include-source-file-and-line-information-if-requested.md │ ├── WCF-AddressHeaderCollection-now-throws-an-ArgumentException-if-an-addressHeader-element-is-null.md │ ├── WCF-Improved-WCF-chain-trust-certificate-validation-for-Net.Tcp-certificate-authentication.md │ ├── WCF-MsmqSecureHashAlgorithm-default-value-is-now-SHA256.md │ ├── WCF-PipeConnection.GetHashAlgorithm-now-uses-SHA256.md │ ├── WCFSDKToolsAccessibilityChangesIn4.7.1.md │ ├── a-concurrentdictionary-serialized-in-_net-4_5-with-netdatacontractserializer-cannot-be-deserialized-by-_net-4_5_1-or-4_5_2.md │ ├── accessing-a-wpf-datagrid's-selected-items-from-a-handler-of-the-datagrid's-unloadingrow-event-can-cause-a-nullreferenceexception.md │ ├── ado_net-now-attempts-to-automatically-reconnect-broken-sql-connections.md │ ├── aescryptoserviceprovider-decryptor-provides-a-reusable-transform.md │ ├── appdomainsetup_dynamicbase-is-no-longer-randomized-by-userandomizedstringhashalgorithm.md │ ├── application_filtermessage-no-longer-throws-for-re-entrant-implementations-of-imessagefilter_prefiltermessage.md │ ├── apps-published-with-clickonce-that-use-a-sha-256-code-signing-certificate-may-fail-on-windows-2003.md │ ├── asp-net-httpruntime-appdomainapppath-throws-nullreferenceexception.md │ ├── asp_net-mvc-now-escapes-spaces-in-strings-passed-in-via-route-parameters.md │ ├── aspnet-472-compat-doc.md │ ├── aspnet-asp.net-validationcontext.membername-is-null-sometimes.md │ ├── aspnet-fix-handling-input-and-label-attributes-for-webforms-checkbox-control.md │ ├── aspnet-invalid-results-from-httprequest.getattributefromheader.md │ ├── assemblies-compiled-with-regex_compiletoassembly-breaks-between-4_0-and-4_5.md │ ├── binaryformatter-can-fail-to-find-type-from-loadfrom-context.md │ ├── binding-a-wpf-selector-property-(such-as-'selecteditem')-to-a-static-property-does-not-work.md │ ├── blockingcollection_trytakefromany-does-not-throw-anymore.md │ ├── building-an-entity-framework-edmx-with-visual-studio-2013-can-fail-with-error-msb4062-if-using-the-entitydeploysplit-or-entityclean-tasks.md │ ├── calling-attribute_getcustomattributes-on-an-indexer-property-no-longer-throws-ambiguousmatchexception.md │ ├── calling-createdefaultauthorizationcontext-with-a-null-argument-has-changed.md │ ├── calling-datagrid_commitedit-from-a-celleditending-handler-drops-focus.md │ ├── calling-items_refresh-on-a-wpf-listbox-or-listview-or-datagrid-with-items-selected-can-cause-duplicate-items-to-appear-in-the-element.md │ ├── calls-to-claimsidentity-constructors.md │ ├── certificate-eku-oid-validation.md │ ├── change-in-behavior-for-task_waitall-methods-with-time-out-arguments.md │ ├── change-in-behavior-in-data-definition-language-(ddl)-apis.md │ ├── change-in-path-separator-character-in-zip-files.md │ ├── changes-in-path-normalization.md │ ├── changing-the-isenabled-property-of-the-parent-of-a-textblock-control-affects-any-child-controls.md │ ├── clickonce-supports-sha-256-on-4_0-targeted-apps.md │ ├── clr_critical_section_spin_wait_removal.md │ ├── code-contracts-and-string-isnullorempty-compiler-warning.md │ ├── coerceisselectionboxhighlighted.md │ ├── compiler-support-for-type-forwarding-when-multi-targeting-mscorlib.md │ ├── concurrentqueue_trypeek-can-return-an-erroneous-null-via-its-out-parameter.md │ ├── connection-pool-blocking-period-for-azure-sql-databases-is-removed.md │ ├── contentdisposition-datetimes-returns-slightly-different-string.md │ ├── cor_prf_gc_root_handles-are-not-being-enumerated-by-profilers.md │ ├── cryptographicexception-not-thrown-in-fips-mode.md │ ├── cspparameters_parentwindowhandle-now-expects-hwnd-value.md │ ├── currentculture-flows-across-tasks.md │ ├── currentculture-not-preserved-across-wpf-dispatcher-operations.md │ ├── data-written-to-printsystemjobinfo-jobstream-must-be-in-xps-format.md │ ├── datagridcellspanel_bringintoview-throws-argumentoutofrangeexception.md │ ├── dataobject_getdata-now-retrieves-data-as-utf-8.md │ ├── dbparameter_precision-and-dbparameter_scale-are-now-public-virtual-members.md │ ├── deflatestream-uses-native-apis-for-decompression.md │ ├── deserialization-of-objects-across-appdomains-can-fail.md │ ├── different-exception-handling-for-objectcontext_createdatabase-and-dbproviderservices_createdatabase-methods.md │ ├── ef-no-longer-throws-for-queryviews-with-specific-characteristics.md │ ├── ef-version-must-match-netfx-version.md │ ├── encoderparameter-ctor-is-obsolete.md │ ├── entityframework-6_0-loads-very-slowly-in-apps-launched-from-visual-studio.md │ ├── enumerable_empty-always-returns-cached-instance.md │ ├── error-codes-for-maxrequestlength-or-maxreceivedmessagesize-are-different.md │ ├── etw-event-names-cannot-differ-only-by-suffix.md │ ├── etw-eventlisteners-do-not-capture-events-from-providers-with-explicit-keywords.md │ ├── eventlistener-truncates-strings-with-embedded-nulls.md │ ├── eventsource_writeevent-impls-must-pass-writeevent-the-same-parameters-that-it-received-(plus-id).md │ ├── exception-message-has-changed-for-failed-datacontract-serialization-in-case-of-an-unknown-type.md │ ├── exceptions-during-unobserved-processing-in-system_threading_tasks_task-no-longer-propagate-on-finalizer-thread.md │ ├── flowdocument-may-show-an-extra-line-of-text.md │ ├── foreach-iterator-variable-is-now-scoped-within-the-iteration.md │ ├── glyphrun-computeinkboundingbox-and-formattedtext-extent-return-different-values-beginning-in-dotnet-4-5.md │ ├── gridviews-with-allowcustompaging-set-to-true-may-fire-the-pageindexchanging-event-when-leaving-the-final-page-of-the-view.md │ ├── horizontal-scrolling-and-virtualization.md │ ├── htmltextwriter-does-not-render-br-element-correctly.md │ ├── httprequest_contentencoding-property-prohibits-utf7.md │ ├── httputility_javascriptstringencode-escapes-ampersand.md │ ├── iasyncresult_completedsynchronously-property-must-be-correct-for-the-resulting-task-to-complete.md │ ├── icommand_canexecutechanged-event-behaviour-changed-in-_net-4_5.md │ ├── il-ret-not-allowed-in-a-try-region.md │ ├── incorrect-code-generation-when-passing-and-comparing-uint16-values.md │ ├── incorrect-implementation-of-memberdescriptor_equals.md │ ├── intermittently-unable-to-scroll-to-bottom-item-in-itemscontrols-when-using-customer-datatemplates.md │ ├── interop-enable-winrt-iagileobject.md │ ├── interop-event-handlers-safearray.md │ ├── ipad-should-not-be-used-in-custom-capabilities-file-because-it-is-now-a-browser-capability.md │ ├── item-scrolling-a-flat-list-with-items-of-different-pixel-height.md │ ├── items_clear-does-not-remove-duplicates-from-selecteditems.md │ ├── keytips-behavior-improved-in-wpf.md │ ├── linq-to-ef-join-throws-argumentoutofrangeexception.md │ ├── list_foreach-can-throw-exception-when-modifying-list-item.md │ ├── list_sort-algorithm-changed.md │ ├── listboxitem-isselected-binding-issue-with-observablecollection_move.md │ ├── log-file-name-created-by-the-objectcontext_createdatabase-method-has-changed-to-match-sql-server-specifications.md │ ├── long-path-support.md │ ├── machinekey_encode-and-machinekey_decode-methods-are-now-obsolete.md │ ├── managed-browser-hosting-controls-from-the-_net-framework-1_1-and-2_0-are-blocked.md │ ├── marshal_sizeof-and-marshal_ptrtostructure-overloads-break-dynamic-code.md │ ├── mef-catalogs-implement-ienumerable-and-therefore-can-no-longer-be-used-to-create-a-serializer.md │ ├── minfreememorypercentagetoactiveservice-is-now-respected.md │ ├── missing-target-framework-moniker-results-in-4_0-behavior.md │ ├── multi-line-asp_net-textbox-spacing-changed-when-using-antixssencoder.md │ ├── multiple-items-in-a-single-tablelayoutpanel-cell-may-be-rearranged.md │ ├── netdatacontractserializer-fails-to-deserialize-a-concurrentdictionary-serialized-with-a-different-_net-version.md │ ├── new-(ambiguous)-dispatcher_invoke-overloads-could-result-in-different-behavior.md │ ├── new-64-bit-jit-compiler.md │ ├── new-enum-values-in-wpf's-pagerangeselection.md │ ├── no-longer-able-to-set-enableviewstatemac-to-false.md │ ├── non-pooled-sql-connections-will-leak-memory-if-not-explicitly-disposed.md │ ├── null-coalescer-values-are-not-visible-in-debugger-until-one-step-later.md │ ├── objectcontext_translate-and-objectcontext_executestorequery-now-support-enum-type.md │ ├── objectdisposedexception-thrown-by-wpf-spellchecker.md │ ├── obsoleteattribute-exports-as-both-obsoleteattribute-and-deprecatedattribute-in-winmd-scenarios.md │ ├── only-tls-1_0-1_1-and-1_2-protocols-supported-in-system_net_servicepointmanager-and-system_net_security_sslstream.md │ ├── operationcontext-current-returns-null-in-a-using-clause.md │ ├── opt-in-break-to-revert-from-different-4_5-sql-generation-to-simpler-4_0-sql-generation.md │ ├── page_loadcomplete-event-no-longer-causes-system_web_ui_webcontrols_entitydatasource-control-to-invoke-data-binding.md │ ├── path-colon-checks-are-stricter.md │ ├── persian-calendar-now-uses-the-hijri-solar-algorithm.md │ ├── previewlostkeyboardfocus-is-called-repeatedly-if-its-handler-shows-a-message-box.md │ ├── product-versioning-changes-in-net-framework-4-6-and-later.md │ ├── profiling-asp_net-mvc4-apps-can-lead-to-fatal-execution-engine-error.md │ ├── reflection-objects-can-no-longer-be-passed-from-managed-code-to-out-of-process-dcom-clients.md │ ├── remove-ssl3-from-the-wcf-transportdefaults.md │ ├── resgen-block-mark-of-the-web-content.md │ ├── resolveassemblyreference-task-now-warns-of-dependencies-with-the-wrong-architecture.md │ ├── ribbongroup-background-is-set-to-transparent-in-localized-builds.md │ ├── right-clicking-on-a-wpf-datagrid-row-header-changes-the-datagrid-selection.md │ ├── rsacng-now-correctly-loads-rsa-keys-of-non-standard-keysize.md │ ├── rsacng_verifyhash-now-returns-false-for-any-verification-failure.md │ ├── scrolling-a-wpf-treeview-or-grouped-listbox-in-a-virtualizingstackpanel-can-cause-a-hang.md │ ├── serialization-deserialization-of-mailmessage-objects.md │ ├── serialization-of-control-characters-with-datacontractjsonserializer-is-now-compatible-with-ecmascript-v6-and-v8.md │ ├── servicepointmanager.securityprotocol-defaults-to-securityprotocoltype.systemdefault.md │ ├── sharing-session-state-with-asp_net-stateserver-requires-all-servers-in-the-web-farm-to-use-the-same-_net-framework-version.md │ ├── soapformatter-cannot-deserialize-hashtable-and-similar-ordered-collection-objects.md │ ├── some-_net-apis-cause-first-chance-(handled)-entrypointnotfoundexceptions.md │ ├── some-workflow-drag-and-drop-apis-are-obsolete.md │ ├── sql-server-database-connection-that-resolves-to-localhost.md │ ├── sql_variant-data-uses-sql_variant-collation-rather-than-database-collation.md │ ├── sqlbulkcopy-uses-destination-column-encoding-for-strings.md │ ├── sqlconnection-can-no-longer-connect-to-sql-server-1997-or-databases-using-the-via-adapter.md │ ├── sqlconnection_open-fails-on-windows-7-with-non-ifs-winsock-bsp-or-lsp-present.md │ ├── sslstream-support-for-tls-alerts.md │ ├── system_activities-is-now-aptca.md │ ├── system_net_peertopeer_collaboration-unavailable-on-windows-8.md │ ├── system_servicemodel_web_webservicehost-object-no-longer-adds-a-default-endpoint.md │ ├── system_threading_monitor_lock_acquisition_scalability_improvement.md │ ├── system_threading_tasks_task-no-longer-throw-objectdisposedexception-after-object-is-disposed.md │ ├── system_threading_timer_lock_contention_improvement.md │ ├── system_uri-escaping-now-supports-rfc-3986.md │ ├── system_uri-parsing-adheres-to-rfc-3987.md │ ├── system_uri_iswellformeduristring-method-returns-false-for-relative-uris-with-a-colon-char-in-first-segment.md │ ├── targetframeworkname-for-default-app-domain-no-longer-defaults-to-null-if-not-set.md │ ├── the-_net-framework-4_6-does-not-use-a-4_5_x_x-version-when-registering-itself-in-the-registry.md │ ├── the-replace-method-in-odata-urls-is-disabled-by-default.md │ ├── throttle-concurrent-requests-per-session.md │ ├── tls-1-x-by-default-passes-sch-send-aux-record-flag-to-the-underlying-schannel-api.md │ ├── two-way-data-binding-to-a-property-with-a-non-public-setter-is-not-supported.md │ ├── type_isassignablefrom-returns-wrong-result-for-generic-variables-with-constraints.md │ ├── unexpected-invalidcastexception-from-invokemethod-activity-in-wf4.md │ ├── unicode-data-now-support-standard-v8_0-categories.md │ ├── uri-reserved-characters-consistent.md │ ├── uri-unc-shares-normalized.md │ ├── uri-unicode-bidirectional-characters.md │ ├── uri-unicode-scheme-only-relative.md │ ├── vb_net-no-longer-supports-partial-namespace-qualification-for-system_windows-apis.md │ ├── wcf-accessbility-combobox-high-contrast-issue-in-svcTraceViewer-tool.md │ ├── wcf-avoid-endless-recursion-in-two-iworkflowinstancemanagement-apis.md │ ├── wcf-binding-with-the-transportwithmessagecredential-security-mode.md │ ├── wcf-deadlock-results-when-using-reentrant-services.md │ ├── wcf-message-security-unable-to-use-tls1_1-and-tls1_2.md │ ├── wcf-services-using-nettcp-with-ssl-security-and-md5-certificate-authentication.md │ ├── wcf-transport-security-supports-certificates-stored-using-cng.md │ ├── webutility_htmldecode-no-longer-decodes-invalid-input-sequences.md │ ├── webutility_htmlencode-and-webutility_htmldecode-round-trip-bmp-correctly.md │ ├── wf-serializes-expressions_literal-datetimes-differently.md │ ├── windows-forms-icon-tobitmap-method-successfully-converts-icons-with-png-frames.md │ ├── winform's-DomainUpDownControl-button's-actions-in-sync.md │ ├── winform's-checkforoverflowunderflow-property-is-now-true-for-system_drawing.md │ ├── winforms-ContextMenuStrip-SourceControl-property-change.md │ ├── winforms-PrivateFontCollection-Font-handle-leak-fix.md │ ├── winforms-accessibility-changes-471.md │ ├── winforms-accessibility-changes-472.md │ ├── winforms-accessibility-changes-48.md │ ├── winforms-hdpi-changes-48.md │ ├── winrt-stream-adapters-no-long-call-flushasync-automatically-on-close.md │ ├── workflow-3_0-types-are-obsolete.md │ ├── workflow-checksums-changed-from-md5-to-sha1.md │ ├── workflow-designer-accessibility-4-8.md │ ├── workflow-designer-accessibility.md │ ├── workflow-now-throws-original-exception-instead-of-nullreferenceexception-in-some-cases.md │ ├── workflow-sql-persistence-adds-primary-key-clusters-and-disallows-null-values-in-some-columns.md │ ├── workflow-xaml-checksums-for-symbols-changed-from-sha1-to-sha256.md │ ├── workflow-xoml-definition-and-sqltrackingservice-caches-changed-from-md5-to-sha256.md │ ├── workflow-xoml-file-checksums-changed-from-md5-to-sha256.md │ ├── workflowdesigner_load-doesn't-remove-symbol-property.md │ ├── wpf-AppDomain-shutdown-handling-may-now-call-Dispatcher.Invoke-in-cleanup-of-WeakEvents.md │ ├── wpf-HwndHost-child-hwnd-correct-size-during-DPI-changes.md │ ├── wpf-KB-focus-now-moves-correctly-across-hosting-scenarios.md │ ├── wpf-MarkupCompiler-default-hash-algorithm-is-now-SHA256.md │ ├── wpf-MasterDetail-ADOdata-PrimaryKey.md │ ├── wpf-PackageDigitalSignatureManager.DefaultHashAlgorithm-is-now-SHA256.md │ ├── wpf-SelectionTextBrush-property-for-non-adorner-selection.md │ ├── wpf-TextBox-PasswordBox-text-selection-does-not-follow-system-colors.md │ ├── wpf-accessibility-improvements-48.md │ ├── wpf-accessibility-improvements.MD │ ├── wpf-aero2-and-aerolite-themes-toggle-button-doesn't-show-any-state.md │ ├── wpf-chained-popups-with-StaysOpen-false.md │ ├── wpf-databinding-should-use-key-not-indexer.md │ ├── wpf-datatemplate-elements-are-now-visible-to-uia.md │ ├── wpf-dispatchersynchronizationcontext_createcopy-now-returns-a-new-copy-instead-of-the-current-instance.md │ ├── wpf-focus-visual-for-radiobutton-and-checkbox-displays-correctly-when-there-is-no-content.md │ ├── wpf-grid-allocation-of-space-to-star-columns.md │ ├── wpf-grid-row-size-allocation-with-collapsed-element.md │ ├── wpf-hang-listbox-duplicate-valuetypes.md │ ├── wpf-hang-when-resizing-a-grid.md │ ├── wpf-keyboard-navigation-listbox-hyperlink.md │ ├── wpf-layout-rounding-of-margins-has-changed.md │ ├── wpf-nullreferenceexception-in-exception-handling-code-from-imagesourceconverter_convertfrom.md │ ├── wpf-pencontext-disable-method-calls-on-touch-enabled-systems-may-throw-argumentexception.md │ ├── wpf-performace-improvement-grouping-automation.md │ ├── wpf-pointer-based-touch-stack.md │ ├── wpf-printing-stack-update.md │ ├── wpf-selector-crash-when-removing-item-from-custom-collection.md │ ├── wpf-selector-selectionchanged-and-selectedvalue.md │ ├── wpf-spawns-a-wisptis_exe-process-which-can-freeze-the-mouse.md │ ├── wpf-spell-checking-fail-in-unexpected-ways.md │ ├── wpf-spell-checking-in-text-enabled-controls-will-not-work-in-windows-10-for-languages-not-in-the-input-language-list.md │ ├── wpf-tabcontrol-selectionchanged-and-selectedcontent.md │ ├── wpf-textbox-defaults-to-undo-limit-of-100.md │ ├── wpf-textbox-selected-text-appears-a-different-color-when-the-text-box-is-inactive.md │ ├── wpf-textbox_text-can-be-out-of-sync-with-databinding.md │ ├── wpf-treeviewitem-must-be-used-within-a-treeview.md │ ├── wpf-windows-are-rendered-without-clipping-when-extending-outside-a-single-monitor.md │ ├── x509certificate2_tostring(bool)-does-not-throw-now-when-dotnet-cannot-handle-the-certificate.md │ ├── x509certificateclaimset_findclaims-considers-all-claimtypes.md │ ├── xml-documents-are-now-consider-invalid-if-they-contains-transforms-that-are-not-allowed-on-digital-signatures.md │ ├── xml-schema-validation-is-stricter.md │ ├── xmlschemaexception-now-sets-line-positions-properly.md │ ├── xmlserializer-fails-while-serializing-a-type-that-hides-an-accessible-member-with-an-inaccessible-one.md │ ├── xmlserializer-serializes-fields-differently-in-4_5.md │ ├── xmltextreader-dtd-entity-expansion-is-limited-to-10000000-characters.md │ ├── xmlwriter-throws-on-invalid-surrogate-pairs.md │ ├── xsd-schema-validation-now-correctly-detects-violations-of-unique-constraints-if-compound-keys-are-used-and-one-key-is-empty.md │ ├── xslt-forward-compat-now-works.md │ └── xslt-style-sheet-exception-message-changed.md └── testing-with-ryujit.md ├── LICENSE ├── README.md ├── SECURITY.md ├── data └── platforms.json ├── docs ├── ecosystem-issues.md └── testing-with-ryujit.md ├── dotnet-consumer-projects.md ├── dotnet-developer-projects.md ├── dotnet-free-oss-services.md ├── releases ├── README.md ├── UWP │ ├── LICENSE.TXT │ ├── README.md │ ├── net-native1.4 │ │ └── README.md │ ├── net-native1.6 │ │ └── README.md │ ├── net-native1.7 │ │ └── README.md │ ├── net-native2.0 │ │ ├── README.md │ │ ├── funceval.md │ │ ├── images │ │ │ ├── funceval-0.png │ │ │ ├── funceval-1.png │ │ │ └── funceval-2.png │ │ └── incremental-compilation.md │ ├── net-native2.1 │ │ └── README.md │ └── net-native2.2 │ │ └── README.md ├── net45 │ └── README.md ├── net451 │ └── README.md ├── net452 │ └── README.md ├── net46 │ ├── README.md │ ├── dotnet46-api-changes.html │ ├── dotnet46-api-changes.md │ └── dotnet46-changes.md ├── net461 │ ├── README.md │ ├── dotnet461-api-changes.md │ └── dotnet461-changes.md ├── net462 │ ├── README.md │ ├── dotnet462-api-changes.md │ └── dotnet462-changes.md ├── net47 │ ├── README.md │ ├── dotnet47-api-changes.md │ └── dotnet47-changes.md ├── net471 │ ├── KnownIssues │ │ ├── 470006-GC Crashes with high rate of large object allocation.md │ │ ├── 479874-WPF Touch Stops Working After Prolonged Use of Popups.md │ │ ├── 481090-WPF Touch generates NullReferenceException in ProcessInputReport.md │ │ ├── 489937-WPF Touch and Stylus AccessViolation in GetPenEventMultiple.md │ │ ├── 493108-WPF InvalidCastException when displaying a checked MenuItem.md │ │ ├── 510901-BCL Apps targeting .NET-4.6.1 that use .NET Standard libraries might be broken when running on .NET 4.7.1.md │ │ ├── 514195-Targeting .NET Framework 4.7.1 copies extra files to your bin directory.md │ │ ├── 517815-BCL Applications making heavy use of System.Diagnostics.StackTrace might run more slowly on .NET 4.7.1.md │ │ ├── 517815-BCL Stack traces are missing source information for frames with debug information in the Portable PDB format.md │ │ ├── 521954 - BCL CultureAwareComparer with ignore casing on serialized on previous versions of .NET do not correctly deserialize on .NET 4.7.1.md │ │ ├── 523633 - Setup - OS upgrade to Windows 10 gets the product in bad state.md │ │ ├── 534719-Networking ServicePoint.ConnectionLimit default behavior with loopback changed unexpectedly.md │ │ ├── 534719-Networking.ServicePoint.ConnectionLimit default behavior changed.md │ │ ├── 553390 - BCL - SGEN crashes because it references System.IO.Compression.ZipFile.dll.md │ │ └── 623552-BCL Higher assembly versions that 4.0.0.0 for System.IO.Compression.ZipFile cannot be loaded without a binding redirect.md │ ├── README.md │ ├── dotnet471-api-changes.md │ ├── dotnet471-changes.md │ └── dotnet471-known-issues.md ├── net472 │ ├── KnownIssues │ │ ├── 405199 - WPF Non-Adorner TextSelection Occludes Text.md │ │ ├── 504055 - WPF May Not Show Touch Keyboard In All Scenarios on Windows 10 April 2018 Update.md │ │ ├── 560016-XBAP Applications targeting .NET 2.0,3.5 select wrong runtime version.md │ │ ├── 593963 - WPF Exceptions during AppDomain or process shutdown.md │ │ ├── 599936 - Narrator does not annouce the ReadOnly Status for DataGridView TextBox column with the TextBox column Readonly property set as true.md │ │ ├── 611802 - SQLConnection.ConnectionString throws NullReferenceException .md │ │ ├── 613745 - Single-name references are removed by the SDK when targeting 4.7.2.md │ │ ├── 669153 - Remoting calls made within a transaction can lead to Transaction.Current incorrectly returning null.md │ │ ├── 695400 - Setup fails to install the product after migrating OS from Windows 7 or Windows Server 2008 R2.md │ │ └── 706819 - Winforms applications may have problems rendering UI on latest Operating Systems.md │ ├── README.md │ ├── dotnet472-api-changes.md │ ├── dotnet472-changes.md │ └── dotnet472-known-issues.md ├── net48 │ ├── KnownIssues │ │ ├── 776516-InvalidOperationException in System_Web_ni!System.Web.Hosting.RecycleLimitMonitor+RecycleLimitMonitorSingleton.AlertProxyMonitors.md │ │ └── wpf-pma-window-drag.md │ ├── README.md │ ├── dotnet48-api-changes.md │ ├── dotnet48-changes.md │ └── dotnet48-known-issues.md ├── net481 │ ├── KnownIssues │ │ └── 4.x WCF optional components.md │ ├── README.md │ ├── dotnet481-changes.md │ └── dotnet481-known-issues.md └── reference-assemblies │ └── README.md ├── src └── bc-readme-gen │ ├── Program.cs │ ├── README-template.md │ ├── README.md │ └── bcreadgen.csproj └── tools └── DrainNGENQueue ├── DrainNGenQueue.ps1 └── DrainNGenQueue.wsf /Documentation/KnownIssues/776516-InvalidOperationException in System_Web_ni!System.Web.Hosting.RecycleLimitMonitor+RecycleLimitMonitorSingleton.AlertProxyMonitors.md: -------------------------------------------------------------------------------- 1 | # InvalidOperationException in ASP.Net-RecycleLimitMonitor-AlertProxyMonitors 2 | 3 | ## Symptoms 4 | ASP.Net applications may crash intermittently due to an `InvalidOperationException` in 5 | `System_Web_ni!System.Web.Hosting.RecycleLimitMonitor+RecycleLimitMonitorSingleton.AlertProxyMonitors`. 6 | 7 | ## Cause 8 | This issue was introduced when ASP.Net 4.7 separated cache management and memory monitoring. This new `RecycleLimitMonitorSingleton` monitors worker process private bytes usage against the recycling limit for the process, and when 9 | the limit is near, it alerts a set of "proxy monitors" in each registered AppDomain so they can take action to avoid a process 10 | recycle. The collection of "proxy monitors" being enumerated was not thread-safe, though, so new AppDomains spinning up or old 11 | AppDomains shutting down while this monitor enumerated the collection could result in this unhandled `InvalidOperationException` 12 | in the default AppDomain, causing a crash. 13 | 14 | ## Workaround 15 | There is no reliable workaround. If the environment does not tend to consume private bytes near the recycling limit, or if 16 | web app domain lifetimes tend to last the entire length of the process lifetime, then chances of hitting this issue are 17 | extremely minimal. More private bytes consumption and/or more AppDomain recycling increases the odds of hitting this exception condition. 18 | 19 | ## Resolution 20 | A hotfix for this issue is planned for .Net 4.8. This page will be updated with a link to the hotfix when it becomes available. 21 | -------------------------------------------------------------------------------- /Documentation/KnownIssues/README.md: -------------------------------------------------------------------------------- 1 | # .NET Framework Known Issues 2 | 3 | The following links provide the known issues about the various .NET Framework versions at the time of their release. They describe the underlying issue and how to resolve them. 4 | 5 | - [.NET Framework 4.8.1](https://github.com/Microsoft/dotnet/blob/master/releases/net481/dotnet481-known-issues.md) 6 | - [.NET Framework 4.8](http://go.microsoft.com/fwlink/?LinkId=2086606) 7 | - [.NET Framework 4.7.2](http://go.microsoft.com/fwlink/?LinkId=863257) 8 | - [.NET Framework 4.7.1](http://go.microsoft.com/fwlink/?LinkId=852101) 9 | - [.NET Framework 4.7](http://go.microsoft.com/fwlink/?LinkId=825308) 10 | - [.NET Framework 4.6.2](http://go.microsoft.com/fwlink/?LinkId=780606) 11 | - [.NET Framework 4.6.1](http://go.microsoft.com/fwlink/?LinkId=671749) 12 | - [.NET Framework 4.6](https://support.microsoft.com/help/3047761/known-issues-for-the--net-framework-4-6) 13 | - [.NET Framework 4.5.2](https://support.microsoft.com/help/2962547/known-issues-for-the-net-framework-4-5-2) 14 | -------------------------------------------------------------------------------- /Documentation/KnownIssues/Template/NETFXKnownIssuesTemplate.md: -------------------------------------------------------------------------------- 1 | # [|Known Issue Title|] 2 | // There is no built-in way to do comments in Markdown, so this template uses a C#-style comment to mark comments. Please REMOVE ALL COMMENTS before submission. 3 | // Please use proper markdown syntax for code snippets. See for examples. 4 | // Entries with [| ... |] are fields that must be updated. 5 | 6 | ## Symptoms 7 | [|Description of the symptom(s)|] 8 | // A description of the symptom(s) that exhibit due to the underlying issue. 9 | 10 | ## Cause 11 | [|Description of the root cause(s)|] 12 | 13 | ## Workaround 14 | [|Description of the workaround, if available|] 15 | 16 | ## Resolution 17 | [|Description of the resolution|] 18 | // Add the steps that will allow users to resolve the underlying problem including any workarounds. 19 | // In future, if there is a fix available, then also update this page with the latest information or future update/hotfix link. 20 | 21 | ## More information 22 | // This is an optional section. Add any other relevant information, if available, like link(s) to help docs, blog etc. 23 | -------------------------------------------------------------------------------- /Documentation/KnownIssues/wpf-pma-window-drag.md: -------------------------------------------------------------------------------- 1 | # Per-Monitor DPI-aware WPF applications position mouse cursor incorrectly when dragging between monitors 2 | 3 | ## Symptoms 4 | A user running a WPF application that enables the Per-Monitor DPI awareness feature introduced in .NET Framework 4.7.2 may notice that the mouse cursor is in a different location relative to the window after dragging the window from one monitor to another. 5 | 6 | ## Cause 7 | This issue is caused by a calculation error when resizing and placing the window after switching DPI. 8 | -------------------------------------------------------------------------------- /Documentation/README.md: -------------------------------------------------------------------------------- 1 | # Documentation 2 | 3 | The following documents are available in this repo: 4 | 5 | - [.NET Framework Application Compatibility](compatibility/README.md) 6 | - [.NET Framework Known Issues](KnownIssues/README.md) 7 | - [.NET Framework Release Notes](../releases/README.md) 8 | - [Testing with RyuJIT](testing-with-ryujit.md) 9 | 10 | The following .NET Framework documentation is available from Microsoft: 11 | 12 | - [.NET Framework Documentation](https://docs.microsoft.com/dotnet/articles/framework/) 13 | - [.NET Core Documentation](https://docs.microsoft.com/dotnet/articles/core/) 14 | - [.NET Standard Documentation](https://docs.microsoft.com/dotnet/standard/net-standard) 15 | - [General .NET Development](https://docs.microsoft.com/dotnet/standard/) 16 | -------------------------------------------------------------------------------- /Documentation/compatibility/!categories.md: -------------------------------------------------------------------------------- 1 | | Category| 2 | |---------| 3 | |ADO.NET| 4 | |ASP.NET| 5 | |C#| 6 | |ClickOnce| 7 | |Core| 8 | |Data| 9 | |Debugger| 10 | |Entity Framework| 11 | |Globalization| 12 | |JIT| 13 | |LINQ| 14 | |Managed Extensibility Framework (MEF)| 15 | |MSBuild| 16 | |Networking| 17 | |Printing| 18 | |Security| 19 | |Serialization| 20 | |Setup and Deployment| 21 | |Visual Basic .NET| 22 | |Web Applications| 23 | |Windows Communication Foundation (WCF)| 24 | |Windows Forms| 25 | |Windows Presentation Foundation (WPF)| 26 | |Windows Workflow Foundation (WF)| 27 | |XML, XSLT| 28 | -------------------------------------------------------------------------------- /Documentation/compatibility/GetECDsaPublicKey-correctly-handles-brainpool-curves.md: -------------------------------------------------------------------------------- 1 | ## ECDsaCertificateExtensions.GetECDsaPublicKey correctly handles Brainpool curves 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.8 8 | 9 | ### Source Analyzer Status 10 | NotPlanned 11 | 12 | ### Change Description 13 | Starting with .NET Framework 4.8, the method correctly handles all named curves supported by the OS, including the Brainpool elliptic curves. 14 | 15 | ### Recommended Action 16 | If you encounter compatibility issues with this change on the .NET Framework 4.8 or a later version, you can opt-out of it by adding the following line to the \ section of the app.config file: 17 | 18 | ```xml 19 | 20 | 21 | 22 | ``` 23 | 24 | ### Affected APIs 25 | 26 | * `M:System.Security.Cryptography.X509Certificates.ECDsaCertificateExtensions.GetECDsaPublicKey(System.Security.Cryptography.X509Certificates.X509Certificate2)` 27 | 28 | ### Category 29 | Security 30 | -------------------------------------------------------------------------------- /Documentation/compatibility/WCF-AddressHeaderCollection-now-throws-an-ArgumentException-if-an-addressHeader-element-is-null.md: -------------------------------------------------------------------------------- 1 | ## WCF AddressHeaderCollection now throws an ArgumentException if an addressHeader element is null 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.7.1 8 | 9 | ### Source Analyzer Status 10 | NotPlanned 11 | 12 | ### Change Description 13 | Starting with the .NET Framework 4.7.1, the constructor throws an if one of the elements is `null`. In the .NET Framework 4.7 and earlier versions, no exception is thrown. 14 | 15 | ### Recommended Action 16 | If you encounter compatibility issues with this change on the .NET Framework 4.7.1 or a later version, you can opt-out of it by adding the following line to the `` section of the app.config file:: 17 | 18 | ```xml 19 | 20 | 21 | 22 | 23 | 24 | ``` 25 | 26 | ### Affected APIs 27 | * `M:System.ServiceModel.Channels.AddressHeaderCollection.#ctor(System.Collections.Generic.IEnumerable{System.ServiceModel.Channels.AddressHeader})` 28 | 29 | ### Category 30 | Windows Communication Foundation (WCF) 31 | 32 | -------------------------------------------------------------------------------- /Documentation/compatibility/WCF-MsmqSecureHashAlgorithm-default-value-is-now-SHA256.md: -------------------------------------------------------------------------------- 1 | ## WCF MsmqSecureHashAlgorithm default value is now SHA256 2 | 3 | ### Scope 4 | Minor 5 | ### Version Introduced 6 | 4.7.1 7 | ### Source Analyzer Status 8 | NotPlanned 9 | ### Change Description 10 | Starting with the .NET Framework 4.7.1, the default message signing algorithm in WCF for Msmq messages is SHA256. In the .NET Framework 4.7 and earlier versions, the default message signing algorithm is SHA1. 11 | 12 | - [ ] Quirked 13 | - [ ] Build-time break 14 | 15 | ### Recommended Action 16 | If you run into compatibility issues with this change on the .NET Framework 4.7.1 or later, you can opt-out the change by adding the following line to the ``section of your app.config file: 17 | 18 | 19 | ```xml 20 | 21 | 22 | 23 | 24 | 25 | ``` 26 | 27 | ### Affected APIs 28 | * Not detectable via API analysis 29 | 30 | ### Category 31 | Windows Communication Foundation (WCF) 32 | 33 | 37 | -------------------------------------------------------------------------------- /Documentation/compatibility/WCF-PipeConnection.GetHashAlgorithm-now-uses-SHA256.md: -------------------------------------------------------------------------------- 1 | ## WCF PipeConnection.GetHashAlgorithm now uses SHA256 2 | 3 | ### Scope 4 | Minor 5 | ### Version Introduced 6 | 4.7.1 7 | ### Source Analyzer Status 8 | NotPlanned 9 | ### Change Description 10 | Starting with the .NET Framework 4.7.1, Windows Communication Foundation uses a SHA256 hash to generate random names for named pipes. In the .NET Framework 4.7 and earlier versions, it used a SHA1 hash. 11 | 12 | - [ ] Quirked 13 | - [ ] Build-time break 14 | 15 | ### Recommended Action 16 | If you run into compatibility issue with this change on the .NET Framework 4.7.1 or later, you can opt-out it by adding the following line to the `` section of your app.config file: 17 | 18 | ```xml 19 | 20 | 21 | 22 | 23 | 24 | ``` 25 | 26 | ### Affected APIs 27 | * Not detectable via API analysis 28 | 29 | ### Category 30 | Windows Communication Foundation (WCF) 31 | 32 | 36 | 37 | -------------------------------------------------------------------------------- /Documentation/compatibility/WCFSDKToolsAccessibilityChangesIn4.7.1.md: -------------------------------------------------------------------------------- 1 | ## Improved accessibility for some .NET SDK tools 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.7.1 8 | 9 | ### Source Analyzer Status 10 | NotPlanned 11 | 12 | ### Change Description 13 | 14 | In the .NET Framework SDK 4.7.1, the SvcConfigEditor.exe and SvcTraceViewer.exe tools have been improved by fixing varied accessibility issues. Most of these were small issues like a name not being defined or certain UI automation patterns not being implemented correctly. While many users wouldn’t be aware of these incorrect values, customers who use assistive technologies like screen readers will find these SDK tools more accessible. Certainly, these fixes change some previous behaviors, like keyboard focus order. 15 | 16 | In order to get all the accessibility fixes in these tools, you can the following to your app.config file: 17 | ```xml 18 | 19 | 20 | 21 | ``` 22 | 23 | - [x] Quirked 24 | - [ ] Build-time break 25 | 26 | ### Affected APIs 27 | * Not detectable via API analysis 28 | 29 | ### Category 30 | Windows Communication Foundation (WCF) 31 | 32 | 36 | -------------------------------------------------------------------------------- /Documentation/compatibility/accessing-a-wpf-datagrid's-selected-items-from-a-handler-of-the-datagrid's-unloadingrow-event-can-cause-a-nullreferenceexception.md: -------------------------------------------------------------------------------- 1 | ## Accessing a WPF DataGrid's selected items from a handler of the DataGrid's UnloadingRow event can cause a NullReferenceException 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Version Reverted 10 | 4.6 11 | 12 | ### Source Analyzer Status 13 | Planned 14 | 15 | ### Change Description 16 | 17 | Due to a bug in the .NET Framework 4.5, event handlers for 18 | events involving the removal of a row 19 | can cause a to be 20 | thrown if they access the 21 | 's 22 | 23 | or 24 | properties. 25 | 26 | - [ ] Quirked 27 | - [ ] Build-time break 28 | 29 | ### Recommended Action 30 | This issue has been fixed in the .NET Framework 4.6 and may be addressed by upgrading to that version of the .NET Framework. 31 | 32 | ### Affected APIs 33 | * `E:System.Windows.Controls.DataGrid.UnloadingRow` 34 | * `E:System.Windows.Controls.DataGrid.UnloadingRowDetails` 35 | 36 | ### Category 37 | Windows Presentation Foundation (WPF) 38 | 39 | 40 | -------------------------------------------------------------------------------- /Documentation/compatibility/appdomainsetup_dynamicbase-is-no-longer-randomized-by-userandomizedstringhashalgorithm.md: -------------------------------------------------------------------------------- 1 | ## AppDomainSetup.DynamicBase is no longer randomized by UseRandomizedStringHashAlgorithm 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.6 8 | 9 | ### Source Analyzer Status 10 | Planned 11 | 12 | ### Change Description 13 | 14 | Prior to the .NET Framework 4.6, the value of 15 | would be 16 | randomized between application domains, or between processes, if 17 | UseRandomizedStringHashAlgorithm was enabled in the app's config file. Beginning 18 | in the .NET Framework 4.6, 19 | will 20 | return a stable result between different instances of an app running, and 21 | between different app domains. Dynamic bases will still differ for different 22 | apps; this change only removes the random naming element for different instances 23 | of the same app. 24 | 25 | - [ ] Quirked 26 | - [ ] Build-time break 27 | 28 | ### Recommended Action 29 | 30 | Be aware that enabling `UseRandomizedStringHashAlgorithm` will not result in 31 | being 32 | randomized. If a random base is needed, it must be produced in your app's code 33 | rather than via this API. 34 | 35 | ### Affected APIs 36 | * `P:System.AppDomainSetup.DynamicBase` 37 | 38 | ### Category 39 | Core 40 | 41 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /Documentation/compatibility/asp-net-httpruntime-appdomainapppath-throws-nullreferenceexception.md: -------------------------------------------------------------------------------- 1 | ## HttpRuntime.AppDomainAppPath Throws a NullReferenceException 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.6.2 8 | 9 | ### Version Reverted 10 | 4.7 11 | 12 | ### Source Analyzer Status 13 | NotPlanned 14 | 15 | ### Change Description 16 | In the .NET Framework 4.6.2, the runtime throws a `T:System.NullReferenceException` when retrieving a `P:System.Web.HttpRuntime.AppDomainAppPath` value that includes null characters. 17 | 18 | In the .NET Framework 4.6.1 and earlier versions, the runtime throws an `T:System.ArgumentNullException`. 19 | 20 | - [ ] Quirked 21 | - [X] Build-time break 22 | 23 | ### Recommended Action 24 | You can do either of the follow to respond to this change: 25 | 26 | - Handle the `T:System.NullReferenceException` if you application is running on the .NET Framework 4.6.2. 27 | 28 | - Upgrade to the .NET Framework 4.7, which restores the previous behavior and throws an `T:System.ArgumentNullException`. 29 | 30 | ### Affected APIs 31 | `P:System.Web.HttpRuntime.AppDomainAppPath` 32 | 33 | ### Category 34 | ASP.NET 35 | 36 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /Documentation/compatibility/asp_net-mvc-now-escapes-spaces-in-strings-passed-in-via-route-parameters.md: -------------------------------------------------------------------------------- 1 | ## ASP.NET MVC now escapes spaces in strings passed in via route parameters 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.5.2 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | In order to conform to RFC 2396, spaces in route paths are now escaped when populating action parameters from a route. So, whereas `/controller/action/some data` would previously match the route `/controller/action/{data}` and provide `some data` as the data parameter, it will now provide `some%20data` instead. 14 | 15 | - [ ] Quirked 16 | - [ ] Build-time break 17 | 18 | ### Recommended Action 19 | Code should be updated to unescape string parameters from a route. If the original URI is needed, it can be accessed with the .OriginalString API. 20 | 21 | ### Affected APIs 22 | * `M:System.Web.Mvc.RouteAttribute.#ctor(System.String)` 23 | 24 | ### Category 25 | ASP.NET 26 | 27 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /Documentation/compatibility/aspnet-asp.net-validationcontext.membername-is-null-sometimes.md: -------------------------------------------------------------------------------- 1 | ## ASP.NET ValidationContext.MemberName is not NULL when using custom DataAnnotations.ValidationAttribute 2 | 3 | ### Version Introduced 4 | 4.8 5 | 6 | ### Change Description 7 | In .NET Framework 4.7.2 and earlier versions, when using a custom , the property returns `null`. In .NET Framework 4.8, it returns the member name. 8 | 9 | 10 | ### Recommended Action 11 | The default behavior of the property remains the same. To retrieve a valid value from the `ValidationContext.MemberName` property, add the following setting to your app config file: 12 | 13 | ```xml 14 | 15 | 16 | ... 17 | 18 | ... 19 | 20 | 21 | ``` 22 | 23 | ### Affected APIs 24 | 25 | * `P:System.ComponentModel.DataAnnotations.ValidationContext.MemberName` 26 | 27 | ### Category 28 | ASP.NET 29 | 30 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /Documentation/compatibility/aspnet-fix-handling-input-and-label-attributes-for-webforms-checkbox-control.md: -------------------------------------------------------------------------------- 1 | ## ASP.NET Fix handling of InputAttributes and LabelAttributes for WebForms CheckBox control 2 | 3 | ### Version Introduced 4 | 4.8 5 | 6 | ### Change Description 7 | For applications that target .NET Framework 4.7.2 and earlier versions, and that are programmatically added to a WebForms control are lost 8 | after postback. For applications that target .NET Framework 4.8 or later versions, they are preserved after postback. 9 | 10 | ### Recommended Action 11 | For the correct behavior for restoring attributes on postback, set the `targetFrameworkVersion` to 4.8 or higher. For example: 12 | 13 | ```xml 14 | 15 | 16 | 17 | 18 | 19 | ``` 20 | 21 | Setting it lower, or not at all, preserves the old incorrect behavior. 22 | 23 | ### Affected APIs 24 | 25 | * `T:System.Web.UI.WebControls.CheckBox` 26 | 27 | ### Category 28 | ASP.NET 29 | 30 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /Documentation/compatibility/aspnet-invalid-results-from-httprequest.getattributefromheader.md: -------------------------------------------------------------------------------- 1 | ## ASP.NET Incorrect multipart handling may result in lost form data. 2 | 3 | ### Version Introduced 4 | 4.8 5 | 6 | ### Change Description 7 | In applications that target .NET Framework 4.7.2 and earlier versions, ASP.Net might incorrectly parse multipart boundary values, 8 | resulting in form data being unavailable during request execution. Applications that target .NET Framework 4.8 or later versions 9 | correctly parse multipart data, so form values are available during request execution. 10 | 11 | ### Recommended Action 12 | Starting with applications running on .NET Framework 4.8, when targeting .NET Framework 4.8 or later by using the `targetFrameworkVersion` element, the default behavior changes to strip delimiters. When targeting previous framework versions or not using `targetFrameworkVersion`, trailing delimiters for 13 | some values are still returned. 14 | 15 | This behavior can also be explicitly controlled with an `appSetting`: 16 | 17 | ```xml 18 | 19 | 20 | ... 21 | 22 | ... 23 | 24 | 25 | ``` 26 | 27 | ### Affected APIs 28 | 29 | * `P:System.Web.HttpRequest.Form` 30 | * `P:System.Web.HttpRequest.Files` 31 | * `P:System.Web.HttpRequest.ContentEncoding` 32 | 33 | ### Category 34 | ASP.NET 35 | 36 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /Documentation/compatibility/assemblies-compiled-with-regex_compiletoassembly-breaks-between-4_0-and-4_5.md: -------------------------------------------------------------------------------- 1 | ## Assemblies compiled with Regex.CompileToAssembly breaks between 4.0 and 4.5 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Planned 11 | 12 | ### Change Description 13 | If an assembly of compiled regular expressions is built with the .NET Framework 4.5 but targets the .NET Framework 4, attempting to use one of the regular expressions in that assembly on a system with .NET Framework 4 installed throws an exception. 14 | 15 | - [ ] Quirked 16 | - [ ] Build-time break 17 | 18 | ### Recommended Action 19 | To work around this problem, you can do either of the following: 20 | 21 | - Build the assembly that contains the regular expressions with the .NET Framework 4. 22 | - Use an interpreted regular expression. 23 | 24 | ### Affected APIs 25 | * `M:System.Text.RegularExpressions.Regex.CompileToAssembly(System.Text.RegularExpressions.RegexCompilationInfo[],System.Reflection.AssemblyName)` 26 | * `M:System.Text.RegularExpressions.Regex.CompileToAssembly(System.Text.RegularExpressions.RegexCompilationInfo[],System.Reflection.AssemblyName,System.Reflection.Emit.CustomAttributeBuilder[])` 27 | * `M:System.Text.RegularExpressions.Regex.CompileToAssembly(System.Text.RegularExpressions.RegexCompilationInfo[],System.Reflection.AssemblyName,System.Reflection.Emit.CustomAttributeBuilder[],System.String)` 28 | 29 | ### Category 30 | Core 31 | 32 | 33 | -------------------------------------------------------------------------------- /Documentation/compatibility/binding-a-wpf-selector-property-(such-as-'selecteditem')-to-a-static-property-does-not-work.md: -------------------------------------------------------------------------------- 1 | ## Binding a WPF selector property (such as 'SelectedItem') to a static property does not work 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Version Reverted 10 | 4.5 11 | 12 | ### Source Analyzer Status 13 | Planned 14 | 15 | ### Change Description 16 | In the .NET Framework 4.5, WPF Selector properties (such as 'SelectedItem' on or ) that are data-bound to static properties do not properly update when their bound property is updated. 17 | 18 | - [ ] Quirked 19 | - [ ] Build-time break 20 | 21 | ### Recommended Action 22 | This behavior was reverted in a servicing update for the .NET Framework 4.5. To fix this issue, update the .NET Framework 4.5, or upgrade to .NET Framework 4.5.1 or later. 23 | 24 | ### Affected APIs 25 | * Not detectable via API analysis 26 | 27 | ### Category 28 | Windows Presentation Foundation (WPF) 29 | 30 | [More information](https://social.msdn.microsoft.com/Forums/vstudio/56ff3199-5abc-454e-87f7-bafff43e7422/net-45-critical-selecteditem-not-setting-binding-item?forum=wpf) 31 | 32 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /Documentation/compatibility/calling-datagrid_commitedit-from-a-celleditending-handler-drops-focus.md: -------------------------------------------------------------------------------- 1 | ## Calling DataGrid.CommitEdit from a CellEditEnding handler drops focus 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Version Reverted 10 | 4.5.2 11 | 12 | ### Source Analyzer Status 13 | Available 14 | 15 | ### Change Description 16 | Calling 17 | from one of the 's 18 | 19 | event handlers causes the 20 | to lose focus. 21 | 22 | - [ ] Quirked 23 | - [ ] Build-time break 24 | 25 | ### Recommended Action 26 | This bug has been fixed in the .NET Framework 4.5.2, so it can be avoided by 27 | upgrading the .NET Framework. Alternatively, it can be avoided by explicitly 28 | re-selecting the 29 | after calling . 30 | 31 | ### Affected APIs 32 | * `M:System.Windows.Controls.DataGrid.CommitEdit` 33 | * `M:System.Windows.Controls.DataGrid.CommitEdit(System.Windows.Controls.DataGridEditingUnit,System.Boolean)` 34 | 35 | ### Category 36 | Windows Presentation Foundation (WPF) 37 | 38 | 39 | -------------------------------------------------------------------------------- /Documentation/compatibility/changing-the-isenabled-property-of-the-parent-of-a-textblock-control-affects-any-child-controls.md: -------------------------------------------------------------------------------- 1 | ## Changing the IsEnabled property of the parent of a TextBlock control affects any child controls 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.6.2 8 | 9 | ### Source Analyzer Status 10 | Investigating 11 | 12 | ### Change Description 13 | Starting with the .NET Framework 4.6.2, changing the 14 | property of the 15 | parent of a 16 | control affects any child controls (such as hyperlinks and buttons) of the 17 | control. 18 | 19 | In the .NET Framework 4.6.1 and earlier versions, controls inside a 20 | did not always 21 | reflect the state of the 22 | property of the 23 | parent. 24 | 25 | - [ ] Quirked 26 | - [ ] Build-time break 27 | 28 | ### Recommended Action 29 | None. This change conforms to the expected behavior for controls inside a control. 30 | 31 | ### Affected APIs 32 | - `P:System.Windows.UIElement.IsEnabled` 33 | 34 | ### Category 35 | Windows Presentation Foundation (WPF) 36 | 37 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /Documentation/compatibility/clickonce-supports-sha-256-on-4_0-targeted-apps.md: -------------------------------------------------------------------------------- 1 | ## ClickOnce supports SHA-256 on 4.0-targeted apps 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.6 8 | 9 | ### Source Analyzer Status 10 | Planned 11 | 12 | ### Change Description 13 | Previously, a ClickOnce app with a certificate signed with SHA-256 would require 14 | .NET Framework 4.5 or later to be present, even if the app targeted 4.0. Now, .NET Framework 4.0-targeted 15 | ClickOnce apps can run on .NET Framework 4.0, even if signed with SHA-256. 16 | 17 | - [ ] Quirked 18 | - [x] Build-time break 19 | 20 | ### Recommended Action 21 | This change removes that dependency and allows SHA-256 certificates to be used 22 | to sign ClickOnce apps that target .NET Framework 4 and earlier versions. 23 | 24 | ### Affected APIs 25 | * Not detectable via API analysis 26 | 27 | ### Category 28 | ClickOnce 29 | 30 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /Documentation/compatibility/clr_critical_section_spin_wait_removal.md: -------------------------------------------------------------------------------- 1 | ## CLR critical section spin-wait removal 2 | 3 | ### Scope 4 | 5 | Transparent 6 | 7 | ### Version Introduced 8 | 4.8 9 | 10 | ### Source Analyzer Status 11 | 12 | NotPlanned 13 | 14 | ### Change Description 15 | 16 | By default, when a thread cannot acquire a critical section, it spin-waits for a while before blocking the thread unless it can acquire the critical section. This behavior can lead to poor scalability. 17 | 18 | Starting with applications running under .NET Framework 4.8, it is possible to disable the spin-waiting. This is an opt-in behavior; spin-waiting when a critical section cannot be acquired is the default behavior on all versions of the .NET Framework. 19 | 20 | - [ ] Quirked 21 | - [ ] Build-time break 22 | 23 | ### Recommended Action 24 | 25 | You can disable the default behavior of spin-waiting when a critical section cannot be acquired, in one of the following ways: 26 | 27 | By setting the following environment variable before starting the process: 28 | `COMPlus_Crst_DisableSpinWait=1` 29 | 30 | By including the runtime configuration option in .exe.config. Example: 31 | ```xml 32 | 33 | 34 | 35 | 36 | 37 | 38 | ``` 39 | 40 | ### Affected APIs 41 | 42 | None 43 | -------------------------------------------------------------------------------- /Documentation/compatibility/code-contracts-and-string-isnullorempty-compiler-warning.md: -------------------------------------------------------------------------------- 1 | ## Contract.Invariant or Contract.Requires\ do not consider String.IsNullOrEmpty to be pure 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.6.1 8 | 9 | ### Source Analyzer Status 10 | Investigating 11 | 12 | ### Change Description 13 | For apps that target the .NET Framework 4.6.1, if the invariant contract for or the precondition contract for calls the method, the rewriter emits compiler warning CC1036: "Detected call to method 'System.String.IsNullOrWhteSpace(System.String)' without [Pure] in method." This is a compiler warning rather than a compiler error. 14 | 15 | - [ ] Quirked 16 | - [ ] Build-time break 17 | 18 | ### Recommended Action 19 | 20 | This behavior was addressed in [GitHub Issue #339](https://github.com/Microsoft/CodeContracts/issues/339). To eliminate this warning, you can download and compile an updated version of the source code for the Code Contracts tool from [GitHub](https://github.com/Microsoft/CodeContracts/blob/master/README.md). Download information is found at the bottom of the page. 21 | 22 | ### Affected APIs 23 | - M:System.Diagnostics.Contracts.Contract.Invariant(System.Boolean) 24 | - M:System.Diagnostics.Contracts.Contract.Requires(System.Boolean) 25 | 26 | ### Category 27 | Tools 28 | 29 | 30 | -------------------------------------------------------------------------------- /Documentation/compatibility/coerceisselectionboxhighlighted.md: -------------------------------------------------------------------------------- 1 | ## CoerceIsSelectionBoxHighlighted 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.6 8 | 9 | ### Version Reverted 10 | 4.6.2 11 | 12 | ### Source Analyzer Status 13 | Planned 14 | 15 | ### Change Description 16 | Certain sequences of actions involving a 17 | and its data source can result in a . 18 | 19 | - [ ] Quirked 20 | - [ ] Build-time break 21 | 22 | ### Recommended Action 23 | If possible, upgrade to .NET Framework 4.6.2. 24 | 25 | ### Affected APIs 26 | * `P:System.Windows.Controls.ComboBox.IsSelectionBoxHighlighted` 27 | 28 | ### Category 29 | Windows Presentation Foundation (WPF) 30 | 31 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /Documentation/compatibility/compiler-support-for-type-forwarding-when-multi-targeting-mscorlib.md: -------------------------------------------------------------------------------- 1 | ## Compiler support for type forwarding when multi-targeting mscorlib 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Not planned 11 | 12 | ### Change Description 13 | A new CodeDOM feature allows a compiler to compile against the targeted version 14 | of mscorlib.dll instead of the .NET Framework 4.5 version of mscorlib.dll. 15 | 16 | - [ ] Quirked 17 | - [ ] Build-time break 18 | 19 | ### Recommended Action This change prevents compiler warnings (and compilation 20 | failure in cases where warnings are treated as errors) when CodeDOM finds two 21 | definitions for types that have been type-forwarded. This change may have 22 | unintended side effects only if different versions of reference assemblies are 23 | mixed in a single location. 24 | 25 | ### Affected APIs 26 | * Not detectable via API analysis 27 | 28 | ### Category 29 | Core 30 | 31 | 32 | -------------------------------------------------------------------------------- /Documentation/compatibility/concurrentqueue_trypeek-can-return-an-erroneous-null-via-its-out-parameter.md: -------------------------------------------------------------------------------- 1 | ## ConcurrentQueue<T>.TryPeek can return an erroneous null via its out parameter 2 | 3 | ### Scope 4 | Major 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Version Reverted 10 | 4.5.1 11 | 12 | ### Source Analyzer Status 13 | Available 14 | 15 | ### Change Description 16 | In some multi-threaded scenarios, 17 | 18 | can return true, but populate the out parameter with a null value (instead of 19 | the correct, peeked value). 20 | 21 | - [ ] Quirked 22 | - [ ] Build-time break 23 | 24 | ### Recommended Action 25 | This issue is fixed in the .NET Framework 4.5.1. Upgrading to that Framework will solve the issue. 26 | 27 | ### Affected APIs 28 | * ``M:System.Collections.Concurrent.ConcurrentQueue`1.TryPeek(`0@)`` 29 | 30 | ### Category 31 | Core 32 | 33 | [More information](http://connect.microsoft.com/VisualStudio/feedback/details/762273/bug-in-concurrentqueue-in-net-4-5-trypeek-returns-true-but-no-real-object-returned) 34 | 35 | 36 | -------------------------------------------------------------------------------- /Documentation/compatibility/contentdisposition-datetimes-returns-slightly-different-string.md: -------------------------------------------------------------------------------- 1 | ## ContentDisposition DateTimes returns slightly different string 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.6 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | 14 | String representations of 15 | 's have been 16 | updated, beginning in 4.6, to always represent the hour component of a 17 | with two digits. This is to comply 18 | with [RFC822](https://www.ietf.org/rfc/rfc0822.txt) and 19 | [RFC2822](https://www.ietf.org/rfc/rfc2822.txt). This causes 20 | 21 | to return a slightly different string in 4.6 in scenarios where one of the 22 | disposition's time elements was before 10:00 AM. Note that 23 | ContentDispositions are sometimes serialized via converting them to strings, 24 | so any 25 | operations, serialization, or GetHashCode calls should be reviewed. 26 | 27 | - [ ] Quirked 28 | - [ ] Build-time break 29 | 30 | ### Recommended Action 31 | 32 | Do not expect that string representations of ContentDispositions from different 33 | .NET Framework versions will correctly compare to one another. Convert the 34 | strings back to ContentDispositions, if possible, before conducting a 35 | comparison. 36 | 37 | ### Affected APIs 38 | * `M:System.Net.Mime.ContentDisposition.ToString` 39 | * `M:System.Net.Mime.ContentDisposition.GetHashCode` 40 | 41 | ### Category 42 | Networking 43 | 44 | 45 | -------------------------------------------------------------------------------- /Documentation/compatibility/cor_prf_gc_root_handles-are-not-being-enumerated-by-profilers.md: -------------------------------------------------------------------------------- 1 | ## COR_PRF_GC_ROOT_HANDLEs are not being enumerated by profilers 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.5.1 8 | 9 | ### Version Reverted 10 | 4.6 11 | 12 | ### Source Analyzer Status 13 | Not planned 14 | 15 | ### Change Description 16 | 17 | In the .NET Framework v4.5.1, the profiling API `RootReferences2()` is incorrectly never returning `COR_PRF_GC_ROOT_HANDLE` (they are returned as `COR_PRF_GC_ROOT_OTHER` instead). This issue is fixed beginning in the .NET Framework 4.6. 18 | 19 | - [ ] Quirked 20 | - [ ] Build-time break 21 | 22 | ### Recommended Action 23 | This issue has been fixed in the .NET Framework 4.6 and may be addressed by upgrading to that version of the .NET Framework. 24 | 25 | ### Affected APIs 26 | * Not detectable via API analysis 27 | 28 | ### Category 29 | Core 30 | 31 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /Documentation/compatibility/data-written-to-printsystemjobinfo-jobstream-must-be-in-xps-format.md: -------------------------------------------------------------------------------- 1 | ## Data written to PrintSystemJobInfo.JobStream must be in XPS format 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | NotPlanned 11 | 12 | ### Change Description 13 | The property exposes the stream of a print job. The user can send raw data to the underlying operating system printing components by writing to this stream. 14 | 15 | Starting with the .NET Framework 4.5 on Windows 8 and later versions of the Windows operating system, data written to this stream must be in XPS format as a package stream. 16 | 17 | - [ ] Quirked 18 | - [ ] Build-time break 19 | 20 | ### Recommended Action 21 | 22 | To output print content, you can do either of the following: 23 | 24 | - Use the class to output print content. This is the recommended alternative. 25 | 26 | - Ensure that the data sent to the stream returned by the property is in XPS format as a package stream. 27 | 28 | ### Affected APIs 29 | * `P:System.Printing.PrintSystemJobInfo.JobStream` 30 | 31 | ### Category 32 | Printing 33 | 34 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /Documentation/compatibility/datagridcellspanel_bringintoview-throws-argumentoutofrangeexception.md: -------------------------------------------------------------------------------- 1 | ## DataGridCellsPanel.BringIndexIntoView throws ArgumentOutOfRangeException 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.6.2 8 | 9 | ### Version Reverted 10 | 4.7 11 | 12 | ### Source Analyzer Status 13 | NotPlanned 14 | 15 | ### Change Description 16 | 17 | 18 | will work asynchronously when column virtualization is enabled but the column 19 | widths have not yet been determined. If columns are removed before the 20 | asynchronous work happens, an 21 | can occur. 22 | 23 | - [ ] Quirked 24 | - [ ] Build-time break 25 | 26 | ### Recommended Action 27 | 28 | Any one of the following: 29 | 1. Upgrade to .NET Framework 4.7. 30 | 2. Install the latest servicing patch for .NET Framework 4.6.2. 31 | 3. Avoid removing columns until the asynchronous response to has completed. 32 | 33 | ### Affected APIs 34 | - `M:System.Windows.Controls.DataGrid.ScrollIntoView(System.Object)` 35 | - `M:System.Windows.Controls.DataGrid.ScrollIntoView(System.Object,System.Windows.Controls.DataGridColumn)` 36 | 37 | ### Category 38 | Windows Presentation Foundation (WPF) 39 | 40 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /Documentation/compatibility/dbparameter_precision-and-dbparameter_scale-are-now-public-virtual-members.md: -------------------------------------------------------------------------------- 1 | ## DbParameter.Precision and DbParameter.Scale are now public virtual members 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.5.1 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | 14 | and 15 | are implemented as public virtual properties. They replace the corresponding 16 | explicit interface implementations, 17 | and 18 | . 19 | 20 | - [ ] Quirked 21 | - [x] Build-time break 22 | 23 | ### Recommended Action 24 | 25 | When re-building an ADO.NET database provider, these differences will require 26 | the 'override' keyword to be applied to the Precision and Scale properties. This 27 | is only needed when re-building the components; existing binaries will continue 28 | to work. 29 | 30 | ### Affected APIs 31 | * `P:System.Data.Common.DbParameter.Precision` 32 | * `P:System.Data.Common.DbParameter.Scale` 33 | 34 | ### Category 35 | ADO.NET 36 | 37 | 38 | -------------------------------------------------------------------------------- /Documentation/compatibility/deserialization-of-objects-across-appdomains-can-fail.md: -------------------------------------------------------------------------------- 1 | ## Deserialization of objects across appdomains can fail 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5.1 8 | 9 | ### Source Analyzer Status 10 | Not planned 11 | 12 | ### Change Description 13 | In some cases, when an app uses two or more app domains with different application bases, trying to deserialize objects in the logical call context across app domains throws an exception. 14 | 15 | - [ ] Quirked 16 | - [ ] Build-time break 17 | 18 | ### Recommended Action 19 | See [Mitigation: Deserialization of Objects Across App Domains](~/docs/framework/migration-guide/mitigation-deserialization-of-objects-across-app-domains.md) 20 | 21 | ### Affected APIs 22 | * Not detectable via API analysis 23 | 24 | ### Category 25 | Core 26 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/compatibility/different-exception-handling-for-objectcontext_createdatabase-and-dbproviderservices_createdatabase-methods.md: -------------------------------------------------------------------------------- 1 | ## Different exception handling for ObjectContext.CreateDatabase and DbProviderServices.CreateDatabase methods 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | 14 | Beginning in .NET Framework 4.5, if database creation fails, `CreateDatabase` methods will 15 | attempt to drop the empty database. If that operation succeeds, the original 16 | will be 17 | propagated (instead of the 18 | that was always thrown in .NET Framework 4.0) 19 | 20 | - [ ] Quirked 21 | - [ ] Build-time break 22 | 23 | ### Recommended Action 24 | When catching an 25 | while executing 26 | or 27 | , 28 | SQLExceptions should now also be caught. 29 | 30 | ### Affected APIs 31 | * `M:System.Data.Objects.ObjectContext.CreateDatabase` 32 | * `M:System.Data.Common.DbProviderServices.CreateDatabase(System.Data.Common.DbConnection,System.Nullable{System.Int32},System.Data.Metadata.Edm.StoreItemCollection)` 33 | 34 | ### Category 35 | Entity Framework 36 | 37 | 38 | -------------------------------------------------------------------------------- /Documentation/compatibility/ef-no-longer-throws-for-queryviews-with-specific-characteristics.md: -------------------------------------------------------------------------------- 1 | ## EF no longer throws for QueryViews with specific characteristics 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5.2 8 | 9 | ### Source Analyzer Status 10 | Not planned 11 | 12 | ### Change Description 13 | 14 | Entity Framework no longer throws a 15 | exception when an app 16 | executes a query that involves a QueryView with a 0..1 navigation property that 17 | attempts to include the related entities as part of the query. For example, by 18 | calling `.Include(e => e.RelatedNavProp)`. 19 | 20 | - [ ] Quirked 21 | - [ ] Build-time break 22 | 23 | ### Recommended Action 24 | 25 | This change only affects code that uses QueryViews with 1-0..1 relationships 26 | when running queries that call .Include. It improves reliability and should be 27 | transparent to almost all apps. However, if it causes unexpected behavior, you 28 | can disable it by adding the following entry to the `` section of 29 | the app's configuration file: 30 | 31 | ```xml 32 | 33 | ``` 34 | 35 | ### Affected APIs 36 | * Not detectable via API analysis 37 | 38 | ### Category 39 | Entity Framework 40 | 41 | 42 | -------------------------------------------------------------------------------- /Documentation/compatibility/ef-version-must-match-netfx-version.md: -------------------------------------------------------------------------------- 1 | ## Entity Framework version must match the .NET Framework version 2 | 3 | ### Scope 4 | Major 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Planned 11 | 12 | ### Change Description 13 | 14 | The entity framework version should be matched with the .NET framework version. 15 | Entity Framework 5 is recommended for .NET Framework 4.5. There are some known issues with 16 | EF 4.x in a .NET Framework 4.5 project around 17 | . In .NET 18 | 4.5, these were moved to a different assembly, so there are issues determining 19 | which annotations to use. 20 | 21 | - [ ] Quirked 22 | - [x] Build-time break 23 | 24 | ### Recommended Action 25 | Upgrade to Entity Framework 5 for .NET Framework 4.5 26 | 27 | ### Affected APIs 28 | * Not detectable via API analysis 29 | 30 | ### Category 31 | Entity Framework 32 | 33 | [More information](https://forums.asp.net/t/1779042.aspx) 34 | 35 | 36 | -------------------------------------------------------------------------------- /Documentation/compatibility/encoderparameter-ctor-is-obsolete.md: -------------------------------------------------------------------------------- 1 | ## EncoderParameter ctor is obsolete 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | The 14 | constructor is obsolete now and will introduce build warnings if used. 15 | 16 | - [ ] Quirked 17 | - [x] Build-time break 18 | 19 | ### Recommended Action 20 | Although the 21 | 22 | 23 | constructor will continue to work, the following constructor should be used 24 | instead to avoid the obsolete build warning when re-compiling code with .NET Framework 4.5 25 | tools: 26 | . 27 | 28 | ### Affected APIs 29 | * `M:System.Drawing.Imaging.EncoderParameter.#ctor(System.Drawing.Imaging.Encoder,System.Int32,System.Int32,System.Int32,System.Int32)` 30 | 31 | ### Category 32 | Windows Forms 33 | 34 | 35 | -------------------------------------------------------------------------------- /Documentation/compatibility/entityframework-6_0-loads-very-slowly-in-apps-launched-from-visual-studio.md: -------------------------------------------------------------------------------- 1 | ## EntityFramework 6.0 loads very slowly in apps launched from Visual Studio 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | Launching an app from Visual Studio 2013 that uses EntityFramework 6.0 can be very slow. 14 | 15 | - [ ] Quirked 16 | - [ ] Build-time break 17 | 18 | ### Recommended Action 19 | This issue is fixed in EntityFramework 6.0.2. Update EntityFramework to avoid the performance issue. 20 | 21 | ### Affected APIs 22 | * Not detectable via API analysis 23 | 24 | ### Category 25 | Entity Framework 26 | 27 | [More information](https://entityframework.codeplex.com/workitem/1749) 28 | 29 | 30 | -------------------------------------------------------------------------------- /Documentation/compatibility/enumerable_empty-always-returns-cached-instance.md: -------------------------------------------------------------------------------- 1 | ## Enumerable.Empty<TResult> always returns cached instance 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | 14 | Beginning in .NET Framework 4.5, 15 | always 16 | returns a cached internal instance 17 | . 18 | 19 | Previously, 20 | would cache an empty 21 | at 22 | the time the API was called, meaning that in some conditions in which 23 | was called 24 | rapidly and concurrently, different instances of the type could be returned for 25 | different calls to the API. 26 | 27 | - [ ] Quirked 28 | - [ ] Build-time break 29 | 30 | ### Recommended Action 31 | 32 | Because the previous behavior was non-deterministic, code is unlikely to depend 33 | on it. However, in the unlikely case that empty enumerables are being compared 34 | and expected to sometimes be unequal, explicit empty arrays should be created 35 | (`new T[0]`) instead of using 36 | . 37 | 38 | ### Affected APIs 39 | * ```M:System.Linq.Enumerable.Empty``1``` 40 | 41 | ### Category 42 | LINQ 43 | 44 | 45 | -------------------------------------------------------------------------------- /Documentation/compatibility/error-codes-for-maxrequestlength-or-maxreceivedmessagesize-are-different.md: -------------------------------------------------------------------------------- 1 | ## Error codes for maxRequestLength or maxReceivedMessageSize are different 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Not planned 11 | 12 | ### Change Description 13 | 14 | Messages in WCF web services hosted in Internet Information Services (IIS) or 15 | ASP.NET Development Server that exceed maxRequestLength (in ASP.NET) or 16 | maxReceivedMessageSize (in WCF) have different error code 17 | 18 | The HTTP status code has changed from 400 (Bad Request) to 413 (Request Entity 19 | Too Large), and messages that exceed either the maxRequestLength or the 20 | maxReceivedMessageSize setting throw a 21 | exception. 22 | This includes cases in which the transfer mode is Streamed. 23 | 24 | - [ ] Quirked 25 | - [ ] Build-time break 26 | 27 | ### Recommended Action 28 | 29 | This change facilitates debugging in cases where the message length exceeds the 30 | limits allowed by ASP.NET or WCF. 31 | 32 | You must modify any code that performs processing based on an HTTP 400 status code. 33 | 34 | ### Affected APIs 35 | * Not detectable via API analysis 36 | 37 | ### Category 38 | Windows Communication Foundation (WCF) 39 | 40 | 41 | -------------------------------------------------------------------------------- /Documentation/compatibility/etw-event-names-cannot-differ-only-by-suffix.md: -------------------------------------------------------------------------------- 1 | ## ETW event names cannot differ only by a "Start" or "Stop" suffix 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.6 8 | 9 | 10 | ### Version Reverted 11 | 4.6.2 12 | 13 | ### Source Analyzer Status 14 | NotPlanned 15 | 16 | ### Change Description 17 | In the .NET Framework 4.6 and 4.6.1, the runtime throws an when two Event Tracing for Windows (ETW) event names differ only by a "Start" or "Stop" suffix (as when one event is named `LogUser` and another is named `LogUserStart`). In this case, the runtime cannot construct the event source, which cannot emit any logging. 18 | 19 | - [X] Quirked 20 | - [ ] Build-time break 21 | 22 | ### Recommended Action 23 | 24 | To prevent the exception, ensure that no two event names differ only by a "Start" or "Stop" suffix. 25 | 26 | This requirement is removed starting with the .NET Framework 4.6.2; the runtime can disambiguate event names that differ only by the "Start" and "Stop" suffix. 27 | 28 | ### Affected APIs 29 | * Not detectable via API analysis 30 | 31 | ### Category 32 | Core 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /Documentation/compatibility/eventsource_writeevent-impls-must-pass-writeevent-the-same-parameters-that-it-received-(plus-id).md: -------------------------------------------------------------------------------- 1 | ## EventSource.WriteEvent impls must pass WriteEvent the same parameters that it received (plus ID) 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.5.1 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | 14 | The runtime now enforces the contract that specifies the following: A class 15 | derived from 16 | that defines an ETW event method must call the base class `EventSource.WriteEvent` 17 | method with the event ID followed by the same arguments that the ETW event 18 | method was passed. 19 | 20 | - [ ] Quirked 21 | - [ ] Build-time break 22 | 23 | ### Recommended Action 24 | 25 | An exception is 26 | thrown if an 27 | reads data in 28 | process for an event source that violates this contract. 29 | 30 | ### Affected APIs 31 | * Not detectable via API analysis 32 | 33 | ### Category 34 | Core 35 | 36 | 37 | -------------------------------------------------------------------------------- /Documentation/compatibility/flowdocument-may-show-an-extra-line-of-text.md: -------------------------------------------------------------------------------- 1 | ## FlowDocument may show an extra line of text 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Planned 11 | 12 | ### Change Description 13 | 14 | In some cases, a 15 | 16 | element will display an extra line of text when running on the .NET Framework 17 | 4.5 compared to how it displayed when run on the .NET Framework 4.0. There are 18 | no known cases of the change causing any text to be displayed poorly or 19 | illegibly, but it could cause text to appear that previously was omitted from a 20 | 's 21 | view. 22 | 23 | - [ ] Quirked 24 | - [ ] Build-time break 25 | 26 | ### Recommended Action 27 | 28 | In some cases, decreasing the display element's PageHeight property by one can 29 | restore the previous number of displayed lines. 30 | 31 | ### Affected APIs 32 | * `M:System.Windows.Documents.FlowDocument.#ctor` 33 | * `M:System.Windows.Documents.FlowDocument.#ctor(System.Windows.Documents.Block)` 34 | * `M:System.Windows.Controls.FlowDocumentReader.#ctor` 35 | * `M:System.Windows.Controls.FlowDocumentPageViewer.#ctor` 36 | * `M:System.Windows.Controls.Primitives.DocumentPageView.#ctor` 37 | 38 | ### Category 39 | Windows Presentation Foundation (WPF) 40 | 41 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /Documentation/compatibility/foreach-iterator-variable-is-now-scoped-within-the-iteration.md: -------------------------------------------------------------------------------- 1 | ## Foreach iterator variable is now scoped within the iteration, so closure capturing semantics are different (in C#5) 2 | 3 | ### Scope 4 | Major 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | Beginning with C# 5 (Visual Studio 2012), `foreach` iterator variables are scoped within the iteration. This can cause breaks if code was previously depending on the variables to not be included in the `foreach`'s closure. The symptom of this change is that an iterator variable passed to a delegate is treated as the value it has at the time the delegate is created, rather than the value it has at the time the delegate is invoked. 14 | 15 | - [ ] Quirked 16 | - [x] Build-time break 17 | 18 | ### Recommended Action 19 | Ideally, code should be updated to expect the new compiler behavior. If the old semantics are required, the iterator variable can be replaced with a separate variable which is explicitly placed outside of the loop's scope. 20 | 21 | ### Affected APIs 22 | * Not detectable via API analysis 23 | 24 | ### Categories 25 | Core 26 | 27 | [More information](https://blogs.msdn.com/b/ericlippert/archive/2009/11/12/closing-over-the-loop-variable-considered-harmful.aspx) 28 | 29 | 30 | -------------------------------------------------------------------------------- /Documentation/compatibility/glyphrun-computeinkboundingbox-and-formattedtext-extent-return-different-values-beginning-in-dotnet-4-5.md: -------------------------------------------------------------------------------- 1 | ## GlyphRun.ComputeInkBoundingBox() and FormattedText.Extent return different values beginning in .NET Framework 4.5 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | 14 | Improvements were made to 15 | 16 | and 17 | in 18 | the .NET Framework 4.5 to address issues where the boxes were too small for the 19 | contained glyphs in some cases in the .NET Framework 4.0. As a result of this, 20 | some bounding boxes will be larger beginning in the .NET Framework 4.5, 21 | resulting in subtle differences in UI layout. 22 | 23 | - [ ] Quirked 24 | - [ ] Build-time break 25 | 26 | ### Recommended Action 27 | 28 | Be aware that some glyph bounding box sizes have increased. These changes will 29 | usually improve presentation and hit box testing, but if the older (pre-.NET 30 | 4.5) behavior is desired, it can be opted into by adding the following entry to 31 | the app.config file: 32 | 33 | ```xml 34 | 35 | 36 | 37 | ``` 38 | 39 | ### Affected APIs 40 | * `M:System.Windows.Media.GlyphRun.ComputeInkBoundingBox` 41 | * `P:System.Windows.Media.FormattedText.Extent` 42 | 43 | ### Category 44 | Windows Presentation Foundation (WPF) 45 | 46 | [More information](https://support.microsoft.com/kb/3009678) 47 | 48 | 49 | -------------------------------------------------------------------------------- /Documentation/compatibility/htmltextwriter-does-not-render-br-element-correctly.md: -------------------------------------------------------------------------------- 1 | ## HtmlTextWriter does not render `
` element correctly 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.6 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | 14 | Beginning in the .NET Framework 4.6, calling 15 | 16 | and 17 | 18 | with a `
` element will correctly insert only one `
` (instead of two) 19 | 20 | - [x] Quirked 21 | - [ ] Build-time break 22 | 23 | ### Recommended Action 24 | 25 | If an app depended on the extra `
` tag, 26 | 27 | should be called a second time. Note that this behavior change only affects apps 28 | that target the .NET Framework 4.6 or later, so another option is to target a 29 | previous version of the .NET Framework in order to get the old behavior. 30 | 31 | ### Affected APIs 32 | * `M:System.Web.UI.HtmlTextWriter.RenderBeginTag(System.String)` 33 | * `M:System.Web.UI.HtmlTextWriter.RenderBeginTag(System.Web.UI.HtmlTextWriterTag)` 34 | 35 | ### Category 36 | ASP.NET 37 | 38 | [More information](http://connect.microsoft.com/VisualStudio/feedback/details/813061/htmltextwriter-does-not-render-br-element-correctly) 39 | 40 | 41 | -------------------------------------------------------------------------------- /Documentation/compatibility/httprequest_contentencoding-property-prohibits-utf7.md: -------------------------------------------------------------------------------- 1 | ## HttpRequest.ContentEncoding property prohibits UTF7 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | 14 | Beginning in .NET Framework 4.5, UTF-7 encoding is prohibited in 15 | s' 16 | bodies. Data for applications that depend on incoming UTF-7 data will not decode 17 | properly in some cases. 18 | 19 | - [ ] Quirked 20 | - [ ] Build-time break 21 | 22 | ### Recommended Action 23 | 24 | Ideally, applications should be updated to not use UTF-7 encoding in 25 | s. Alternatively, legacy 26 | behavior can be restored by using the `aspnet:AllowUtf7RequestContentEncoding` 27 | attribute of the 28 | [appSettings](~/docs/framework/configure-apps/file-schema/appsettings/appsettings-element-for-configuration.md) 29 | element. 30 | 31 | ### Affected APIs 32 | * `P:System.Web.HttpRequest.ContentEncoding` 33 | 34 | ### Category 35 | ASP.NET 36 | 37 | 38 | -------------------------------------------------------------------------------- /Documentation/compatibility/httputility_javascriptstringencode-escapes-ampersand.md: -------------------------------------------------------------------------------- 1 | ## HttpUtility.JavaScriptStringEncode escapes ampersand 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | Starting with the .NET Framework 4.5, 14 | 15 | escapes the ampersand (&) character. 16 | 17 | - [ ] Quirked 18 | - [ ] Build-time break 19 | 20 | ### Recommended Action 21 | 22 | If your app depends on the previous behavior of this method, you can add an 23 | aspnet:JavaScriptDoNotEncodeAmpersand setting to the 24 | [ASP.NET appSettings element](https://docs.microsoft.com/previous-versions/aspnet/hh975440(v=vs.120)) 25 | in your configuration file. 26 | 27 | ### Affected APIs 28 | * `M:System.Web.HttpUtility.JavaScriptStringEncode(System.String)` 29 | * `M:System.Web.HttpUtility.JavaScriptStringEncode(System.String,System.Boolean)` 30 | 31 | ### Category 32 | ASP.NET 33 | 34 | 35 | -------------------------------------------------------------------------------- /Documentation/compatibility/icommand_canexecutechanged-event-behaviour-changed-in-_net-4_5.md: -------------------------------------------------------------------------------- 1 | ## ICommand.CanExecuteChanged event behaviour changed in .NET Framework 4.5 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Version Reverted 10 | 4.5 11 | 12 | ### Source Analyzer Status 13 | Planned 14 | 15 | ### Change Description 16 | 17 | In the .NET Framework 4.5, a 18 | was 19 | ignored unless the sender of the event was the same object as the object that 20 | raised the event. This bug was fixed in .NET Framework 4.5 servicing updates. 21 | 22 | - [ ] Quirked 23 | - [ ] Build-time break 24 | 25 | ### Recommended Action 26 | 27 | This bug has been fixed in the .NET Framework 4.5 servicing releases, so it can 28 | be avoided by making sure that the .NET Framework is up-to-date or by upgrading 29 | to .NET Framework 4.5.1. Alternatively, application code using 30 | can be modified to 31 | make sure that the sender when raising a 32 | 33 | command is the same as the object raising the event. 34 | 35 | ### Affected APIs 36 | * `E:System.Windows.Input.ICommand.CanExecuteChanged` 37 | 38 | ### Category 39 | Windows Presentation Foundation (WPF) 40 | 41 | [More information](http://connect.microsoft.com/VisualStudio/feedback/details/751429/wpf-icommand-canexecutechanged-behaviour-change-in-net-4-5) 42 | 43 | 44 | -------------------------------------------------------------------------------- /Documentation/compatibility/il-ret-not-allowed-in-a-try-region.md: -------------------------------------------------------------------------------- 1 | ## IL ret not allowed in a try region 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.6 8 | 9 | ### Source Analyzer Status 10 | Planned 11 | 12 | ### Change Description 13 | Unlike the JIT64 just-in-time compiler, RyuJIT (used in .NET Framework 4.6) does not allow an IL ret instruction in a try region. Returning from a try region is disallowed by the ECMA-335 specification, and no known managed compiler generates such IL. However, the JIT64 compiler will execute such IL if it is generated using reflection emit. 14 | 15 | - [x] Quirked 16 | - [ ] Build-time break 17 | 18 | ### Recommended Action 19 | If an app is generating IL that includes a ret opcode in a try region, the app may target .NET Framework 4.5 to use the old JIT and avoid this break. Alternatively, the generated IL may be updated to return after the try region. 20 | 21 | ### Affected APIs 22 | * Not detectable via API analysis 23 | 24 | ### Category 25 | JIT 26 | 27 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /Documentation/compatibility/incorrect-code-generation-when-passing-and-comparing-uint16-values.md: -------------------------------------------------------------------------------- 1 | ## Incorrect code generation when passing and comparing UInt16 values 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.7 8 | 9 | ### Version Reverted 10 | 4.7.1 11 | 12 | ### Source Analyzer Status 13 | NotPlanned 14 | 15 | ### Change Description 16 | Because of changes introduced in the .NET Framework 4.7, in some cases the code generated by the JIT compiler in applications running on the .NET Framework 4.7 incorrectly compares two `T:System.UInt16` values. For more information, see [Issue #11508: Silent bad codegen when passing and comparing ushort args](https://github.com/dotnet/coreclr/issues/11508) on GitHub.com. 17 | 18 | - [ ] Quirked 19 | - [ ] Build-time break 20 | 21 | ### Recommended Action 22 | 23 | If you encounter issues in the comparison of 16-bit unsigned values in the .NET Framework 4.7, upgrade to the .NET Framework 4.7.1. 24 | 25 | ### Affected APIs 26 | - * Not detectable via API analysis 27 | 28 | ### Category 29 | JIT 30 | 31 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /Documentation/compatibility/interop-event-handlers-safearray.md: -------------------------------------------------------------------------------- 1 | ## .NET COM successfully marshals ByRef SafeArray parameters on events 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.8 8 | 9 | ### Source Analyzer Status 10 | NotPlanned 11 | 12 | ### Change Description 13 | In the .NET Framework 4.7.2 and earlier versions, a ByRef [SafeArray](https://docs.microsoft.com/windows/desktop/api/oaidl/ns-oaidl-safearray) parameter on a COM event would fail to marshal back to native code. With this change the [SafeArray](https://docs.microsoft.com/windows/desktop/api/oaidl/ns-oaidl-safearray) is now marshalled successfully. 14 | 15 | - [ x ] Quirked 16 | - [ ] Build-time break 17 | 18 | ### Recommended Action 19 | If properly marshalling ByRef SafeArray parameters on COM Events breaks execution, you can disable this code by adding the following configuration switch to your application config: 20 | 21 | ```xml 22 | 23 | 24 | 25 | ``` 26 | 27 | ### Category 28 | Core 29 | -------------------------------------------------------------------------------- /Documentation/compatibility/ipad-should-not-be-used-in-custom-capabilities-file-because-it-is-now-a-browser-capability.md: -------------------------------------------------------------------------------- 1 | ## IPad should not be used in custom capabilities file because it is now a browser capability 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Planned 11 | 12 | ### Change Description 13 | Beginning in .NET Framework 4.5, iPad is an identifier in the default ASP.NET browser capabilities file, so it should not be used in a custom capabilities file 14 | 15 | - [ ] Quirked 16 | - [ ] Build-time break 17 | 18 | ### Recommended Action 19 | If iPad-specific capabilities are required, it is necessary to modify iPad behavior by setting capabilities on the pre-defined gateway refID "IPad" instead of by generating a new "IPad" ID by user agent matching. 20 | 21 | ### Affected APIs 22 | * Not detectable via API analysis 23 | 24 | ### Category 25 | ASP.NET 26 | 27 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /Documentation/compatibility/items_clear-does-not-remove-duplicates-from-selecteditems.md: -------------------------------------------------------------------------------- 1 | ## Items.Clear does not remove duplicates from SelectedItems 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Version Reverted 10 | 4.6.2 11 | 12 | ### Source Analyzer Status 13 | NotPlanned 14 | 15 | ### Change Description 16 | 17 | Suppose a Selector (with multiple selection enabled) has duplicates in its 18 | 19 | collection - the same item appears more than once. Removing those items from the 20 | data source (e.g. by calling Items.Clear) fails to remove them from 21 | ; 22 | only the first instance is removed. Furthermore, subsequent use of 23 | 24 | (e.g. SelectedItems.Clear()) can encounter problems such as 25 | , because 26 | 27 | contains items that are no longer in the data source. 28 | 29 | - [ ] Quirked 30 | - [ ] Build-time break 31 | 32 | ### Recommended Action 33 | Upgrade if possible to .NET Framework 4.6.2. 34 | 35 | ### Affected APIs 36 | * `P:System.Windows.Controls.Primitives.MultiSelector.SelectedItems` 37 | 38 | ### Category 39 | Windows Presentation Foundation (WPF) 40 | 41 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /Documentation/compatibility/keytips-behavior-improved-in-wpf.md: -------------------------------------------------------------------------------- 1 | ## Keytips behavior improved in WPF 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.7.2 8 | 9 | ### Source Analyzer Status 10 | NotPlanned 11 | 12 | ### Change Description 13 | Keytips behavior has been modified to bring parity with behavior on Microsoft Word and Windows Explorer. By checking whether keytip state is enabled or not in the case of a [SystemKey](xref:System.Windows.Input.KeyEventArgs.SystemKey) (in particular, [Alt](xref:System.Windows.Input.Key) or [F11](xref:System.Windows.Input.Key.F11)) being pressed, WPF handles keytip keys appropriately. Keytips now dismiss a menu even when it is opened by mouse. 14 | 15 | - [ ] Quirked 16 | - [ ] Build-time break 17 | 18 | ### Recommended Action 19 | N/A 20 | 21 | ### Affected APIs 22 | * Not detectable via API analysis 23 | 24 | ### Category 25 | Windows Presentation Foundation (WPF) 26 | 27 | 31 | -------------------------------------------------------------------------------- /Documentation/compatibility/list_foreach-can-throw-exception-when-modifying-list-item.md: -------------------------------------------------------------------------------- 1 | ## List<T>.ForEach can throw exception when modifying list item 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | 14 | Beginning in .NET Framework 4.5, a 15 | 16 | enumerator will throw an 17 | exception if an 18 | element in the calling collection is modified. Previously, this would not throw 19 | an exception but could lead to race conditions. 20 | 21 | - [x] Quirked 22 | - [ ] Build-time break 23 | 24 | ### Recommended Action 25 | 26 | Ideally, code should be fixed to not modify lists while enumerating their 27 | elements because that is never a safe operation. To revert to the previous 28 | behavior, though, an app may target .NET Framework 4.0. 29 | 30 | ### Affected APIs 31 | * ``M:System.Collections.Generic.List`1.ForEach(System.Action{`0})`` 32 | 33 | ### Category 34 | Core 35 | 36 | 37 | -------------------------------------------------------------------------------- /Documentation/compatibility/log-file-name-created-by-the-objectcontext_createdatabase-method-has-changed-to-match-sql-server-specifications.md: -------------------------------------------------------------------------------- 1 | ## Log file name created by the ObjectContext.CreateDatabase method has changed to match SQL Server specifications 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | 14 | When the 15 | 16 | method is called either directly or by using Code First with the SqlClient 17 | provider and an AttachDBFilename value in the connection string, it creates a 18 | log file named filename_log.ldf instead of filename.ldf (where filename is the 19 | name of the file specified by the AttachDBFilename value). This change improves 20 | debugging by providing a log file named according to SQL Server specifications. 21 | 22 | - [ ] Quirked 23 | - [ ] Build-time break 24 | 25 | ### Recommended Action 26 | 27 | If the log file name is important for an app, the app should be updated to 28 | expect the standard _log.ldf file name format. 29 | 30 | ### Affected APIs 31 | * `M:System.Data.Objects.ObjectContext.CreateDatabase` 32 | 33 | ### Category 34 | Entity Framework 35 | 36 | 37 | -------------------------------------------------------------------------------- /Documentation/compatibility/machinekey_encode-and-machinekey_decode-methods-are-now-obsolete.md: -------------------------------------------------------------------------------- 1 | ## MachineKey.Encode and MachineKey.Decode methods are now obsolete 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | 14 | These methods are now obsolete. Compilation of code that calls these methods 15 | produces a compiler warning. 16 | 17 | - [ ] Quirked 18 | - [x] Build-time break 19 | 20 | ### Recommended Action 21 | 22 | The recommended alternatives are 23 | 24 | and 25 | . 26 | Alternatively, the build warnings can be suppressed, or they can be avoided by 27 | using an older compiler. The APIs are still supported. 28 | 29 | ### Affected APIs 30 | * `M:System.Web.Security.MachineKey.Encode(System.Byte[],System.Web.Security.MachineKeyProtection)` 31 | * `M:System.Web.Security.MachineKey.Decode(System.String,System.Web.Security.MachineKeyProtection)` 32 | 33 | ### Category 34 | ASP.NET 35 | 36 | 37 | -------------------------------------------------------------------------------- /Documentation/compatibility/managed-browser-hosting-controls-from-the-_net-framework-1_1-and-2_0-are-blocked.md: -------------------------------------------------------------------------------- 1 | ## Managed browser hosting controls from the .NET Framework 1.1 and 2.0 are blocked 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Not planned 11 | 12 | ### Change Description 13 | Hosting these controls is blocked in Internet Explorer. 14 | 15 | - [ ] Quirked 16 | - [ ] Build-time break 17 | 18 | ### Recommended Action 19 | Internet Explorer will fail to launch an application that uses managed browser hosting controls. The previous behavior can be restored by setting the EnableIEHosting value of the registry subkey `HKLM/SOFTWARE/MICROSOFT/.NETFramework` to `1` for x86 systems and for 32-bit processes on x64 systems, and by setting the `EnableIEHosting` value of the registry subkey `HKLM/SOFTWARE/Wow6432Node/Microsoft/.NETFramework` to `1` for 64-bit processes on x64 systems. 20 | 21 | ### Affected APIs 22 | * Not detectable via API analysis 23 | 24 | ### Category 25 | Web Applications 26 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/compatibility/mef-catalogs-implement-ienumerable-and-therefore-can-no-longer-be-used-to-create-a-serializer.md: -------------------------------------------------------------------------------- 1 | ## MEF catalogs implement IEnumerable and therefore can no longer be used to create a serializer 2 | 3 | ### Scope 4 | Major 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | 14 | Starting with the .NET Framework 4.5, MEF catalogs implement IEnumerable and 15 | therefore can no longer be used to create a serializer 16 | ( object). 17 | Trying to serialize a MEF catalog throws an exception. 18 | 19 | - [ ] Quirked 20 | - [ ] Build-time break 21 | 22 | ### Recommended Action 23 | 24 | Can no longer use MEF to create a serializer 25 | 26 | ### Affected APIs 27 | * Not detectable via API analysis 28 | 29 | ### Category 30 | Managed Extensibility Framework (MEF) 31 | 32 | 33 | -------------------------------------------------------------------------------- /Documentation/compatibility/minfreememorypercentagetoactiveservice-is-now-respected.md: -------------------------------------------------------------------------------- 1 | ## MinFreeMemoryPercentageToActiveService is now respected 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.5.1 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | 14 | This setting establishes the minimum memory that must be available on the server 15 | before a WCF service can be activated. It is designed to prevent 16 | exceptions. In the .NET 17 | Framework 4.5, this setting had no effect. In the .NET Framework 4.5.1, the 18 | setting is observed. 19 | 20 | - [ ] Quirked 21 | - [ ] Build-time break 22 | 23 | ### Recommended Action 24 | 25 | An exception occurs if the free memory available on the web server is less than 26 | the percentage defined by the configuration setting. Some WCF services that 27 | successfully started and ran in a constrained memory environment may now fail. 28 | 29 | ### Affected APIs 30 | * Not detectable via API analysis 31 | 32 | ### Category 33 | Windows Communication Foundation (WCF) 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /Documentation/compatibility/missing-target-framework-moniker-results-in-4_0-behavior.md: -------------------------------------------------------------------------------- 1 | ## Missing Target Framework Moniker results in 4.0 behavior 2 | 3 | ### Scope 4 | Major 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | 14 | Applications without a 15 | 16 | applied at the assembly level will automatically run using the semantics 17 | (quirks) of the .NET Framework 4.0. To ensure high quality, it is recommended 18 | that all binaries be explicitly attributed with a 19 | 20 | indicating the version of the .NET Framework they were built with. Note that 21 | using a target framework moniker in a project file will cause MSBuild to 22 | automatically apply a 23 | . 24 | 25 | - [ ] Quirked 26 | - [ ] Build-time break 27 | 28 | ### Recommended Action 29 | 30 | A 31 | should be supplied, either through adding the attribute directly to the assembly 32 | or by specifying a target framework in the 33 | [project file or through Visual Studio's project properties GUI](https://devblogs.microsoft.com/visualstudio/visual-studio-managed-multi-targeting-part-1-concepts-target-framework-moniker-target-framework/). 34 | 35 | ### Affected APIs 36 | * Not detectable via API analysis 37 | 38 | ### Category 39 | Core 40 | 41 | 42 | -------------------------------------------------------------------------------- /Documentation/compatibility/multi-line-asp_net-textbox-spacing-changed-when-using-antixssencoder.md: -------------------------------------------------------------------------------- 1 | ## Multi-line ASP.Net TextBox spacing changed when using AntiXSSEncoder 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | 14 | In .NET Framework 4.0, extra lines were inserted between lines of a multi-line 15 | text box on postback, if using the 16 | . In .NET 17 | Framework 4.5, those extra line breaks are not included, but only if the web app 18 | is targeting .NET Framework 4.5 19 | 20 | - [x] Quirked 21 | - [ ] Build-time break 22 | 23 | ### Recommended Action 24 | 25 | Be aware that 4.0 web apps retargeted to .NET Framework 4.5 may have multi-line text boxes 26 | improved to no longer insert extra line breaks. If this is not desirable, the 27 | app can have the old behavior when running on .NET Framework 4.5 by targeting 28 | the .NET Framework 4.0. 29 | 30 | ### Affected APIs 31 | * Not detectable via API analysis 32 | 33 | ### Category 34 | ASP.NET 35 | 36 | [More information](http://connect.microsoft.com/VisualStudio/feedback/details/748052/textbox-with-multiline-textmode-adds-additional-linebreak-to-the-output) 37 | 38 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /Documentation/compatibility/multiple-items-in-a-single-tablelayoutpanel-cell-may-be-rearranged.md: -------------------------------------------------------------------------------- 1 | ## Multiple items in a single TableLayoutPanel cell may be rearranged 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Version Reverted 10 | 4.5 11 | 12 | ### Source Analyzer Status 13 | Available 14 | 15 | ### Change Description 16 | 17 | In the .NET Framework 4.5, if multiple items are placed in the same 18 | cell, they may 19 | be displayed in a different order than they were in the .NET Framework 4.0. 20 | 21 | - [ ] Quirked 22 | - [ ] Build-time break 23 | 24 | ### Recommended Action 25 | 26 | This behavior was reverted in a servicing update for the .NET Framework 4.5. 27 | Update the .NET Framework 4.5, or upgrade to .NET Framework 4.5.1 or 28 | later, to fix this issue. Alternatively, avoid the ambiguous case of multiple 29 | items in the same 30 | cell. 31 | 32 | ### Affected APIs 33 | * `M:System.Windows.Forms.TableLayoutControlCollection.Add(System.Windows.Forms.Control,System.Int32,System.Int32)` 34 | 35 | ### Category 36 | Windows Forms 37 | 38 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /Documentation/compatibility/new-enum-values-in-wpf's-pagerangeselection.md: -------------------------------------------------------------------------------- 1 | ## New enum values in WPF's PageRangeSelection 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | 14 | Two new members ( 15 | and 16 | ) 17 | have been added to the 18 | enum. 19 | 20 | - [ ] Quirked 21 | - [ ] Build-time break 22 | 23 | ### Recommended Action 24 | 25 | In most cases, these changes won't impact user code. Code that depends on a 26 | particular number of elements existing in 27 | or 28 | calls on 29 | the type 30 | should be modified, though. 31 | 32 | ### Affected APIs 33 | * `T:System.Windows.Controls.PageRangeSelection` 34 | 35 | ### Category 36 | Windows Presentation Foundation (WPF) 37 | 38 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /Documentation/compatibility/no-longer-able-to-set-enableviewstatemac-to-false.md: -------------------------------------------------------------------------------- 1 | ## No longer able to set EnableViewStateMac to false 2 | 3 | ### Scope 4 | Major 5 | 6 | ### Version Introduced 7 | 4.5.2 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | ASP.NET no longer allows developers to specify `` or `<@Page EnableViewStateMac="false" %>`. The view state message authentication code (MAC) is now enforced for all requests with embedded view state. Only apps that explicitly set the EnableViewStateMac property to `false` are affected. 14 | 15 | - [ ] Quirked 16 | - [ ] Build-time break 17 | 18 | ### Recommended Action 19 | EnableViewStateMac must be assumed to be true, and any resulting MAC errors must be resolved (as explained in [this guidance](https://support.microsoft.com/kb/2915218), which contains multiple resolutions depending on the specifics of what is causing MAC errors). 20 | 21 | ### Affected APIs 22 | * Not detectable via API analysis 23 | 24 | ### Category 25 | ASP.NET 26 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/compatibility/non-pooled-sql-connections-will-leak-memory-if-not-explicitly-disposed.md: -------------------------------------------------------------------------------- 1 | ## Non-pooled SQL connections will leak memory if not explicitly disposed 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Version Reverted 10 | 4.5 11 | 12 | ### Source Analyzer Status 13 | Not planned 14 | 15 | ### Change Description 16 | In the .NET Framework 4.5, non-pooled SQL connections which are not explicitly exposed (via Dispose, Close, or using) will leak memory 17 | 18 | - [ ] Quirked 19 | - [ ] Build-time break 20 | 21 | ### Recommended Action 22 | 23 | This issue is fixed in a .NET Framework 4.5 servicing update. Update the 24 | .NET Framework 4.5, or upgrade to .NET Framework 4.5.1 or later, to fix this 25 | issue. Alternatively, this issue may be avoided by using the 26 | in a 'using' 27 | pattern (which is a best practice) or by explicitly calling Dispose or Close 28 | when the connection is no longer needed. 29 | 30 | ### Affected APIs 31 | * `M:System.Data.SqlClient.SqlConnection.#ctor(System.String)` 32 | * `M:System.Data.SqlClient.SqlConnection.#ctor(System.String,System.Data.SqlClient.SqlCredential)` 33 | 34 | ### Category 35 | Data 36 | 37 | [More information](https://support.microsoft.com/kb/2748720) 38 | 39 | 40 | -------------------------------------------------------------------------------- /Documentation/compatibility/null-coalescer-values-are-not-visible-in-debugger-until-one-step-later.md: -------------------------------------------------------------------------------- 1 | ## Null coalescer values are not visible in debugger until one step later 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Version Reverted 10 | 4.6 11 | 12 | ### Source Analyzer Status 13 | Not planned 14 | 15 | ### Change Description 16 | A bug in the .NET Framework 4.5 causes values set via a null coalescing operation to not be visible in the debugger immediately after the assignment operation is executed when running on the 64-bit version of the Framework. 17 | 18 | - [ ] Quirked 19 | - [ ] Build-time break 20 | 21 | ### Recommended Action 22 | Stepping one additional time in the debugger will cause the local/field's value to be correctly updated. Also, this issue has been fixed in the .NET Framework 4.6; upgrading to that version of the Framework should solve the issue. 23 | 24 | ### Affected APIs 25 | * Not detectable via API analysis 26 | 27 | ### Category 28 | Debugger 29 | 30 | [More information](https://stackoverflow.com/questions/19352130/why-doesnt-the-null-coalescing-operator-work-in-this-situation) 31 | 32 | 33 | -------------------------------------------------------------------------------- /Documentation/compatibility/objectcontext_translate-and-objectcontext_executestorequery-now-support-enum-type.md: -------------------------------------------------------------------------------- 1 | ## ObjectContext.Translate and ObjectContext.ExecuteStoreQuery now support enum type 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | In .NET Framework 4.0, the generic parameter `T` of `ObjectContext.Translate` and `ObjectContext.ExecuteStoreQuery` methods could not be an enum. That scenario is now supported. 14 | 15 | - [ ] Quirked 16 | - [ ] Build-time break 17 | 18 | ### Recommended Action 19 | If Translate or ExecuteStoreQuery was called on an enum type in .NET Framework 4.0, '0' was returned. If that behavior was desirable, the calls should be replaced with a constant 0 (or the enum equivalent of it). 20 | 21 | ### Affected APIs 22 | * ```M:System.Data.Objects.ObjectContext.Translate``1(System.Data.Common.DbDataReader)``` 23 | * ```M:System.Data.Objects.ObjectContext.Translate``1(System.Data.Common.DbDataReader,System.String,System.Data.Objects.MergeOption)``` 24 | * ``M:System.Data.Objects.ObjectContext.ExecuteStoreQuery``1(System.String,System.Object[])``` 25 | * ```M:System.Data.Objects.ObjectContext.ExecuteStoreQuery``1(System.String,System.String,System.Data.Objects.MergeOption,System.Object[])``` 26 | 27 | ### Category 28 | Entity Framework 29 | 30 | 31 | -------------------------------------------------------------------------------- /Documentation/compatibility/objectdisposedexception-thrown-by-wpf-spellchecker.md: -------------------------------------------------------------------------------- 1 | ## ObjectDisposedException thrown by WPF spellchecker 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.6.1 8 | 9 | ### Version Reverted 10 | 4.7 11 | 12 | ### Source Analyzer Status 13 | NotPlanned 14 | 15 | ### Change Description 16 | 17 | WPF applications occasionally crash during application shutdown with an 18 | thrown by the 19 | spellchecker. This is fixed in .NET Framework 4.7 WPF by handling the exception 20 | gracefully, and thus ensuring that applications are no longer adversely 21 | affected. It should be noted that occasional first-chance exceptions would 22 | continue to be observed in applications running under a debugger. 23 | 24 | - [ ] Quirked 25 | - [ ] Build-time break 26 | 27 | ### Recommended Action 28 | Upgrade to .NET Framework 4.7 29 | 30 | ### Affected APIs 31 | Not detectable via API analysis 32 | 33 | ### Category 34 | Windows Presentation Foundation (WPF) 35 | 36 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /Documentation/compatibility/obsoleteattribute-exports-as-both-obsoleteattribute-and-deprecatedattribute-in-winmd-scenarios.md: -------------------------------------------------------------------------------- 1 | ## ObsoleteAttribute exports as both ObsoleteAttribute and DeprecatedAttribute in WinMD scenarios 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5.1 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | 14 | When you create a Windows Metadata library (.winmd file), the 15 | attribute is exported as 16 | both and 17 | [Windows.Foundation.DeprecatedAttribute](https://docs.microsoft.com/uwp/api/windows.foundation.metadata.deprecatedattribute). 18 | 19 | - [ ] Quirked 20 | - [x] Build-time break 21 | 22 | ### Recommended Action 23 | 24 | Recompilation of existing source code that uses the 25 | attribute may generate 26 | warnings when consuming that code from C++/CX or JavaScript. 27 | 28 | We do not recommend applying both 29 | and 30 | [Windows.Foundation.DeprecatedAttribute](https://docs.microsoft.com/uwp/api/windows.foundation.metadata.deprecatedattribute) to code in managed assemblies; it may 31 | result in build warnings. 32 | 33 | ### Affected APIs 34 | * Not detectable via API analysis 35 | 36 | ### Category 37 | Core 38 | 39 | 40 | -------------------------------------------------------------------------------- /Documentation/compatibility/opt-in-break-to-revert-from-different-4_5-sql-generation-to-simpler-4_0-sql-generation.md: -------------------------------------------------------------------------------- 1 | ## Opt-in break to revert from different 4.5 SQL generation to simpler 4.0 SQL generation 2 | 3 | ### Scope 4 | Transparent 5 | 6 | ### Version Introduced 7 | 4.5.2 8 | 9 | ### Source Analyzer Status 10 | Not planned 11 | 12 | ### Change Description 13 | Queries that produce JOIN statements and contain a call to a limiting operation without first using OrderBy now produce simpler SQL. After upgrading to .NET Framework 4.5, these queries produced more complicated SQL than previous versions. 14 | 15 | - [ ] Quirked 16 | - [x] Optional 17 | - [ ] Build-time break 18 | 19 | ### Recommended Action 20 | This feature is disabled by default. If Entity Framework generates extra JOIN statements that cause performance degradation, you can enable this feature by adding the following entry to the `` section of the application configuration (app.config) file: 21 | 22 | ```xml 23 | 24 | ``` 25 | 26 | ### Affected APIs 27 | * Not detectable via API analysis 28 | 29 | ### Category 30 | Entity Framework 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /Documentation/compatibility/path-colon-checks-are-stricter.md: -------------------------------------------------------------------------------- 1 | ## Path colon checks are stricter 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.6.2 8 | 9 | ### Source Analyzer Status 10 | NotPlanned 11 | 12 | ### Change Description 13 | 14 | In .NET Framework 4.6.2, a number of changes were made to support previously 15 | unsupported paths (both in length and format). Checks for proper drive separator 16 | (colon) syntax were made more correct, which had the side effect of blocking 17 | some URI paths in a few select Path APIs where they used to be tolerated. 18 | 19 | - [x] Quirked 20 | - [ ] Build-time break 21 | 22 | ### Recommended Action 23 | 24 | If passing a URI to affected APIs, modify the string to be a legal path first. 25 | 26 | - Remove the scheme from URLs manually (e.g. remove `file://` from URLs) 27 | - Pass the URI to the class and use 28 | 29 | Alternatively, you can opt out of the new path normalization by setting the `Switch.System.IO.UseLegacyPathHandling` AppContext switch to true. 30 | 31 | ### Affected APIs 32 | 33 | * `M:System.IO.Path.GetDirectoryName(System.String)` 34 | * `M:System.IO.Path.GetPathRoot(System.String)` 35 | 36 | ### Category 37 | Core 38 | 39 | 40 | -------------------------------------------------------------------------------- /Documentation/compatibility/persian-calendar-now-uses-the-hijri-solar-algorithm.md: -------------------------------------------------------------------------------- 1 | ## Persian calendar now uses the Hijri solar algorithm 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.6 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | 14 | Starting with the .NET Framework 4.6, the 15 | class uses the 16 | Hijri solar algorithm. Converting dates between the 17 | and other 18 | calendars may produce a slightly different result beginning with the .NET 19 | Framework 4.6 for dates earlier than 1800 or later than 2023 (Gregorian). 20 | 21 | Also, 22 | is now `March 22, 0622` instead of `March 21, 0622`. 23 | 24 | - [ ] Quirked 25 | - [ ] Build-time break 26 | 27 | ### Recommended Action 28 | Be aware that some early or late dates may be slightly different when using the PersianCalendar in .NET Framework 4.6. Also, when serializing dates between processes which may run on different .NET Framework versions, do not store them as PersianCalendar date strings (since those values may be different). 29 | 30 | ### Affected APIs 31 | * `T:System.Globalization.PersianCalendar` 32 | 33 | ### Category 34 | Core 35 | 36 | 37 | -------------------------------------------------------------------------------- /Documentation/compatibility/profiling-asp_net-mvc4-apps-can-lead-to-fatal-execution-engine-error.md: -------------------------------------------------------------------------------- 1 | ## Profiling ASP.Net MVC4 apps can lead to Fatal Execution Engine Error 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Version Reverted 10 | 4.5.2 11 | 12 | ### Source Analyzer Status 13 | Not planned 14 | 15 | ### Change Description 16 | Profilers using NGEN /Profile assemblies may crash profiled ASP.NET MVC4 applications on startup with a 'Fatal Execution Engine Exception' 17 | 18 | - [ ] Quirked 19 | - [ ] Build-time break 20 | 21 | ### Recommended Action 22 | This issue is fixed in the .NET Framework 4.5.2. Alternatively, the profiler may avoid this issue by specifying `COR_PRF_DISABLE_ALL_NGEN_IMAGES` in its event mask. 23 | 24 | ### Affected APIs 25 | * Not detectable via API analysis 26 | 27 | ### Category 28 | ASP.NET 29 | 30 | [More information](http://connect.microsoft.com/VisualStudio/feedback/details/793730/clr-profiler-crashes-any-asp-net-mvc4-app-on-startup-due-to-ngen-profile-images) 31 | 32 | 33 | -------------------------------------------------------------------------------- /Documentation/compatibility/reflection-objects-can-no-longer-be-passed-from-managed-code-to-out-of-process-dcom-clients.md: -------------------------------------------------------------------------------- 1 | ## Reflection objects can no longer be passed from managed code to out-of-process DCOM clients 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.6 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | 14 | Reflection objects can no longer be passed from managed code to out-of-process 15 | DCOM clients. The following types are affected: 16 | 17 | - 18 | - (and its derived types, including , , , and ) 19 | - 20 | - 21 | - . 22 | 23 | Calls to `IMarshal` for the object return `E_NOINTERFACE`. 24 | 25 | - [ ] Quirked 26 | - [ ] Build-time break 27 | 28 | ### Recommended Action 29 | Update marshaling code to work with non-reflection objects 30 | 31 | ### Affected APIs 32 | * Investigate applicable APIs 33 | 34 | ### Category 35 | Core 36 | 37 | 38 | -------------------------------------------------------------------------------- /Documentation/compatibility/remove-ssl3-from-the-wcf-transportdefaults.md: -------------------------------------------------------------------------------- 1 | ## Remove Ssl3 from the WCF TransportDefaults 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.6.2 8 | 9 | ### Source Analyzer Status 10 | Planned 11 | 12 | ### Change Description 13 | 14 | When using NetTcp with transport security and a credential type of certificate, 15 | the SSL 3 protocol is no longer a default protocol used for negotiating a secure 16 | connection. In most cases there should be no impact to existing apps as TLS 1.0 17 | has always been included in the protocol list for NetTcp. All existing clients 18 | should be able to negotiate a connection using at least TLS1.0. 19 | 20 | - [ ] Quirked 21 | - [ ] Build-time break 22 | 23 | ### Recommended Action 24 | 25 | If Ssl3 is required, use one of the following configuration mechanisms to add 26 | Ssl3 to the list of negotiated protocols. 27 | 28 | * 29 | * 30 | * [\ section of \](~/docs/framework/configure-apps/file-schema/wcf/transport-of-nettcpbinding.md) 31 | * [\ section of \]~/docs/framework/configure-apps/file-schema/wcf/sslstreamsecurity.md) 32 | 33 | ### Affected APIs 34 | * `P:System.ServiceModel.Channels.SslStreamSecurityBindingElement.SslProtocols` 35 | * `P:System.ServiceModel.TcpTransportSecurity.SslProtocols` 36 | 37 | ### Category 38 | Windows Communication Foundation (WCF) 39 | 40 | 41 | -------------------------------------------------------------------------------- /Documentation/compatibility/resgen-block-mark-of-the-web-content.md: -------------------------------------------------------------------------------- 1 | ## Resgen refuses to load content from the web 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.7.2 8 | 9 | ### Source Analyzer Status 10 | NotPlanned 11 | 12 | ### Change Description 13 | .resx files may contain binary formatted input. If you attempt to use resgen to load a file that was downloaded from an untrusted location, it will fail to load the input by default. 14 | 15 | - [x] Quirked 16 | - [x] Build-time break 17 | 18 | ### Recommended Action 19 | Resgen users who require loading binary formatted input from untrusted locations can either remove the mark of the web from the input file or apply the opt-out quirk. 20 | 21 | Add the following registry setting to apply the machine wide opt-out quirk: 22 | [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\SDK] 23 | "AllowProcessOfUntrustedResourceFiles"="true" 24 | 25 | ### Category 26 | Core 27 | 28 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /Documentation/compatibility/resolveassemblyreference-task-now-warns-of-dependencies-with-the-wrong-architecture.md: -------------------------------------------------------------------------------- 1 | ## ResolveAssemblyReference task now warns of dependencies with the wrong architecture 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.5.1 8 | 9 | ### Source Analyzer Status 10 | Planned 11 | 12 | ### Change Description 13 | The task emits a warning, MSB3270, which indicates that a reference or any of its dependencies does not match the app's architecture. For example, this occurs if an app that was compiled with the `AnyCPU` option includes an x86 reference. Such a scenario could result in an app failure at run time (in this case, if the app is deployed as an x64 process). 14 | 15 | - [ ] Quirked 16 | - [x] Build-time break 17 | 18 | ### Recommended Action 19 | There are two areas of impact: 20 | 21 | * Recompilation generates warnings that did not appear when the app was compiled under a previous version of MSBuild. However, because the warning identifies a possible source of runtime failure, it should be investigated and addressed. 22 | * If warnings are treated as errors, the app will fail to compile. 23 | 24 | ### Affected APIs 25 | * Not detectable via API analysis 26 | 27 | ### Category 28 | MSBuild 29 | 30 | 31 | -------------------------------------------------------------------------------- /Documentation/compatibility/ribbongroup-background-is-set-to-transparent-in-localized-builds.md: -------------------------------------------------------------------------------- 1 | ## RibbonGroup background is set to transparent in localized builds 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.6.2 8 | 9 | ### Version Reverted 10 | 4.7 11 | 12 | ### Source Analyzer Status 13 | NotPlanned 14 | 15 | ### Change Description 16 | 17 | 18 | background on localized builds was always painted with Transparent brush, 19 | resulting in poor UI experience. This is fixed in .NET Framework 4.7 WPF fix by updating 20 | the localized resources for 21 | , which in 22 | turn ensures that the correct brush is selected. 23 | 24 | - [ ] Quirked 25 | - [ ] Build-time break 26 | 27 | ### Recommended Action 28 | Upgrade to .NET Framework 4.7 29 | 30 | ### Affected APIs 31 | Not detectable via API analysis 32 | 33 | ### Category 34 | Windows Presentation Foundation (WPF) 35 | 36 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /Documentation/compatibility/right-clicking-on-a-wpf-datagrid-row-header-changes-the-datagrid-selection.md: -------------------------------------------------------------------------------- 1 | ## Right clicking on a WPF DataGrid row header changes the DataGrid selection 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Version Reverted 10 | 4.6 11 | 12 | ### Source Analyzer Status 13 | Planned 14 | 15 | ### Change Description 16 | 17 | Right-clicking a selected 18 | row header while 19 | multiple rows are selected results in the 's selection changing to only 20 | that row. 21 | 22 | - [ ] Quirked 23 | - [ ] Build-time break 24 | 25 | ### Recommended Action 26 | 27 | This issue has been fixed in the .NET Framework 4.6 and may be addressed by 28 | upgrading to that version of the .NET Framework. 29 | 30 | ### Affected APIs 31 | * `M:System.Windows.Controls.DataGrid.#ctor` 32 | 33 | ### Category 34 | Windows Presentation Foundation (WPF) 35 | 36 | [More information](http://connect.microsoft.com/VisualStudio/feedback/details/1001771/right-clicking-on-wpf-data-grid-row-header-changes-selection) 37 | 38 | 39 | -------------------------------------------------------------------------------- /Documentation/compatibility/rsacng_verifyhash-now-returns-false-for-any-verification-failure.md: -------------------------------------------------------------------------------- 1 | ## RSACng.VerifyHash now returns False for any verification failure 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.6.2 8 | 9 | ### Source Analyzer Status 10 | Investigating 11 | 12 | ### Change Description 13 | 14 | Starting with the .NET Framework 4.6.2, this method returns **False** if the 15 | signature itself is badly formatted. It now returns false for any verification 16 | failure. 17 | 18 | In the .NET Framework 4.6 and 4.6.1, the method throws a 19 | 20 | if the signature itself is badly formatted. 21 | 22 | - [ ] Quirked 23 | - [ ] Build-time break 24 | 25 | ### Recommended Action 26 | 27 | Any code whose execution depends on handling the 28 | 29 | should instead execute if validation fails and the method returns **False**. 30 | 31 | ### Affected APIs 32 | * `M:System.Security.Cryptography.RSACng.VerifyHash(System.Byte[],System.Byte[],System.Security.Cryptography.HashAlgorithmName,System.Security.Cryptography.RSASignaturePadding)` 33 | 34 | ### Category 35 | Security 36 | 37 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /Documentation/compatibility/serialization-deserialization-of-mailmessage-objects.md: -------------------------------------------------------------------------------- 1 | ## Deserialization of MailMessage objects serialized under the .NET Framework 4.5 may fail 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Investigating 11 | 12 | ### Change Description 13 | Starting with the .NET Framework 4.5, objects can include non-ASCII characters. In the .NET Framework 4, only ASCII characters are supported. objects that contain non-ASCII characters and that are serialized under the .NET Framework 4.5 or later cannot be deserialized under the .NET Framework 4. 14 | 15 | - [ ] Quirked 16 | - [ ] Build-time break 17 | 18 | ### Recommended Action 19 | 20 | Ensure that your code provides exception handling when deserializing a object. 21 | 22 | ### Affected APIs 23 | 24 | 25 | ### Category 26 | Networking 27 | 28 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /Documentation/compatibility/sharing-session-state-with-asp_net-stateserver-requires-all-servers-in-the-web-farm-to-use-the-same-_net-framework-version.md: -------------------------------------------------------------------------------- 1 | ## Sharing session state with Asp.Net StateServer requires all servers in the web farm to use the same .NET Framework version 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Planned 11 | 12 | ### Change Description 13 | 14 | When enabling 15 | 16 | session state, all of the servers in the given web farm must use the same 17 | version of the .NET Framework in order for state to be properly shared. 18 | 19 | - [ ] Quirked 20 | - [ ] Build-time break 21 | 22 | ### Recommended Action 23 | 24 | Be sure to upgrade .NET Framework versions on web servers that share state at 25 | the same time. 26 | 27 | ### Affected APIs 28 | * `F:System.Web.SessionState.SessionStateMode.StateServer` 29 | 30 | ### Category 31 | ASP.NET 32 | 33 | [More information](http://connect.microsoft.com/VisualStudio/feedback/details/823803/asp-net-stateserver-requests-are-not-compatible-between-4-0-and-4-5-1-versions-of-net-framework) 34 | 35 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /Documentation/compatibility/some-workflow-drag-and-drop-apis-are-obsolete.md: -------------------------------------------------------------------------------- 1 | ## Some WorkFlow drag-and-drop APIs are obsolete 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | This WorkFlow drag-and-drop API is obsolete and will cause compiler warnings if the app is rebuilt against 4.5. 14 | 15 | - [ ] Quirked 16 | - [x] Build-time break 17 | 18 | ### Recommended Action 19 | 20 | New 21 | APIs that support operations with multiple objects should be used instead. 22 | Alternatively, the build warnings can be suppressed or they can be avoided by 23 | using an older compiler. The APIs are still supported. 24 | 25 | ### Affected APIs 26 | * `M:System.Activities.Presentation.DragDropHelper.DoDragMove(System.Activities.Presentation.WorkflowViewElement,System.Windows.Point)` 27 | * `M:System.Activities.Presentation.DragDropHelper.GetCompositeView(System.Windows.DragEventArgs)` 28 | * `M:System.Activities.Presentation.DragDropHelper.GetDraggedModelItem(System.Windows.DragEventArgs)` 29 | * `M:System.Activities.Presentation.DragDropHelper.GetDroppedObject(System.Windows.DependencyObject,System.Windows.DragEventArgs,System.Activities.Presentation.EditingContext)` 30 | 31 | ### Category 32 | Windows Workflow Foundation (WF) 33 | 34 | 35 | -------------------------------------------------------------------------------- /Documentation/compatibility/sql-server-database-connection-that-resolves-to-localhost.md: -------------------------------------------------------------------------------- 1 | ## Attempting a TCP/IP connection to a SQL Server database that resolves to `localhost` fails 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.6 8 | 9 | ### Version Reverted 10 | 4.6.2 11 | 12 | ### Source Analyzer Status 13 | NotPlanned 14 | 15 | ### Change Description 16 | 17 | In the .NET Framework 4.6 and 4.6.1, attempting a TCP/IP connection to a SQL Server database that resolves to `localhost` fails with the error, "A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)" 18 | 19 | - [ ] Quirked 20 | - [ ] Build-time break 21 | 22 | ### Recommended Action 23 | 24 | This issue has been addressed and the previous behavior restored in the .NET Framework 4.6.2. To connect to a SQL Server databsae that resolves to `localhost`, upgrade to the .NET Framework 4.6.2. 25 | 26 | ### Affected APIs 27 | * Not detectable via API analysis 28 | 29 | ### Category 30 | Data 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /Documentation/compatibility/sql_variant-data-uses-sql_variant-collation-rather-than-database-collation.md: -------------------------------------------------------------------------------- 1 | ## Sql_variant data uses sql_variant collation rather than database collation 2 | 3 | ### Scope 4 | Transparent 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Not planned 11 | 12 | ### Change Description 13 | `sql_variant` data uses `sql_variant` collation rather than database collation. 14 | 15 | - [ ] Quirked 16 | - [ ] Build-time break 17 | 18 | ### Recommended Action 19 | This change addresses possible data corruption if the database collation differs from the `sql_variant` collation. Applications that rely on the corrupted data may experience failure. 20 | 21 | ### Affected APIs 22 | * Not detectable via API analysis 23 | 24 | ### Category 25 | Data 26 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/compatibility/sqlbulkcopy-uses-destination-column-encoding-for-strings.md: -------------------------------------------------------------------------------- 1 | ## SqlBulkCopy uses destination column encoding for strings 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Planned 11 | 12 | ### Change Description 13 | 14 | When inserting data into a column, 15 | uses the encoding 16 | of the destination column rather than the default encoding for `VARCHAR` and 17 | `CHAR` types. This change eliminates the possibility of data corruption caused 18 | by using the default encoding when the destination column does not use the 19 | default encoding. In rare cases, an existing application may throw a 20 | SqlException exception if the change in encoding produces data that is too big 21 | to fit into the destination column. 22 | 23 | - [ ] Quirked 24 | - [ ] Build-time break 25 | 26 | ### Recommended Action 27 | 28 | Expect that will 29 | no longer corrupt data due to encoding differences. If strings near the 30 | destination column's size limit are being copied, it may be necessary to either 31 | pre-encode data (to be copied to check that the data will fit in the destination 32 | column) or catch s. 33 | 34 | ### Affected APIs 35 | * `T:System.Data.SqlClient.SqlBulkCopy` 36 | * `M:System.Data.SqlClient.SqlBulkCopy.#ctor(System.Data.SqlClient.SqlConnection)` 37 | 38 | ### Category 39 | Data 40 | 41 | 42 | -------------------------------------------------------------------------------- /Documentation/compatibility/sqlconnection_open-fails-on-windows-7-with-non-ifs-winsock-bsp-or-lsp-present.md: -------------------------------------------------------------------------------- 1 | ## SqlConnection.Open fails on Windows 7 with non-IFS Winsock BSP or LSP present 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Version Reverted 10 | 4.5.2 11 | 12 | ### Source Analyzer Status 13 | Planned 14 | 15 | ### Change Description 16 | 17 | and 18 | 19 | fail in the .NET Framework 4.5 if running on a Windows 7 machine with a non-IFS 20 | Winsock BSP or LSP are present on the computer. 21 | 22 | To determine whether a non-IFS BSP or LSP is installed, use the `netsh WinSock 23 | Show Catalog` command, and examine every `Winsock Catalog Provider Entry` item 24 | that is returned. If the Service Flags value has the `0x20000` bit set, the 25 | provider uses IFS handles and will work correctly. If the `0x20000` bit is clear 26 | (not set), it is a non-IFS BSP or LSP. 27 | 28 | - [ ] Quirked 29 | - [ ] Build-time break 30 | 31 | ### Recommended Action 32 | 33 | This bug has been fixed in the .NET Framework 4.5.2, so it can be avoided by 34 | upgrading the .NET Framework. Alternatively, it can be avoided by removing any 35 | installed non-IFS Winsock LSPs. 36 | 37 | ### Affected APIs 38 | * `M:System.Data.SqlClient.SqlConnection.Open` 39 | * `M:System.Data.SqlClient.SqlConnection.OpenAsync(System.Threading.CancellationToken)` 40 | 41 | ### Category 42 | Data 43 | 44 | [More information](https://connect.microsoft.com/VisualStudio/feedback/details/729323) 45 | 46 | 47 | -------------------------------------------------------------------------------- /Documentation/compatibility/system_activities-is-now-aptca.md: -------------------------------------------------------------------------------- 1 | ## System.Activities is now APTCA 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | 14 | The assembly is marked with the attribute. 15 | 16 | - [ ] Quirked 17 | - [ ] Build-time break 18 | 19 | ### Recommended Action 20 | 21 | Derived classes cannot be marked with the 22 | . 23 | Previously, derived types had to be marked with the 24 | . However, 25 | this change should have no real impact. 26 | 27 | ### Affected APIs 28 | * Not detectable via API analysis 29 | 30 | ### Category 31 | Windows Workflow Foundation (WF) 32 | 33 | 34 | -------------------------------------------------------------------------------- /Documentation/compatibility/system_net_peertopeer_collaboration-unavailable-on-windows-8.md: -------------------------------------------------------------------------------- 1 | ## System.Net.PeerToPeer.Collaboration unavailable on Windows 8 2 | 3 | ### Scope 4 | Major 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | 14 | The System.Net.PeerToPeer.Collaboration namespace is unavailable on Windows 8 or above. 15 | 16 | - [ ] Quirked 17 | - [ ] Build-time break 18 | 19 | ### Recommended Action 20 | Apps that support Windows 8 or above must be updated to not depend on this namespace or its members. 21 | 22 | ### Affected APIs 23 | * `N:System.Net.PeerToPeer.Collaboration` 24 | 25 | ### Category 26 | Networking 27 | 28 | 29 | -------------------------------------------------------------------------------- /Documentation/compatibility/system_threading_tasks_task-no-longer-throw-objectdisposedexception-after-object-is-disposed.md: -------------------------------------------------------------------------------- 1 | ## System.Threading.Tasks.Task no longer throw ObjectDisposedException after object is disposed 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | 14 | Except for 15 | , 16 | methods no longer throw 17 | an exception after 18 | the object is disposed. 19 | 20 | This change supports the use of cached tasks. For example, a method can return a 21 | cached task to represent an already completed operation instead of allocating a 22 | new task. This was impossible in previous .NET Framework versions, because any 23 | consumer of the task could dispose of it, which rendered it unusable. 24 | 25 | - [ ] Quirked 26 | - [ ] Build-time break 27 | 28 | ### Recommended Action 29 | 30 | Be aware that Task methods may no longer throw 31 | in cases when the 32 | object is disposed. If an app was depending on this exception to know that a 33 | task was disposed, it should be updated to explicitly check the task's status 34 | using . 35 | 36 | ### Affected APIs 37 | * Not detectable via API analysis 38 | 39 | ### Category 40 | Core 41 | 42 | 43 | -------------------------------------------------------------------------------- /Documentation/compatibility/system_threading_timer_lock_contention_improvement.md: -------------------------------------------------------------------------------- 1 | ## System.Threading.Timer lock contention improvement 2 | 3 | ### Scope 4 | 5 | Transparent 6 | 7 | ### Version Introduced 8 | 4.8 9 | 10 | ### Source Analyzer Status 11 | 12 | NotPlanned 13 | 14 | ### Change Description 15 | 16 | Timers use a lock, and multiple timers can contend with one another for a lock, which can result in excessive CPU usage. 17 | 18 | For apps that run under .NET Framework 4.8, an opt-in configuration section may reduce the impact of timers contending for a lock. This change is especially important for high-performance applications. 19 | 20 | - [ ] Quirked 21 | - [ ] Build-time break 22 | 23 | ### Recommended Action 24 | 25 | Applications running on .NET Framework 4.8 can opt into this change by setting the following [`AppContext` switch](https://docs.microsoft.com/dotnet/api/system.appcontext?view=netframework-4.7.2#appcontext-for-library-consumers): 26 | `Switch.System.Threading.UseNetCoreTimer=true` 27 | 28 | ### Affected APIs 29 | 30 | * `T:System.Threading.Timer` 31 | -------------------------------------------------------------------------------- /Documentation/compatibility/system_uri-escaping-now-supports-rfc-3986.md: -------------------------------------------------------------------------------- 1 | ## System.Uri escaping now supports RFC 3986 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | 14 | URI escaping has changed in .NET Framework 4.5 to support 15 | [RFC 3986](https://tools.ietf.org/html/rfc3986). Specific changes include: 16 | 17 | - escapes reserved characters based on RFC 3986. 18 | - does not escape reserved characters. 19 | - does not throw an exception if it encounters an invalid escape sequence. 20 | - Unreserved escaped characters are un-escaped. 21 | 22 | - [ ] Quirked 23 | - [ ] Build-time break 24 | 25 | ### Recommended Action 26 | * Update applications to not rely on to throw in the case of an invalid escape sequence. Such sequences must be detected directly now. 27 | * Similarly, expect that Escaped and Unescaped URI and Data strings may vary from .NET Framework 4.0 and .NET Framework 4.5 and should not be compared across .NET versions directly. Instead, they should be parsed and normalized in a single .NET version before any comparisons are made. 28 | 29 | ### Affected APIs 30 | * `M:System.Uri.EscapeDataString(System.String)` 31 | * `M:System.Uri.EscapeUriString(System.String)` 32 | * `M:System.Uri.UnescapeDataString(System.String)` 33 | 34 | ### Category 35 | Core 36 | 37 | 38 | -------------------------------------------------------------------------------- /Documentation/compatibility/targetframeworkname-for-default-app-domain-no-longer-defaults-to-null-if-not-set.md: -------------------------------------------------------------------------------- 1 | ## TargetFrameworkName for default app domain no longer defaults to null if not set 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.6 8 | 9 | ### Source Analyzer Status 10 | Planned 11 | 12 | ### Change Description 13 | 14 | The was 15 | previously null in the default app domain, unless it was explicitly set. 16 | Beginning in 4.6, the 17 | property 18 | for the default app domain will have a default value derived from the 19 | TargetFrameworkAttribute (if one is present). Non-default app domains will 20 | continue to inherit their 21 | from the 22 | default app domain (which will not default to null in 4.6) unless it is 23 | explicitly overridden. 24 | 25 | - [ ] Quirked 26 | - [ ] Build-time break 27 | 28 | ### Recommended Action 29 | 30 | Code should be updated to not depend on 31 | 32 | defaulting to null. If it is required that this property continue to evaluate to 33 | null, it can be explicitly set to that value. 34 | 35 | ### Affected APIs 36 | * `M:System.AppDomainSetup.get_TargetFrameworkName` 37 | 38 | ### Category 39 | Core 40 | 41 | 42 | -------------------------------------------------------------------------------- /Documentation/compatibility/the-_net-framework-4_6-does-not-use-a-4_5_x_x-version-when-registering-itself-in-the-registry.md: -------------------------------------------------------------------------------- 1 | ## The .NET Framework 4.6 does not use a 4.5.x.x version when registering itself in the registry 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.6 8 | 9 | ### Source Analyzer Status 10 | Not planned 11 | 12 | ### Change Description 13 | As one might expect, the version key set in the registry (at `HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v4\Full`) for the .NET Framework 4.6 begins with '4.6', not '4.5'. Apps that depend on these registry keys to know which .NET Framework versions are installed on a machine should be updated to understand that 4.6 is a new possible version, and one that is compatible with previous 4.5.x releases. 14 | 15 | - [ ] Quirked 16 | - [ ] Build-time break 17 | 18 | ### Recommended Action 19 | Update apps probing for a .NET Framework 4.5 install by looking for 4.5 registry keys to also accept 4.6. 20 | 21 | ### Affected APIs 22 | * Not detectable via API analysis 23 | 24 | ### Category 25 | Setup and Deployment 26 | 27 | [More information](~/docs/framework/migration-guide/mitigation-product-versioning.md) 28 | 29 | 30 | -------------------------------------------------------------------------------- /Documentation/compatibility/the-replace-method-in-odata-urls-is-disabled-by-default.md: -------------------------------------------------------------------------------- 1 | ## The Replace method in OData URLs is disabled by default 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | 14 | Beginning in the .NET Framework 4.5, the Replace method in OData URLs is 15 | disabled by default. When OData Replace is disabled (now by default), any user 16 | requests including replace functions (which are uncommon) will fail. 17 | 18 | - [ ] Quirked 19 | - [ ] Build-time break 20 | 21 | ### Recommended Action 22 | 23 | If the replace method is required (which is uncommon), it can be re-enabled 24 | through a config settings 25 | (). 26 | However, an enabled replace method can open security vulnerabilities and should 27 | only be used after careful review. 28 | 29 | ### Affected APIs 30 | * ``T:System.Data.Services.DataService`1`` 31 | 32 | ### Category 33 | Windows Communication Foundation (WCF) 34 | 35 | 36 | -------------------------------------------------------------------------------- /Documentation/compatibility/throttle-concurrent-requests-per-session.md: -------------------------------------------------------------------------------- 1 | ## Throttle concurrent requests per session 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.7 8 | 9 | ### Source Analyzer Status 10 | NotPlanned 11 | 12 | ### Change Description 13 | In the .NET Framework 4.6.2 and earlier, ASP.NET executes requests with the same Sessionid sequentially, and ASP.NET always issues the Sessionid through cookies by default. If a page takes a long time to respond, it will significantly degrade server performance just by pressing F5 on the browser. In the fix, we added a counter to track the queued requests and terminate the requests when they exceed a specified limit. The default value is 50. If the limit is reached, a warning will be logged in the event log, and an HTTP 500 response may be recorded in the IIS log. 14 | 15 | - [x] Quirked 16 | - [ ] Build-time break 17 | 18 | ### Recommended Action 19 | To restore the old behavior, you can add the following setting to your web.config file to opt out of the new behavior. 20 | 21 | ```xml 22 | 23 | 24 | 25 | ``` 26 | 27 | ### Affected APIs 28 | * Not detectable via API analysis 29 | 30 | ### Category 31 | ASP.NET 32 | 33 | 34 | -------------------------------------------------------------------------------- /Documentation/compatibility/two-way-data-binding-to-a-property-with-a-non-public-setter-is-not-supported.md: -------------------------------------------------------------------------------- 1 | ## Two-way data-binding to a property with a non-public setter is not supported 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.5.1 8 | 9 | ### Source Analyzer Status 10 | Planned 11 | 12 | ### Change Description 13 | 14 | Attempting to data bind to a property without a public setter has never been a 15 | supported scenario. Beginning in the .NET Framework 4.5.1, this scenario will 16 | throw an . Note that 17 | this new exception will only be thrown for apps that specifically target the 18 | .NET Framework 4.5.1. If an app targets the .NET Framework 4.5, the call will be 19 | allowed. If the app does not target a particular .NET Framework version, the 20 | binding will be treated as one-way. 21 | 22 | - [x] Quirked 23 | - [ ] Build-time break 24 | 25 | ### Recommended Action 26 | 27 | The app should be updated to either use one-way binding, or expose the 28 | property's setter publicly. Alternatively, targeting the .NET Framework 4.5 will 29 | cause the app to exhibit the old behavior. 30 | 31 | ### Affected APIs 32 | * `F:System.Windows.Data.BindingMode.TwoWay` 33 | 34 | ### Category 35 | Windows Presentation Foundation (WPF) 36 | 37 | [More information](http://connect.microsoft.com/VisualStudio/feedback/details/773682/wpf-property-with-private-setter-is-updated-by-a-twoway-binding) 38 | 39 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /Documentation/compatibility/type_isassignablefrom-returns-wrong-result-for-generic-variables-with-constraints.md: -------------------------------------------------------------------------------- 1 | ## Type.IsAssignableFrom returns wrong result for generic variables with constraints 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Version Reverted 10 | 4.5 11 | 12 | ### Source Analyzer Status 13 | Planned 14 | 15 | ### Change Description 16 | 17 | In the .NET Framework 4.5, 18 | 19 | will incorrectly return `false` in all cases for some generic types with 20 | constraints. 21 | 22 | - [ ] Quirked 23 | - [ ] Build-time break 24 | 25 | ### Recommended Action 26 | 27 | This issue was fixed in a servicing update. Update the .NET Framework 28 | 4.5, or upgrade to .NET Framework 4.5.1 or later, to fix this issue. 29 | Alternatively, avoid using IsAssignableFrom with generic types that have 30 | constraints on generic parameters. Reflection APIs can be used as a work-around. 31 | 32 | ### Affected APIs 33 | * `M:System.Type.IsAssignableFrom(System.Type)` 34 | 35 | ### Category 36 | Core 37 | 38 | [More information](http://connect.microsoft.com/VisualStudio/feedback/details/760270/type-isassignablefrom-for-type-parameters-is-broken) 39 | 40 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /Documentation/compatibility/unexpected-invalidcastexception-from-invokemethod-activity-in-wf4.md: -------------------------------------------------------------------------------- 1 | ## Unexpected InvalidCastException from InvokeMethod activity in WF4 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Version Reverted 10 | 4.5 11 | 12 | ### Source Analyzer Status 13 | Planned 14 | 15 | ### Change Description 16 | 17 | Using a 18 | that 19 | targets a method with a nullable parameter can throw an 20 | . 21 | 22 | - [ ] Quirked 23 | - [ ] Build-time break 24 | 25 | ### Recommended Action 26 | 27 | This behavior was reverted in a .NET Framework 4.5 servicing release. Update the .NET Framework 4.5 (or upgrade to .NET Framework 4.5.1 or later) to 28 | fix the issue. 29 | 30 | ### Affected APIs 31 | * `P:System.Activities.Statements.InvokeMethod.Parameters` 32 | 33 | ### Category 34 | Windows Workflow Foundation (WF) 35 | 36 | [More information](http://connect.microsoft.com/VisualStudio/feedback/details/758736/unexpected-invalidcastexception-from-invokemethod-activity-in-wf4-after-net-4-5-install) 37 | 38 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /Documentation/compatibility/unicode-data-now-support-standard-v8_0-categories.md: -------------------------------------------------------------------------------- 1 | ## Unicode standard version 8.0 categories now supported 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.6.2 8 | 9 | ### Source Analyzer Status 10 | Planned 11 | 12 | ### Change Description 13 | In .NET Framework 4.6.2, Unicode data has been 14 | upgraded from Unicode Standard version 6.3 to version 8.0. When 15 | requesting Unicode character categories in .NET Framework 4.6.2, some 16 | results might not match the results in previous .NET Framework 17 | versions. This change mostly affects Cherokee syllables and New Tai 18 | Lue vowels signs and tone marks. 19 | 20 | - [ ] Quirked 21 | - [ ] Build-time break 22 | 23 | ### Recommended Action 24 | Review code and remove/change logic that depends on hard-coded Unicode 25 | character categories. 26 | 27 | ### Affected APIs 28 | * `M:System.Char.GetUnicodeCategory(System.Char)` 29 | * `M:System.Globalization.CharUnicodeInfo.GetUnicodeCategory(System.Char)` 30 | * `M:System.Globalization.CharUnicodeInfo.GetUnicodeCategory(System.String,System.Int32)` 31 | 32 | ### Category 33 | Globalization 34 | 35 | [More information](https://github.com/Microsoft/dotnet/blob/master/releases/net462/dotnet462-changes.md) 36 | 37 | 38 | -------------------------------------------------------------------------------- /Documentation/compatibility/uri-unc-shares-normalized.md: -------------------------------------------------------------------------------- 1 | ## Allow Unicode in URIs that resemble UNC shares 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.7.2 8 | 9 | ### Source Analyzer Status 10 | NotPlanned 11 | 12 | ### Change Description 13 | In , constructing a file URI containing both a UNC share name and Unicode characters will no longer result in a URI with invalid internal state. The behavior will change only when all of the following are true: 14 | - The URI has the scheme `file:` and is followed by four or more slashes. 15 | - The host name begins with an underscore or other non-reserved symbol. 16 | - The URI contains Unicode characters. 17 | 18 | - [ ] Quirked 19 | - [ ] Build-time break 20 | 21 | ### Recommended Action 22 | Applications working with URIs consistently containing Unicode could have conceivably used this behavior to disallow references to UNC shares. Those applications should use instead. 23 | 24 | ### Affected APIs 25 | * `T:System.Uri` 26 | 27 | ### Category 28 | Core 29 | 30 | -------------------------------------------------------------------------------- /Documentation/compatibility/uri-unicode-scheme-only-relative.md: -------------------------------------------------------------------------------- 1 | ## Support special relative URI notation when Unicode is present 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.7.2 8 | 9 | ### Source Analyzer Status 10 | NotPlanned 11 | 12 | ### Change Description 13 | 14 | will no longer throw a when calling on certain relative URIs containing Unicode. 15 | 16 | The simplest reproduction of the is below, with the two statements being equivalent: 17 |  ```csharp 18 | bool success = Uri.TryCreate("http:%C3%A8", UriKind.RelativeOrAbsolute, out Uri href); 19 | bool success = Uri.TryCreate("http:è", UriKind.RelativeOrAbsolute, out Uri href); 20 |  ``` 21 | To reproduce the , the following items must be true: 22 | - The URI must be specified as relative by prepending it with ‘http:’ and not following it with ‘//’. 23 | - The URI must contain percent-encoded Unicode or unreserved symbols. 24 | 25 | - [ ] Quirked 26 | - [ ] Build-time break 27 | 28 | ### Recommended Action 29 | Users depending on this behavior to disallow relative URIs should instead specify when creating a URI. 30 | 31 | ### Affected APIs 32 | * `M:System.Uri.TryCreate(System.Uri,System.Uri,System.Uri@)` 33 | * `M:System.Uri.TryCreate(System.String,System.UriKind,System.Uri@)` 34 | * `M:System.Uri.TryCreate(System.Uri,System.String,System.Uri@)` 35 | 36 | ### Category 37 | Core 38 | 39 | 43 | -------------------------------------------------------------------------------- /Documentation/compatibility/vb_net-no-longer-supports-partial-namespace-qualification-for-system_windows-apis.md: -------------------------------------------------------------------------------- 1 | ## VB.NET no longer supports partial namespace qualification for System.Windows APIs 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.5.2 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | Beginning in .NET Framework 4.5.2, VB.NET projects cannot specify System.Windows APIs with partially-qualified namespaces. For example, referring to `Windows.Forms.DialogResult` will fail. Instead, code must refer to the fully qualified name () or import the specific namespace and refer simply to . 14 | 15 | - [ ] Quirked 16 | - [x] Build-time break 17 | 18 | ### Recommended Action 19 | Code should be updated to refer to `System.Windows` APIs either with simple names (and importing the relevant namespace) or with fully qualified names. 20 | 21 | ### Affected APIs 22 | * Not detectable via API analysis 23 | 24 | ### Category 25 | Visual Basic .NET 26 | 27 | [More information](https://stackoverflow.com/questions/23573659/forms-is-not-a-member-of-windows) 28 | 29 | 30 | -------------------------------------------------------------------------------- /Documentation/compatibility/wcf-accessbility-combobox-high-contrast-issue-in-svcTraceViewer-tool.md: -------------------------------------------------------------------------------- 1 | ## svcTraceViewer ComboBox high contrast change 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.8 8 | ### Source Analyzer Status 9 | NotPlanned 10 | 11 | ### Change Description 12 | In the [Microsoft Service Trace Viewer tool](~/docs/framework/wcf/service-trace-viewer-tool-svctraceviewer-exe.md), ComboBox controls were not displayed in the correct color in certain high contrast themes. The issue was fixed in .NET Framework 4.7.2. However, due to .NET Framework SDK backward compatibility requirements, the fix was not visible to customers by default. .NET 4.8 surfaces this change by adding the following [AppContext configuration switches](~/docs/framework/configure-apps/file-schema/runtime/appcontextswitchoverrides-element.md) to the svcTraceViewer.exe.config file: 13 | ```xml 14 | 15 | ``` 16 | - [ ] Quirked 17 | - [ ] Build-time break 18 | 19 | ### Recommended Action 20 | - How to opt out of the change 21 | If you don't want to have the high contrast behavior change, you can disable it by removing the following section from the svcTraceViewer.exe.config file: 22 | ```xml 23 | 24 | ``` 25 | 26 | ### Affected APIs 27 | * Not detectable via API analysis 28 | 29 | ### Category 30 | Windows Communication Foundation (WCF) 31 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /Documentation/compatibility/wcf-binding-with-the-transportwithmessagecredential-security-mode.md: -------------------------------------------------------------------------------- 1 | ## WCF binding with the TransportWithMessageCredential security mode 2 | 3 | ### Scope 4 | Transparent 5 | 6 | ### Version Introduced 7 | 4.6.1 8 | 9 | ### Source Analyzer Status 10 | Not planned 11 | 12 | ### Change Description 13 | Beginning in the .NET Framework 4.6.1, WCF binding that uses the TransportWithMessageCredential security mode can be set up to receive messages with unsigned "to" headers for asymmetric security keys. 14 | 15 | By default, unsigned "to" headers will continue to be rejected in .NET Framework 4.6.1. They will only be accepted if an application opts into this new mode of operation using the Switch.System.ServiceModel.AllowUnsignedToHeader configuration switch. 16 | 17 | - [X] Quirked 18 | - [ ] Build-time break 19 | 20 | ### Recommended Action 21 | Because this is an opt-in feature, it should not affect the behavior of existing apps.
22 | 23 | To control whether the new behavior is used or not, use the following configuration setting: 24 | 25 | ```xml 26 | 27 | 28 | 29 | ``` 30 | 31 | ### Affected APIs 32 | * `F:System.ServiceModel.BasicHttpSecurityMode.TransportWithMessageCredential` 33 | * `F:System.ServiceModel.BasicHttpsSecurityMode.TransportWithMessageCredential` 34 | * `F:System.ServiceModel.SecurityMode.TransportWithMessageCredential` 35 | * `F:System.ServiceModel.WSFederationHttpSecurityMode.TransportWithMessageCredential` 36 | 37 | ### Category 38 | Windows Communication Foundation (WCF) 39 | 40 | 41 | -------------------------------------------------------------------------------- /Documentation/compatibility/wcf-message-security-unable-to-use-tls1_1-and-tls1_2.md: -------------------------------------------------------------------------------- 1 | ## WCF message security now is able to use TLS1.1 and TLS1.2 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.7 8 | 9 | ### Source Analyzer Status 10 | Planned 11 | 12 | ### Change Description 13 | Starting in the .NET Framework 4.7, customers can configure either TLS1.1 or TLS1.2 in WCF message security in addition to SSL3.0 and TLS1.0 through application configuration settings. 14 | 15 | - [x] Quirked 16 | - [ ] Build-time break 17 | 18 | ### Recommended Action 19 | In the .NET Framework 4.7, support for TLS1.1 and TLS1.2 in WCF message security is disabled by default. You can enable it by adding the following line to the `` section of the app.config or web.config file: 20 | 21 | ```xml 22 | 23 | 24 | 25 | ``` 26 | 27 | ### Category 28 | Windows Communication Foundation (WCF) 29 | 30 | 31 | -------------------------------------------------------------------------------- /Documentation/compatibility/webutility_htmldecode-no-longer-decodes-invalid-input-sequences.md: -------------------------------------------------------------------------------- 1 | ## WebUtility.HtmlDecode no longer decodes invalid input sequences 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Planned 11 | 12 | ### Change Description 13 | By default, decoding methods no longer decode an invalid input sequence into an invalid UTF-16 string. Instead, they return the original input. 14 | 15 | - [ ] Quirked 16 | - [ ] Build-time break 17 | 18 | ### Recommended Action 19 | The change in decoder output should matter only if you store binary data instead of UTF-16 data in strings. To explicitly control this behavior, set the `aspnet:AllowRelaxedUnicodeDecoding` attribute of the [appSettings](~/docs/framework/configure-apps/file-schema/appsettings/index.md) element to `true` to enable legacy behavior or to `false` to enable the current behavior. 20 | 21 | ### Affected APIs 22 | * `M:System.Net.WebUtility.HtmlDecode(System.String)` 23 | * `M:System.Net.WebUtility.HtmlDecode(System.String,System.IO.TextWriter)` 24 | * `M:System.Net.WebUtility.UrlDecode(System.String)` 25 | 26 | ### Category 27 | ASP.NET 28 | 29 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /Documentation/compatibility/webutility_htmlencode-and-webutility_htmldecode-round-trip-bmp-correctly.md: -------------------------------------------------------------------------------- 1 | ## WebUtility.HtmlEncode and WebUtility.HtmlDecode round-trip BMP correctly 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Planned 11 | 12 | ### Change Description 13 | 14 | For applications that target the .NET Framework 4.5, characters that are outside 15 | the Basic Multilingual Plane (BMP) round-trip correctly when they are passed to 16 | the 17 | methods. 18 | 19 | - [x] Quirked 20 | - [ ] Build-time break 21 | 22 | ### Recommended Action 23 | 24 | This change should have no effect on current applications, but to restore the 25 | original behavior, set the `targetFramework` attribute of the `` 26 | element to a string other than "4.5". You can also set the 27 | `unicodeEncodingConformance` and `unicodeDecodingConformance` attributes of the 28 | `` configuration element to control this behavior independently of 29 | the targeted version of the .NET Framework. 30 | 31 | ### Affected APIs 32 | * `M:System.Net.WebUtility.HtmlEncode(System.String)` 33 | * `M:System.Net.WebUtility.HtmlEncode(System.String,System.IO.TextWriter)` 34 | 35 | ### Category 36 | ASP.NET 37 | 38 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /Documentation/compatibility/winform's-checkforoverflowunderflow-property-is-now-true-for-system_drawing.md: -------------------------------------------------------------------------------- 1 | ## WinForm's CheckForOverflowUnderflow property is now true for System.Drawing 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Not planned 11 | 12 | ### Change Description 13 | The CheckForOverflowUnderflow property for the System.Drawing.dll assembly is set to true. 14 | 15 | - [ ] Quirked 16 | - [ ] Build-time break 17 | 18 | ### Recommended Action 19 | 20 | Previously when overflows occurred, the result would be silently truncated. Now 21 | an exception is thrown. 22 | 23 | ### Affected APIs 24 | * Not detectable via API analysis 25 | 26 | ### Category 27 | Windows Forms 28 | 29 | 30 | -------------------------------------------------------------------------------- /Documentation/compatibility/winrt-stream-adapters-no-long-call-flushasync-automatically-on-close.md: -------------------------------------------------------------------------------- 1 | ## WinRT stream adapters no long call FlushAsync automatically on close 2 | 3 | ### Scope 4 | Transparent 5 | 6 | ### Version Introduced 7 | 4.5.1 8 | 9 | ### Source Analyzer Status 10 | Not planned 11 | 12 | ### Change Description 13 | In Windows Store apps, Windows Runtime stream adapters no longer call the FlushAsync method from the Dispose method. 14 | 15 | - [ ] Quirked 16 | - [ ] Build-time break 17 | 18 | ### Recommended Action 19 | This change should be transparent. Developers can restore the previous behavior by writing code like this: 20 | 21 | ```csharp 22 | using (var stream = GetWindowsRuntimeStream() as Stream) 23 | { 24 | // do something 25 | await stream.FlushAsync(); 26 | } 27 | ``` 28 | 29 | ### Affected APIs 30 | * Not detectable via API analysis 31 | 32 | ### Category 33 | Core 34 | 35 | 36 | -------------------------------------------------------------------------------- /Documentation/compatibility/workflow-3_0-types-are-obsolete.md: -------------------------------------------------------------------------------- 1 | ## WorkFlow 3.0 types are obsolete 2 | 3 | ### Scope 4 | Major 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | Windows Workflow Foundation (WWF) 3.0 APIs (those from the System.Workflow namespace) are now obsolete. 14 | 15 | - [ ] Quirked 16 | - [x] Build-time break 17 | 18 | ### Recommended Action 19 | New WWF 4.0 APIs (in System.Activities) should be used instead. An example of using the new APIs can be found [here](~/docs/framework/windows-workflow-foundation/how-to-update-the-definition-of-a-running-workflow-instance.md) and further guidance is available [here](https://blogs.msdn.com/b/workflowteam/archive/2012/02/08/deprecatingwf3.aspx). Alternatively, since the WWF 3.0 APIs are still supported, they may be used and the build-time warning avoided either by suppressing it or by using an older compiler. 20 | 21 | ### Affected APIs 22 | * Not detectable via API analysis 23 | 24 | ### Category 25 | Windows Workflow Foundation (WF) 26 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/compatibility/workflow-checksums-changed-from-md5-to-sha1.md: -------------------------------------------------------------------------------- 1 | ## Workflow checksums changed from MD5 to SHA1 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.7 8 | 9 | ### Source Analyzer Status 10 | NotPlanned 11 | 12 | ### Change Description 13 | To support debugging with Visual Studio, 14 | the Workflow runtime generates a checksum for a workflow instance using a hashing algorithm. 15 | In the .NET Framework 4.6.2 and earlier versions, workflow checksum hashing used the MD5 16 | algorithm, which caused issues on FIPS-enabled systems. Starting with the .NET Framework 4.7, 17 | the algorithm is SHA1. If your code has persisted these checksums, they will be incompatible. 18 | 19 | - [x] Quirked 20 | - [ ] Build-time break 21 | 22 | ### Recommended Action 23 | If your code is unable to load workflow instances due to a checksum failure, try setting 24 | the `AppContext` switch "Switch.System.Activities.UseMD5ForWFDebugger" to true. 25 | 26 | In code: 27 | ```csharp 28 | System.AppContext.SetSwitch("Switch.System.Activities.UseMD5ForWFDebugger", true); 29 | ``` 30 | 31 | Or in configuration: 32 | ```xml 33 | 34 | 35 | 36 | 37 | 38 | ``` 39 | 40 | ### Affected APIs 41 | * Not detectable via API analysis 42 | 43 | ### Category 44 | Windows Workflow Foundation (WF) 45 | 46 | 47 | -------------------------------------------------------------------------------- /Documentation/compatibility/workflow-now-throws-original-exception-instead-of-nullreferenceexception-in-some-cases.md: -------------------------------------------------------------------------------- 1 | ## Workflow now throws original exception instead of NullReferenceException in some cases 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.7 8 | 9 | ### Source Analyzer Status 10 | NotPlanned 11 | 12 | ### Change Description 13 | 14 | In the .NET Framework 4.6.2 and earlier versions, when the Execute method of a 15 | workflow activity throws an exception with a `null` value for the 16 | property, the 17 | System.Activities Workflow runtime throws a 18 | , masking the original 19 | exception. 20 | 21 | In the .NET Framework 4.7, the previously masked exception is thrown. 22 | 23 | - [ ] Quirked 24 | - [ ] Build-time break 25 | 26 | ### Recommended Action 27 | 28 | If your code relies on handling the 29 | , change it to catch 30 | the exceptions that could be thrown from your custom activities. 31 | 32 | ### Affected APIs 33 | * `M:System.Activities.CodeActivity.Execute(System.Activities.CodeActivityContext)` 34 | * `M:System.Activities.AsyncCodeActivity.BeginExecute(System.Activities.AsyncCodeActivityContext,System.AsyncCallback,System.Object)` 35 | * `M:System.Activities.AsyncCodeActivity`1.BeginExecute(System.Activities.AsyncCodeActivityContext,System.AsyncCallback,System.Object)` 36 | * `M:System.Activities.WorkflowInvoker.Invoke` 37 | 38 | ### Category 39 | Windows Workflow Foundation (WF) 40 | 41 | 42 | -------------------------------------------------------------------------------- /Documentation/compatibility/workflow-sql-persistence-adds-primary-key-clusters-and-disallows-null-values-in-some-columns.md: -------------------------------------------------------------------------------- 1 | ## Workflow SQL persistence adds primary key clusters and disallows null values in some columns 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.7 8 | 9 | ### Source Analyzer Status 10 | NotPlanned 11 | 12 | ### Change Description 13 | Starting with the .NET Framework 4.7, the tables created for the SQL Workflow Instance Store 14 | (SWIS) by the SqlWorkflowInstanceStoreSchema.sql script use clustered primary keys. Because of 15 | this, identities do not support `null` values. The operation of SWIS is not impacted by this 16 | change. The updates were made to support SQL Server Transactional Replication. 17 | 18 | - [ ] Quirked 19 | - [ ] Build-time break 20 | 21 | ### Recommended Action 22 | The SQL file SqlWorkflowInstanceStoreSchemaUpgrade.sql must be applied to existing installations 23 | in order to experience this change. New database installations will automatically have the change. 24 | 25 | ### Affected APIs 26 | * Not detectable via API analysis 27 | 28 | ### Category 29 | Windows Workflow Foundation (WF) 30 | 31 | 32 | -------------------------------------------------------------------------------- /Documentation/compatibility/workflowdesigner_load-doesn't-remove-symbol-property.md: -------------------------------------------------------------------------------- 1 | ## WorkflowDesigner.Load doesn't remove symbol property 2 | 3 | ### Scope 4 | Major 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Version Reverted 10 | 4.5.2 11 | 12 | ### Source Analyzer Status 13 | Planned 14 | 15 | ### Change Description 16 | 17 | When targeting the .NET Framework 4.5 in the workflow designer, and loading a 18 | re-hosted 3.5 workflow with the 19 | 20 | method, a 21 | is thrown while saving the workflow. 22 | 23 | - [x] Quirked 24 | - [ ] Build-time break 25 | 26 | ### Recommended Action 27 | 28 | This bug only manifests when targeting .NET Framework 4.5 in the workflow designer, so it can be worked around by setting the `WorkflowDesigner.Context.Services.GetService().TargetFrameworkName` to the 4.0 .NET Framework. 29 | 30 | Alternatively, the issue may be avoided by using the 31 | 32 | method to load the workflow, instead of 33 | . 34 | 35 | ### Affected APIs 36 | * `M:System.Activities.Presentation.WorkflowDesigner.Load` 37 | 38 | ### Category 39 | Windows Workflow Foundation (WF) 40 | 41 | [More information](https://connect.microsoft.com/VisualStudio/feedback/details/786503/) 42 | 43 | 44 | -------------------------------------------------------------------------------- /Documentation/compatibility/wpf-TextBox-PasswordBox-text-selection-does-not-follow-system-colors.md: -------------------------------------------------------------------------------- 1 | ## WPF TextBox/PasswordBox Text Selection Does Not Follow System Colors 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.7.2 8 | 9 | ### Source Analyzer Status 10 | NotPlanned 11 | 12 | ### Change Description 13 | In .NET Framework 4.7.1 and earlier versions, WPF `System.Windows.Controls.TextBox` and `System.Windows.Controls.PasswordBox` could only render a text selection in the Adorner layer. 14 | In some system themes this would occlude text, making it hard to read. In .NET Framework 4.7.2 and later, developers have an option of enabling a non-Adorner-based selection rendering 15 | scheme that alleviates this issue. 16 | 17 | - [X] Quirked 18 | - [ ] Build-time break 19 | 20 | ### Recommended Action 21 | A developer who wants to utilize this change must set the following AppContext flag appropriately. To utilize this feature, the installed .NET Framework version must be 4.7.2 or greater. 22 | 23 | To enabled the non-adorner-based selection, use the following AppContext flag. 24 | 25 | ```xml 26 | 27 | 28 | 29 | 30 | 31 | ``` 32 | 33 | ### Affected APIs 34 | Not detectable via API analysis 35 | 36 | ### Category 37 | Windows Presentation Foundation (WPF) 38 | 39 | -------------------------------------------------------------------------------- /Documentation/compatibility/wpf-aero2-and-aerolite-themes-toggle-button-doesn't-show-any-state.md: -------------------------------------------------------------------------------- 1 | ## WPF Aero2 and AeroLite themes toggle button doesn't show any state 2 | 3 | ### Scope 4 | Major 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Version Reverted 10 | 4.5 11 | 12 | ### Source Analyzer Status 13 | Not planned 14 | 15 | ### Change Description 16 | In the .NET Framework 4.5, WPF's Aero2 and AeroLite themes do not show a difference between the 'on' and 'off' states of a toggle button. 17 | 18 | - [ ] Quirked 19 | - [ ] Build-time break 20 | 21 | ### Recommended Action 22 | This issue was fixed in a servicing update. Update the .NET Framework 4.5, or upgrade to .NET Framework 4.5.1 or later, to fix this issue. Alternatively, toggle buttons may be explicitly styled to work around this issue. 23 | 24 | ### Affected APIs 25 | * T:System.Windows.Controls.Primitives.ToggleButton 26 | * M:System.Windows.Controls.Primitives.ToggleButton.#ctor 27 | 28 | ### Category 29 | Windows Presentation Foundation (WPF) 30 | 31 | [More information](https://stackoverflow.com/questions/12450751/togglebutton-doesnt-show-any-state) 32 | 33 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /Documentation/compatibility/wpf-chained-popups-with-StaysOpen-false.md: -------------------------------------------------------------------------------- 1 | ## Chained Popups with StaysOpen=False 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.7.1 8 | 9 | ### Source Analyzer Status 10 | NotPlanned 11 | 12 | ### Change Description 13 | A Popup with StaysOpen=False is supposed to close when you click outside the Popup. 14 | When two or more such Popups are chained (i.e. one contains another), there were many problems, including: 15 | * Open two levels, click outside P2 but inside P1. Nothing happens. 16 | * Open two levels, click outside P1. Both popups close. 17 | * Open and close two levels. Then try to open P2 again. Nothing happens. 18 | * Try to open three levels. You can't. (Either nothing happens or the first two levels close, depending on where you click.) 19 | These cases (and other variants) now work as expected. 20 | 21 | - [ ] Quirked 22 | - [ ] Build-time break 23 | 24 | ### Recommended Action 25 | 26 | ### Affected APIs 27 | * `P:System.Windows.Controls.Primitives.Popup.StaysOpen` 28 | 29 | ### Category 30 | Windows Presentation Foundation (WPF) 31 | 32 | 36 | -------------------------------------------------------------------------------- /Documentation/compatibility/wpf-databinding-should-use-key-not-indexer.md: -------------------------------------------------------------------------------- 1 | ## Data Binding improvement for KeyedCollection 2 | 3 | ### Scope 4 | Major 5 | 6 | ### Version Introduced 7 | 4.8 8 | 9 | ### Source Analyzer Status 10 | NotPlanned 11 | 12 | ### Change Description 13 | Fixed [Binding's](xref:System.Windows.Data.Binding) incorrect use of IList indexer when the source object declares a custom indexer with the same signature (e.g. KeyedCollection). 14 | 15 | - [ ] Quirked 16 | - [ ] Build-time break 17 | 18 | ### Recommended Action 19 | In order for an application that targets an older version to benefit from this change, it must run on the .NET Framework 4.8 or later, and it must opt in to the change by adding the following [AppContext switch](https://docs.microsoft.com/dotnet/framework/configure-apps/file-schema/runtime/appcontextswitchoverrides-element) to the `` section of the app config file and setting it to `false`: 20 | 21 | ```xml 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | ``` 33 | 34 | ### Category 35 | WPF 36 | 37 | 41 | -------------------------------------------------------------------------------- /Documentation/compatibility/wpf-datatemplate-elements-are-now-visible-to-uia.md: -------------------------------------------------------------------------------- 1 | ## WPF DataTemplate elements are now visible to UIA 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | 14 | Previously, elements 15 | were invisible to UI Automation. Beginning in 4.5, UI Automation will detect 16 | these elements. This is useful in many cases, but can break tests that depend on 17 | UIA trees not containing 18 | elements. 19 | 20 | - [ ] Quirked 21 | - [ ] Build-time break 22 | 23 | ### Recommended Action 24 | 25 | UI Automation tests for this app may need updated to account for the UIA tree now 26 | including previously invisible 27 | elements. For example, 28 | tests that expect some elements to be next to each other may now need to expect 29 | previously invisible UIA elements in between. Or tests that rely on certain 30 | counts or indexes for UIA elements may need updated with new values. 31 | 32 | ### Affected APIs 33 | * `M:System.Windows.DataTemplate.#ctor` 34 | * `M:System.Windows.DataTemplate.#ctor(System.Object)` 35 | 36 | ### Category 37 | Windows Presentation Foundation (WPF) 38 | 39 | 40 | -------------------------------------------------------------------------------- /Documentation/compatibility/wpf-grid-row-size-allocation-with-collapsed-element.md: -------------------------------------------------------------------------------- 1 | ## Improvements to Grid star-rows space allocating algorithm 2 | 3 | ### Scope 4 | Major 5 | 6 | ### Version Introduced 7 | 4.8 8 | 9 | ### Source Analyzer Status 10 | NotPlanned 11 | 12 | ### Change Description 13 | Fixed a bug in the [algorithm for allocating sizes to *-rows](https://github.com/Microsoft/dotnet/blob/master/Documentation/compatibility/wpf-grid-allocation-of-space-to-star-columns.md) in a introduced in .NET Framework 4.7. In some cases, such as a Grid with `Height="Auto"` containing empty rows, rows were arranged at the wrong position, possibly outside the Grid altogether. 14 | 15 | - [ ] Quirked 16 | - [ ] Build-time break 17 | 18 | ### Recommended Action 19 | In order for the application to benefit from these changes, it must run on the .NET Framework 4.8 or later. 20 | 21 | ### Category 22 | WPF 23 | 24 | 28 | -------------------------------------------------------------------------------- /Documentation/compatibility/wpf-hang-listbox-duplicate-valuetypes.md: -------------------------------------------------------------------------------- 1 | ## Fixed problem of unresponsiveness when ListBox contains duplicate value-types 2 | 3 | ### Scope 4 | Major 5 | 6 | ### Version Introduced 7 | 4.8 8 | 9 | ### Source Analyzer Status 10 | NotPlanned 11 | 12 | ### Change Description 13 | Fixed a problem where a virtualizing can become unresponsive during scrolling when its collection contains duplicate value-typed objects. 14 | 15 | - [ ] Quirked 16 | - [ ] Build-time break 17 | 18 | ### Category 19 | WPF 20 | 21 | 25 | -------------------------------------------------------------------------------- /Documentation/compatibility/wpf-hang-when-resizing-a-grid.md: -------------------------------------------------------------------------------- 1 | ## Resizing a Grid can cause an application to become unresponsive 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.7 8 | 9 | ### Version Reverted 10 | 4.7.1 11 | 12 | ### Source Analyzer Status 13 | NotPlanned 14 | 15 | ### Change Description 16 | An infinite loop can occur during layout of a `T:System.Windows.Controls.Grid` under the following 17 | circumstances: 18 | 19 | * Row definitions contain two *-rows, both declaring a MinHeight and a MaxHeight. 20 | * Content of the *-rows doesn't exceed the corresponding MaxHeight 21 | * The Grid's available height is exceeded by the first MinHeight (plus any other fixed or Auto rows) 22 | * The app targets .NET Framework 4.7, or opts in to the 4.7 allocation algorithm by setting 23 | `Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=false` 24 | 25 | The loop would also happen with more than two rows, or in the analogous case for columns. 26 | 27 | The issue is fixed in .NET Framework 4.7.1. 28 | 29 | - [ ] Quirked 30 | - [ ] Build-time break 31 | 32 | ### Recommended Action 33 | Upgrade to .NET Framework 4.7.1. Alternatively, if you don't need the 4.7 allocation algorithm 34 | you can use the following configuration setting: 35 | 36 | ```xml 37 | 38 | 39 | 40 | ``` 41 | 42 | ### Affected APIs 43 | * Not detectable via API analysis 44 | 45 | ### Category 46 | Windows Presentation Foundation (WPF) 47 | 48 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /Documentation/compatibility/wpf-keyboard-navigation-listbox-hyperlink.md: -------------------------------------------------------------------------------- 1 | ## Keyboard navigation improvement in ListBox with Hyperlinks 2 | 3 | ### Scope 4 | Major 5 | 6 | ### Version Introduced 7 | 4.8 8 | 9 | ### Source Analyzer Status 10 | NotPlanned 11 | 12 | ### Change Description 13 | Fixed incorrect result of pressing an arrow key when the focus is on a hyperlink within an item that is not the selected item of the parent . 14 | 15 | - [ ] Quirked 16 | - [ ] Build-time break 17 | 18 | ### Category 19 | WPF 20 | 21 | 25 | -------------------------------------------------------------------------------- /Documentation/compatibility/wpf-pencontext-disable-method-calls-on-touch-enabled-systems-may-throw-argumentexception.md: -------------------------------------------------------------------------------- 1 | ## Calls to System.Windows.Input.PenContext.Disable on touch-enabled systems may throw an ArgumentException 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.6.1 8 | 9 | ### Version Reverted 10 | 4.7 11 | 12 | ### Source Analyzer Status 13 | NotPlanned 14 | 15 | ### Change Description 16 | Under some circumstances, calls to the internal **System.Windows.Intput.PenContext.Disable** method on touch-enabled systems may throw an unhandled `T:System.ArgumentException` because of reentrancy. 17 | 18 | - [ ] Quirked 19 | - [X] Build-time break 20 | 21 | ### Recommended Action 22 | This issue has been addressed in the .NET Framework 4.7. To prevent the exception, upgrade to a version of the .NET Framework starting with the .NET Framework 4.7. 23 | 24 | ### Affected APIs 25 | Not detectable via API analysis 26 | 27 | ### Category 28 | Windows Presentation Foundation (WPF) 29 | 30 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /Documentation/compatibility/wpf-performace-improvement-grouping-automation.md: -------------------------------------------------------------------------------- 1 | ## Performance improvement in Automation tree for grouping ItemsControls 2 | 3 | ### Scope 4 | Major 5 | 6 | ### Version Introduced 7 | 4.8 8 | 9 | ### Source Analyzer Status 10 | NotPlanned 11 | 12 | ### Change Description 13 | Improved the performance of rebuilding the automation tree of an , such as a ListBox or DataGrid, in which grouping is enabled. 14 | 15 | - [ ] Quirked 16 | - [ ] Build-time break 17 | 18 | ### Category 19 | WPF 20 | 21 | 25 | -------------------------------------------------------------------------------- /Documentation/compatibility/wpf-printing-stack-update.md: -------------------------------------------------------------------------------- 1 | ## WPF Printing Stack Update 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.7 8 | 9 | ### Source Analyzer Status 10 | NotPlanned 11 | 12 | ### Change Description 13 | 14 | WPF's Printing APIs using 15 | now call Window's Print Document Package API in favor of the now deprecated XPS 16 | Print API. The change was made with serviceability in mind; neither users nor developers 17 | should see any changes in behavior or API usage. The new printing 18 | stack is enabled by default when running in Windows 10 Creators Update. The old 19 | printing stack will still continue to work just as before in older Windows 20 | versions. 21 | 22 | - [ ] Quirked 23 | - [ ] Build-time break 24 | 25 | ### Recommended Action 26 | 27 | To use the old stack in Windows 10 Creators Update, set the `UseXpsOMPrinting` REG_DWORD value of the `HKEY_CURRENT_USER\Software\Microsoft\.NETFramework\Windows Presentation Foundation\Printing` registry key to `1`. 28 | 29 | ### Affected APIs 30 | Not detectable via API analysis 31 | 32 | ### Category 33 | Windows Presentation Foundation (WPF) 34 | 35 | ### Original Bug 36 | https://devdiv.visualstudio.com/DevDiv/_workitems?id=113979 37 | 38 | 39 | -------------------------------------------------------------------------------- /Documentation/compatibility/wpf-spawns-a-wisptis_exe-process-which-can-freeze-the-mouse.md: -------------------------------------------------------------------------------- 1 | ## WPF spawns a wisptis.exe process which can freeze the mouse 2 | 3 | ### Scope 4 | Major 5 | 6 | ### Version Introduced 7 | 4.5.2 8 | 9 | ### Version Reverted 10 | 4.6 11 | 12 | ### Source Analyzer Status 13 | Not planned 14 | 15 | ### Change Description 16 | An issue was introduced in 4.5.2 that causes `wisptis.exe` to be spawned that can freeze mouse input. 17 | 18 | - [ ] Quirked 19 | - [ ] Build-time break 20 | 21 | ### Recommended Action 22 | A fix for this issue is available in a servicing release of the .NET Framework 4.5.2 (hotfix rollup 3026376), or by upgrading to the .NET Framework 4.6 23 | 24 | ### Affected APIs 25 | * Not detectable via API analysis 26 | 27 | ### Category 28 | Windows Presentation Foundation (WPF) 29 | 30 | [More information](http://connect.microsoft.com/VisualStudio/feedback/details/927119/net-framework-4-5-2-causes-applications-using-wpf-to-spawn-a-wisptis-exe-process-which-can-freeze-the-mouse) 31 | 32 | 33 | -------------------------------------------------------------------------------- /Documentation/compatibility/wpf-spell-checking-fail-in-unexpected-ways.md: -------------------------------------------------------------------------------- 1 | ## WPF Spell Checking fails in unexpected ways 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.6.1 8 | 9 | ### Version Reverted 10 | 4.6.2 11 | 12 | ### Source Analyzer Status 13 | Not planned 14 | 15 | ### Change Description 16 | 17 | This includes a number of WPF Spell Checker issues: 18 | - WPF Spell Checker sometimes throws 19 | - WPF Spell Checker fails with when applications are launched using 'run as different user' 20 | - WPF Spell Checker incorrectly identifies spelling errors in compound words like 'Hausnummer' in German. 21 | 22 | - [ ] Quirked 23 | - [ ] Build-time break 24 | 25 | ### Recommended Action 26 | 27 | Issue #1 - This has been fixed in .NET Framework 4.6.2 28 | Issue #2 - WPF Spell Checker is no longer supported when applications are launched using 'run as different user'. Starting .NET Framework 4.6.2, applications launched in this manner will no longer crash unexpectedly - instead the Spell Checker will be silently disabled. 29 | Issue #3 - This has been fixed in .NET Framework 4.6.2. 30 | 31 | ### Affected APIs 32 | * Not detectable via API analysis 33 | 34 | ### Category 35 | Windows Presentation Foundation (WPF) 36 | 37 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /Documentation/compatibility/wpf-spell-checking-in-text-enabled-controls-will-not-work-in-windows-10-for-languages-not-in-the-input-language-list.md: -------------------------------------------------------------------------------- 1 | ## WPF spell checking in text-enabled controls will not work in Windows 10 for languages not in the OS's input language list 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.6 8 | 9 | ### Source Analyzer Status 10 | Not planned 11 | 12 | ### Change Description 13 | When running on Windows 10, the spell checker may not work for WPF text-enabled controls because platform spell-checking capabilities are available only for languages present in the input languages list. 14 | 15 | In Windows 10, when a language is added to the list of available keyboards, Windows automatically downloads and installs a corresponding Feature on Demand (FOD) package that provides spell-checking capabilities. By adding the language to the input languages list, the spell checker will be supported. 16 | 17 | - [ ] Quirked 18 | - [ ] Build-time break 19 | 20 | ### Recommended Action 21 | Be aware that the language or text to be spell-checked must be added as an input language for spell-checking to work in Windows 10. 22 | 23 | ### Affected APIs 24 | * Not detectable via API analysis 25 | 26 | ### Category 27 | Windows Presentation Foundation (WPF) 28 | 29 | 30 | -------------------------------------------------------------------------------- /Documentation/compatibility/wpf-textbox-defaults-to-undo-limit-of-100.md: -------------------------------------------------------------------------------- 1 | ## WPF TextBox defaults to undo limit of 100 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Planned 11 | 12 | ### Change Description 13 | In .NET Framework 4.5, the default undo limit for a WPF textbox is 100 (as opposed to being unlimited in .NET Framework 4.0) 14 | 15 | - [ ] Quirked 16 | - [ ] Build-time break 17 | 18 | ### Recommended Action 19 | If an undo limit of 100 is too low, the limit can be set explicitly with 20 | 21 | ### Affected APIs 22 | * `T:System.Windows.Controls.TextBox` 23 | 24 | ### Category 25 | Windows Presentation Foundation (WPF) 26 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/compatibility/wpf-textbox-selected-text-appears-a-different-color-when-the-text-box-is-inactive.md: -------------------------------------------------------------------------------- 1 | ## WPF TextBox selected text appears a different color when the text box is inactive 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | 14 | In .NET Framework 4.5, when a WPF text box control is inactive (it doesn't have focus), 15 | the selected text inside the box will appear a different color than when the 16 | control is active. 17 | 18 | - [ ] Quirked 19 | - [ ] Build-time break 20 | 21 | ### Recommended Action 22 | 23 | The previous (.NET Framework 4.0) behavior may be restored by setting the 24 | 25 | property to `false`. 26 | 27 | ### Affected APIs 28 | * `T:System.Windows.Controls.TextBox` 29 | 30 | ### Category 31 | Windows Presentation Foundation (WPF) 32 | 33 | 34 | -------------------------------------------------------------------------------- /Documentation/compatibility/wpf-textbox_text-can-be-out-of-sync-with-databinding.md: -------------------------------------------------------------------------------- 1 | ## WPF TextBox.Text can be out-of-sync with databinding 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Planned 11 | 12 | ### Change Description 13 | 14 | In some cases, the 15 | 16 | property reflects a previous value of the databound property value if the 17 | property is modified during a databinding write operation. 18 | 19 | - [x] Quirked 20 | - [ ] Build-time break 21 | 22 | ### Recommended Action 23 | 24 | This should have no negative impact. However, you can restore the previous 25 | behavior by setting the 26 | 27 | property to `false`. 28 | 29 | ### Affected APIs 30 | * `P:System.Windows.Controls.TextBox.Text` 31 | 32 | ### Category 33 | Windows Presentation Foundation (WPF) 34 | 35 | 36 | -------------------------------------------------------------------------------- /Documentation/compatibility/wpf-windows-are-rendered-without-clipping-when-extending-outside-a-single-monitor.md: -------------------------------------------------------------------------------- 1 | ## WPF windows are rendered without clipping when extending outside a single monitor 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.6 8 | 9 | ### Source Analyzer Status 10 | Not planned 11 | 12 | ### Change Description 13 | In the .NET Framework 4.6 running on Windows 8 and above, the entire window is rendered without clipping when it extends outside of single display in a multi-monitor scenario. This is different from previous versions of the .NET Framework which would clip WPF windows that extended beyond a single display. 14 | 15 | - [ ] Quirked 16 | - [ ] Build-time break 17 | 18 | ### Recommended Action 19 | This behavior (whether to clip or not) can be explicitly set using the `` element in `` in an application's configuration file, or by setting the `EnableMultiMonitorDisplayClipping` property at app startup. 20 | 21 | ### Affected APIs 22 | * Not detectable via API analysis 23 | 24 | ### Category 25 | Windows Presentation Foundation (WPF) 26 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/compatibility/x509certificate2_tostring(bool)-does-not-throw-now-when-dotnet-cannot-handle-the-certificate.md: -------------------------------------------------------------------------------- 1 | ## X509Certificate2.ToString(Boolean) does not throw now when .NET cannot handle the certificate 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.6 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | 14 | In .NET Framework 4.5.2 and earlier versions, this method would throw if `true` was passed for the verbose 15 | parameter and there were certificates installed that weren't supported by the 16 | .NET Framework. Now, the method will succeed and return a valid string that 17 | omits the inaccessible portions of the certificate. 18 | 19 | - [ ] Quirked 20 | - [ ] Build-time break 21 | 22 | ### Recommended Action 23 | 24 | Any code depending on 25 | 26 | should be updated to expect that the returned string may exclude some 27 | certificate data (such as public key, private key, and extensions) in some cases 28 | in which the API would have previously thrown. 29 | 30 | ### Affected APIs 31 | * `M:System.Security.Cryptography.X509Certificates.X509Certificate2.ToString(System.Boolean)` 32 | 33 | ### Category 34 | Core 35 | 36 | 37 | -------------------------------------------------------------------------------- /Documentation/compatibility/x509certificateclaimset_findclaims-considers-all-claimtypes.md: -------------------------------------------------------------------------------- 1 | ## X509CertificateClaimSet.FindClaims Considers All claimTypes 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.6.1 8 | 9 | ### Source Analyzer Status 10 | Planned 11 | 12 | ### Change Description 13 | 14 | In apps that target the .NET Framework 4.6.1, if an X509 claim set is 15 | initialized from a certificate that has multiple DNS entries in its SAN field, the 16 | 17 | method attempts to match the claimType argument with all the DNS entries. 18 | 19 | For apps that target previous versions of the .NET Framework, the 20 | 21 | method attempts to match the claimType argument only with the last DNS entry. 22 | 23 | - [x] Quirked 24 | - [ ] Build-time break 25 | 26 | ### Recommended Action 27 | 28 | This change only affects applications targeting the .NET Framework 4.6.1. This 29 | change may be disabled (or enabled if targetting pre-4.6.1) with the 30 | [DisableMultipleDNSEntries](~/docs/framework/migration-guide/mitigation-x509certificateclaimset-findclaims-method.md#mitigation) 31 | compatibility switch. 32 | 33 | ### Affected APIs 34 | * `M:System.IdentityModel.Claims.X509CertificateClaimSet.FindClaims(System.String,System.String)` 35 | 36 | ### Category 37 | Windows Communication Foundation (WCF) 38 | 39 | 40 | -------------------------------------------------------------------------------- /Documentation/compatibility/xml-schema-validation-is-stricter.md: -------------------------------------------------------------------------------- 1 | ## XML schema validation is stricter 2 | 3 | ### Scope 4 | Minor 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | In the .NET Framework 4.5, XML schema validation is more strict. If you use xsd:anyURI to validate a URI such as a mailto protocol, validation fails if there are spaces in the URI. In previous versions of the .NET Framework, validation succeeded. The change affects only applications that target the .NET Framework 4.5. 14 | 15 | - [x] Quirked 16 | - [ ] Build-time break 17 | 18 | ### Recommended Action 19 | If looser .NET Framework 4.0 validation is needed, the validating application can target version 4.0 of the .NET Framework. When retargeting to .NET Framework 4.5, however, code review should be done to be sure that invalid URIs (with spaces) are not expected as attribute values with the anyURI data type. 20 | 21 | ### Affected APIs 22 | * Not detectable via API analysis 23 | 24 | ### Category 25 | XML, XSLT 26 | 27 | 28 | -------------------------------------------------------------------------------- /Documentation/compatibility/xmlschemaexception-now-sets-line-positions-properly.md: -------------------------------------------------------------------------------- 1 | ## XmlSchemaException now sets line positions properly 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | 14 | If the 15 | value is passed to the Load method and a validation error occurs, the 16 | 17 | and 18 | properties now contain line information. 19 | 20 | - [ ] Quirked 21 | - [ ] Build-time break 22 | 23 | ### Recommended Action 24 | 25 | Exception-handling code that assumes 26 | 27 | and 28 | will not be set should be updated since these properties will now be set 29 | properly when SetLineInfo is used while loading XML. 30 | 31 | ### Affected APIs 32 | * `F:System.Xml.Linq.LoadOptions.SetLineInfo` 33 | 34 | ### Category 35 | XML, XSLT 36 | 37 | 38 | -------------------------------------------------------------------------------- /Documentation/compatibility/xsd-schema-validation-now-correctly-detects-violations-of-unique-constraints-if-compound-keys-are-used-and-one-key-is-empty.md: -------------------------------------------------------------------------------- 1 | ## XSD Schema validation now correctly detects violations of unique constraints if compound keys are used and one key is empty 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.6 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | 14 | Versions of the .NET Framework prior to 4.6 had a bug that caused XSD validation 15 | to not detect unique constraints on compound keys if one of the keys was empty. 16 | In the .NET Framework 4.6, this issue is corrected. This will result in more 17 | correct validation, but it may also result in some XML not validating which 18 | previously would have. 19 | 20 | - [x] Quirked 21 | - [ ] Build-time break 22 | 23 | ### Recommended Action 24 | 25 | If looser .NET Framework 4.0 validation is needed, the validating application 26 | can target version 4.5 (or earlier) of the .NET Framework. When retargeting to 27 | .NET Framework 4.6, however, code review should be done to be sure that duplicate compound 28 | keys (as described in this issue's description) are not expected to validate. 29 | 30 | ### Affected APIs 31 | * Not detectable via API analysis 32 | 33 | ### Category 34 | XML, XSLT 35 | 36 | 37 | -------------------------------------------------------------------------------- /Documentation/compatibility/xslt-forward-compat-now-works.md: -------------------------------------------------------------------------------- 1 | ## XSLT forward compat now works 2 | 3 | ### Scope 4 | Edge 5 | 6 | ### Version Introduced 7 | 4.5 8 | 9 | ### Source Analyzer Status 10 | Available 11 | 12 | ### Change Description 13 | In the .NET Framework 4, XSLT 1.0 forward compatibility had the following issues: 14 | 15 | - Loading a style sheet failed if its version was set to 2.0 and the parser encountered an unrecognized XSLT 1.0 construct. 16 | - The `xsl:sort` construct failed to sort data if the style sheet version was set to 1.1. 17 | 18 | In the .NET Framework 4.5, these issues have been fixed, and XSLT 1.0 forward compatibility mode works properly. 19 | 20 | - [ ] Quirked 21 | - [ ] Build-time break 22 | 23 | ### Recommended Action 24 | Most apps should be unaffected, however data will be sorted differently in some cases now that xsl:sort is respected. If `xsl:sort` is used in 1.1 style sheets, confirm that apps were not depending on the unsorted order of data. If apps rely on the 4.0 sorting behavior, remove `xsl:sort` from the style sheet. 25 | 26 | ### Affected APIs 27 | * `T:System.Xml.Xsl.XslCompiledTransform` 28 | 29 | ### Category 30 | XML, XSLT 31 | 32 | 33 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2019 Microsoft 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /docs/testing-with-ryujit.md: -------------------------------------------------------------------------------- 1 | This document has been moved to [.NET Framework 4.6 - Troubleshooting RyuJIT](../Documentation/testing-with-ryujit.md) -------------------------------------------------------------------------------- /releases/UWP/README.md: -------------------------------------------------------------------------------- 1 | # .NET Native (UWP) Releases 2 | 3 | You can learn about Microsoft.NETCore.UniversalWindowsPlatform [releases](#releases), below. See [resources](#resources) for additional information. 4 | 5 | ## Release Notes 6 | 7 | You can see what was included in each .NET Native (Microsoft.NETCore.UniversalWindowsPlatform) release. 8 | 9 | - [.NET Native 2.2 (UWP 6.2.x)](net-native2.2/README.md) 10 | - [.NET Native 2.1 (UWP 6.1.x)](net-native2.1/README.md) 11 | - [.NET Native 2.0 (UWP 6.0.x)](net-native2.0/README.md) 12 | - [.NET Native 1.7 (UWP 5.4.x)](net-native1.7/README.md) 13 | - [.NET Native 1.6 (UWP 5.3.x)](net-native1.6/README.md) 14 | - [.NET Native 1.4 (UWP 5.2.x)](net-native1.4/README.md) 15 | 16 | ## Resources 17 | 18 | - [Getting Started with .NET Native](https://docs.microsoft.com/en-us/dotnet/framework/net-native/getting-started-with-net-native) 19 | - [Microsoft.NETCore.UniversalWindowsPlatform NuGet Package Details](https://www.nuget.org/packages/Microsoft.NETCore.UniversalWindowsPlatform) 20 | - [Windows Dev Center](https://developer.microsoft.com/en-us/windows/apps/getstarted) 21 | - [Downloads and tools for Windows 10](https://developer.microsoft.com/en-us/windows/downloads) 22 | 23 | ## Provide Feedback 24 | 25 | Please continue to send questions and suggestions to dotnetnative@microsoft.com. We look forward to hearing from you and seeing what great things you will build. 26 | -------------------------------------------------------------------------------- /releases/UWP/net-native2.0/images/funceval-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/dotnet/fb8d575772ad9a4c39b63e9f71db019e81a48564/releases/UWP/net-native2.0/images/funceval-0.png -------------------------------------------------------------------------------- /releases/UWP/net-native2.0/images/funceval-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/dotnet/fb8d575772ad9a4c39b63e9f71db019e81a48564/releases/UWP/net-native2.0/images/funceval-1.png -------------------------------------------------------------------------------- /releases/UWP/net-native2.0/images/funceval-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/dotnet/fb8d575772ad9a4c39b63e9f71db019e81a48564/releases/UWP/net-native2.0/images/funceval-2.png -------------------------------------------------------------------------------- /releases/net45/README.md: -------------------------------------------------------------------------------- 1 | # .NET Framework 4.5 Release Notes 2 | 3 | You can learn about the changes made in the .NET Framework 4.5. 4 | 5 | The .NET Framework 4.5 is no longer supported by Microsoft. 6 | 7 | - [.NET Framework 4.5 announcement blog post](https://blogs.msdn.microsoft.com/dotnet/2012/08/15/announcing-the-release-of-net-framework-4-5-rtm-product-and-source-code/) 8 | - [What's new in the .NET Framework 4.5](https://docs.microsoft.com/dotnet/articles/framework/whats-new/index#v45) 9 | - [Application compatibility](../../Documentation/compatibility/README.md#net-framework-45) 10 | - [Known issues](https://support.microsoft.com/en-us/help/2890857/known-issues-for-the-.net-framework-4.5) 11 | -------------------------------------------------------------------------------- /releases/net451/README.md: -------------------------------------------------------------------------------- 1 | # .NET Framework 4.5.1 Release Notes 2 | 3 | You can learn about the changes made in the .NET Framework 4.5.1. 4 | 5 | The .NET Framework 4.5.1 is no longer supported by Microsoft. 6 | 7 | - [Download](http://go.microsoft.com/fwlink/?LinkId=321326) 8 | - [.NET Framework 4.5.1 announcement blog post](https://blogs.msdn.microsoft.com/dotnet/2013/10/17/net-framework-4-5-1-rtm-start-coding/) 9 | - [What's new in the .NET Framework 4.5.1](https://docs.microsoft.com/dotnet/articles/framework/whats-new/index#v451) 10 | - [Application compatibility](../../Documentation/compatibility/README.md#net-framework-451) 11 | - [Known issues](https://support.microsoft.com/en-us/help/2890857/known-issues-for-the-.net-framework-4.5.1) 12 | -------------------------------------------------------------------------------- /releases/net452/README.md: -------------------------------------------------------------------------------- 1 | # .NET Framework 4.5.2 Release Notes 2 | 3 | You can learn about the changes made in the .NET Framework 4.5.2. 4 | 5 | - [Download](http://go.microsoft.com/fwlink/?LinkId=397674) 6 | - [.NET Framework 4.5.2 announcement blog post](https://blogs.msdn.microsoft.com/dotnet/2014/05/05/announcing-the-net-framework-4-5-2/) 7 | - [What's new in the .NET Framework 4.5.2](https://docs.microsoft.com/dotnet/articles/framework/whats-new/index#v452) 8 | - [Application compatibility](../../Documentation/compatibility/README.md#net-framework-452) 9 | - [Known issues](https://support.microsoft.com/en-us/help/2962547/known-issues-for-the-.net-framework-4.5.2) 10 | -------------------------------------------------------------------------------- /releases/net46/README.md: -------------------------------------------------------------------------------- 1 | # .NET Framework 4.6 Release Notes 2 | 3 | You can learn about the changes made in the .NET Framework 4.6. 4 | 5 | - [Download](http://go.microsoft.com/fwlink/?LinkId=528259) 6 | - [.NET Framework 4.6 announcement blog post](https://blogs.msdn.microsoft.com/dotnet/2015/07/20/announcing-net-framework-4-6/) 7 | - [What's new in the .NET Framework 4.6](https://docs.microsoft.com/dotnet/articles/framework/whats-new/index#v46) 8 | - [Release notes](dotnet46-changes.md) 9 | - [Application compatibility](../../Documentation/compatibility/README.md#net-framework-46) 10 | - [API changes](dotnet46-api-changes.md) 11 | - [Reference Source](https://github.com/Microsoft/referencesource/commit/ec178a5e7deb87a9cc7e0982ee32b7d965735b16) 12 | - [Known issues](https://support.microsoft.com/en-us/help/3047761/known-issues-for-the-.net-framework-4.6) 13 | 14 | # Release Notes by Product Area 15 | 16 | - [ASP.NET](dotnet46-changes.md#aspnet) 17 | - [BCL](dotnet46-changes.md#bcl) 18 | - [CLR](dotnet46-changes.md#clr) 19 | - [Entity Framework](dotnet46-changes.md#entity-framework) 20 | - [WCF](dotnet46-changes.md#wcf) 21 | - [Windows Forms](dotnet46-changes.md#windows-forms) 22 | - [Workflow](dotnet46-changes.md#workflow) 23 | - [WPF](dotnet46-changes.md#wpf) 24 | -------------------------------------------------------------------------------- /releases/net461/README.md: -------------------------------------------------------------------------------- 1 | # .NET Framework 4.6.1 Release Notes 2 | 3 | You can learn about the changes made in the .NET Framework 4.6.1. 4 | 5 | - [Download](http://go.microsoft.com/fwlink/?LinkId=671729) 6 | - [.NET Framework 4.6.1 announcement blog post](https://blogs.msdn.microsoft.com/dotnet/2015/11/30/net-framework-4-6-1-is-now-available/) 7 | - [What's new in the .NET Framework 4.6.1](https://docs.microsoft.com/dotnet/articles/framework/whats-new/index#v461) 8 | - [Release notes](dotnet461-changes.md) 9 | - [Application compatibility](../../Documentation/compatibility/README.md#net-framework-461) 10 | - [API changes](dotnet461-api-changes.md) 11 | - [Reference Source](https://github.com/Microsoft/referencesource/commit/e458f8df6ded689323d4bd1a2a725ad32668aaec) 12 | - [Known issues](https://support.microsoft.com/en-us/help/3102432/known-issues-for-the-.net-framework-4.6.1) 13 | 14 | # Release Notes by Product Area 15 | 16 | - [ASP.NET](dotnet461-changes.md#aspnet) 17 | - [BCL](dotnet461-changes.md#bcl) 18 | - [CLR](dotnet461-changes.md#clr) 19 | - [WCF](dotnet461-changes.md#wcf) 20 | - [Windows Forms](dotnet461-changes.md#windows-forms) 21 | - [Workflow](dotnet461-changes.md#workflow) 22 | - [WPF](dotnet461-changes.md#wpf) 23 | -------------------------------------------------------------------------------- /releases/net462/README.md: -------------------------------------------------------------------------------- 1 | # .NET Framework 4.6.2 Release Notes 2 | 3 | You can learn about the changes made in the .NET Framework 4.6.2. 4 | 5 | - [Download](http://go.microsoft.com/fwlink/?LinkId=780597) 6 | - [.NET Framework 4.6.2 announcement blog post](https://blogs.msdn.microsoft.com/dotnet/2016/08/02/announcing-net-framework-4-6-2/) 7 | - [What's new in the .NET Framework 4.6.2](https://docs.microsoft.com/dotnet/articles/framework/whats-new/index#v462) 8 | - [Release notes](dotnet462-changes.md) 9 | - [Application compatibility](../../Documentation/compatibility/README.md#net-framework-462) 10 | - [API changes](dotnet462-api-changes.md) 11 | - [Reference Source](https://github.com/Microsoft/referencesource/commit/1acafe20a789a55daa17aac6bb47d1b0ec04519f) 12 | - [Known issues](https://support.microsoft.com/en-us/help/3151796/known-issues-for-the-.net-framework-4.6.2) 13 | 14 | # Release Notes by Product Area 15 | 16 | - [Active Directory Services](dotnet462-changes.md#active-directory-services) 17 | - [ASP.NET](dotnet462-changes.md#aspnet) 18 | - [BCL](dotnet462-changes.md#bcl) 19 | - [ClickOnce](dotnet462-changes.md#clickonce) 20 | - [CLR](dotnet462-changes.md#clr) 21 | - [Networking](dotnet462-changes.md#networking) 22 | - [SQL](dotnet462-changes.md#sql) 23 | - [WCF](dotnet462-changes.md#wcf) 24 | - [Windows Forms](dotnet462-changes.md#windows-forms) 25 | - [Workflow](dotnet462-changes.md#workflow) 26 | - [WPF](dotnet462-changes.md#wpf) 27 | -------------------------------------------------------------------------------- /releases/net47/README.md: -------------------------------------------------------------------------------- 1 | # .NET Framework 4.7 Release Notes 2 | 3 | You can learn about the changes made in the .NET Framework 4.7. 4 | 5 | - [Download](http://go.microsoft.com/fwlink/?LinkId=825299) 6 | - [.NET Framework 4.7 announcement blog post](https://blogs.msdn.microsoft.com/dotnet/2017/05/02/announcing-the-net-framework-4-7-general-availability/) 7 | - [What's new in the .NET Framework 4.7](https://docs.microsoft.com/dotnet/articles/framework/whats-new/index#v47) 8 | - [Release notes](dotnet47-changes.md) 9 | - [Application compatibility](../../Documentation/compatibility/README.md#net-framework-47) 10 | - [API changes](dotnet47-api-changes.md) 11 | - [Reference Source](https://github.com/Microsoft/referencesource/commit/4251daa76e0aae7330139978648fc04f5c7b8ccb) 12 | - [Known issues](https://support.microsoft.com/en-us/help/4015088/known-issues-for-the-net-framework-4-7) 13 | 14 | # Release Notes by Product Area 15 | 16 | - [ASP.NET](dotnet47-changes.md#aspnet) 17 | - [BCL](dotnet47-changes.md#bcl) 18 | - [ClickOnce](dotnet47-changes.md#clickonce) 19 | - [CLR](dotnet47-changes.md#clr) 20 | - [Networking](dotnet47-changes.md#networking) 21 | - [SQL](dotnet47-changes.md#sql) 22 | - [WCF](dotnet47-changes.md#wcf) 23 | - [Windows Forms](dotnet47-changes.md#windows-forms) 24 | - [Workflow](dotnet47-changes.md#workflow) 25 | - [WPF](dotnet47-changes.md#wpf) 26 | -------------------------------------------------------------------------------- /releases/net471/KnownIssues/479874-WPF Touch Stops Working After Prolonged Use of Popups.md: -------------------------------------------------------------------------------- 1 | # WPF Touch Stops Working After Rapid/Prolonged Use Of Popups 2 | 3 | ## Symptoms 4 | On a touch or stylus-enabled machine, WPF applications may see a loss of touch or stylus after rapid or prolonged use of popups (e.g. ComboBoxes, DropDown Menus). 5 | 6 | ## Cause 7 | A change to disposal of HwndSource in .NET 4.7 caused Popups to not correctly cleanup touch resources. This eventually can lead to loss of touch/stylus interaction. 8 | 9 | ## Resolution 10 | This issue is fixed for all supported OS platforms prior to Windows 10 Fall Creators Update. The fix for Windows 10 Fall Creators Update is expected in a future servicing update. 11 | -------------------------------------------------------------------------------- /releases/net471/KnownIssues/481090-WPF Touch generates NullReferenceException in ProcessInputReport.md: -------------------------------------------------------------------------------- 1 | # WPF Touch generates a NullReferenceException in WispLogic.ProcessInputReport 2 | 3 | ## Symptoms 4 | WPF throws a NullReferenceException in WispLogic.ProcessInputReport and the application may crash. 5 | 6 | ## Cause 7 | In WPF applications running on touch or stylus enabled machines, specific hardware and timing issues can cause touch messages to arrive without associated StylusDevices. When this occurs WPF tries to access this null StylusDevice, causing the error. 8 | 9 | ## Resolution 10 | This issue is fixed for all supported OS platforms prior to Windows 10 Fall Creators Update. The fix for Windows 10 Fall Creators Update is expected in a future servicing update. 11 | -------------------------------------------------------------------------------- /releases/net471/KnownIssues/489937-WPF Touch and Stylus AccessViolation in GetPenEventMultiple.md: -------------------------------------------------------------------------------- 1 | # WPF Touch/Stylus Generates AccessViolations and Heap Corruption in GetPenEventMultiple 2 | 3 | ## Symptoms 4 | On a touch or stylus-enabled machine, WPF applications may sometimes corrupt memory and crash in the internal function GetPenEventMultiple in the PenIMC2_v0400 DLL. 5 | 6 | ## Cause 7 | This is due to the release of a COM object that is later used in the WPF touch stack. 8 | 9 | ## Resolution 10 | This issue is fixed for all supported OS platforms prior to Windows 10 Fall Creators Update. The fix for Windows 10 Fall Creators Update is expected in a future servicing update. 11 | -------------------------------------------------------------------------------- /releases/net471/README.md: -------------------------------------------------------------------------------- 1 | # .NET Framework 4.7.1 Release Notes 2 | 3 | You can learn about the changes made in the .NET Framework 4.7.1. 4 | 5 | - [Download](http://go.microsoft.com/fwlink/?LinkId=852095) 6 | - [.NET Framework 4.7.1 Announcement blog post](http://go.microsoft.com/fwlink/?LinkId=852091) 7 | - [Release notes](dotnet471-changes.md) 8 | - [Application compatibility](http://go.microsoft.com/fwlink/?LinkId=852106) 9 | - [API changes](dotnet471-api-changes.md) 10 | - [Reference Source](http://go.microsoft.com/fwlink/?LinkId=852103) 11 | - [Known issues](dotnet471-known-issues.md) 12 | 13 | ## Release Notes by Product Area 14 | 15 | - [ASP.NET](dotnet471-changes.md#aspnet) 16 | - [BCL](dotnet471-changes.md#bcl) 17 | - [CLR](dotnet471-changes.md#clr) 18 | - [Compiler and Managed Languages](dotnet471-changes.md#Compiler-and-Managed-Languages) 19 | - [Configuration](dotnet471-changes.md#Configuration) 20 | - [Networking](dotnet471-changes.md#networking) 21 | - [SQL](dotnet471-changes.md#sql) 22 | - [WCF](dotnet471-changes.md#wcf) 23 | - [Windows Forms](dotnet471-changes.md#windows-forms) 24 | - [Workflow](dotnet471-changes.md#workflow) 25 | - [WPF](dotnet471-changes.md#wpf) 26 | -------------------------------------------------------------------------------- /releases/net472/KnownIssues/405199 - WPF Non-Adorner TextSelection Occludes Text.md: -------------------------------------------------------------------------------- 1 | # WPF Non-Adorner Text Selection Occludes Text in FlowDocumentScrollViewer, FlowDocumentReader, and FlowDocumentPageViewer. 2 | 3 | ## Symptoms 4 | When the WPF Non-Adorner text selection feature is enabled on .NET Framework 4.7.2, selected text in `System.Windows.Controls.FlowDocumentScrollViewer`, `System.Windows.Controls.FlowDocumentReader`, 5 | and `System.Windows.Controls.FlowDocumentPageViewer` occludes the selected text. 6 | 7 | ## Cause 8 | The root cause of this issue is an incorrect default selection opacity value being applied for `System.Windows.Controls.FlowDocumentScrollViewer`, `System.Windows.Controls.FlowDocumentReader`, 9 | and `System.Windows.Controls.FlowDocumentPageViewer`. 10 | 11 | ## Resolution 12 | This issue will be fixed in the next version of the .NET Framework. 13 | 14 | To work around this problem, developers can explicitly set the selection opacity to the correct value of .4. Once this is done, the selected text is again visible underneath the text selection. 15 | 16 | ```xml 17 | 18 | ``` -------------------------------------------------------------------------------- /releases/net472/KnownIssues/504055 - WPF May Not Show Touch Keyboard In All Scenarios on Windows 10 April 2018 Update.md: -------------------------------------------------------------------------------- 1 | # WPF May Not Show Touch Keyboard In All Scenarios on Windows 10 April 2018 Update 2 | 3 | ## Symptoms 4 | In the .NET Framework 4.7.2 running on Windows 10 April 2018 Update, WPF applications may not immediately show the touch keyboard in some specific scenarios. Generally, these involve variations of the following. 5 | 6 | 1. Tap a text box and note the touch keyboard shows. 7 | 2. Tap another text box. 8 | 3. Tap the 'X' on the touch keyboard to close it. 9 | 4. Tap the text box from step 1 and note the touch keyboard does not show. 10 | 11 | ## Cause 12 | A WPF change in .NET Framework 4.7.2 is preventing WPF from requesting the touch keyboard show. Due to this, the touch keyboard tracking algorithm in Windows 10 April 2018 Update does not show the 13 | keyboard in all scenarios. 14 | 15 | ## Resolution 16 | A fix for this issue is available in [KB4103721](https://support.microsoft.com/en-us/help/4103721/windows-10-update-kb4103721). 17 | -------------------------------------------------------------------------------- /releases/net472/KnownIssues/599936 - Narrator does not annouce the ReadOnly Status for DataGridView TextBox column with the TextBox column Readonly property set as true.md: -------------------------------------------------------------------------------- 1 | # Narrator does not announce the ReadOnly Status for DataGridView TextBox column with the TextBox column Readonly property set as true 2 | 3 | ## Symptoms 4 | Narrator does not announce the value of the ReadOnly property of the System.Windows.Forms.DataGridViewTextBoxColumn. This is the case regardless of the value of the ReadOnly property. This could cause confusion for Narrator users when editing content in a DataGridViewTextBoxColumn. 5 | ## Cause 6 | The issue is caused by changes in .NET Framework 4.7.2 that improved the accessibility support of the DataGridView. That change left Narrator unable to narrate the ReadOnly status of the TextBoxColumn regardless of the setting. 7 | 8 | ## Workaround 9 | There is no workaround for this issue. 10 | 11 | ## Resolution 12 | A proper fix of the DataGridView AccessibleObject will ship in coming versions of .NET Framework. This known issue will be updated with more details when that happens. 13 | 14 | 15 | -------------------------------------------------------------------------------- /releases/net472/KnownIssues/611802 - SQLConnection.ConnectionString throws NullReferenceException .md: -------------------------------------------------------------------------------- 1 | # NullReferenceException while setting `SqlConnection.ConnectionString` to an empty string or null. 2 | ## Symptoms 3 | 4 | When an application tries to set the `ConnectionString` property of the `SqlConnection` object to an empty string or null value, a `NullReferenceException` is thrown. This exception occurs when .NET Framework 4.7.2 is installed on the OS hosting the application. 5 | 6 | 7 | ## Cause 8 | 9 | .NET Framework 4.7.2 includes a change that increases the default connection retry count for connections to Azure SQL Database to two. 10 | This change sets the internal value of the retry count without validating if the `ConnectionString` is a non-null or non-empty value, 11 | which results in the `NullReferenceException`. 12 | 13 | ## Impact 14 | 15 | The impact is limited to applications using the `SqlConnection.ConnectionString` API to set an empty connection string, which now throws an exception. 16 | 17 | ## Workarounds 18 | 19 | No known workarounds with .NET Framework 4.7.2. 20 | 21 | ## Resolution 22 | 23 | This issue has been fixed in the [latest update to .NET Framework 4.7.2](https://go.microsoft.com/fwlink/?LinkId=2005309) for all platforms except Windows 10 April 2018 Update. 24 | 25 | For Windows 10 April 2018 Update, the fix will be available in the upcoming Cumulative Update. 26 | -------------------------------------------------------------------------------- /releases/net472/KnownIssues/706819 - Winforms applications may have problems rendering UI on latest Operating Systems.md: -------------------------------------------------------------------------------- 1 | # WinForms applications may have problems rendering the application UI and instead may render a white screen with a red ‘X’ symbol. The issue is caused by a change in Windows 10 October 2018 Update that exposed a bug in .NET Framework 4.7.2. 2 | 3 | ## Symptoms 4 | WinForms applications may have problems rendering the application UI and instead may render a white screen with a red ‘X’ symbol. The issue is caused by a change in Windows 10 October 2018 Update that exposed a bug in .NET Framework 4.7.2. 5 | 6 | ## Cause 7 | The issue is caused by a change in Windows 10 October 2018 Update that exposed a bug in .NET Framework 4.7.2. The Windows 10 October 2018 Update adds a new flag to VisualStyle state when the application UI launches a child dialog (i.e., a FileSaveDialog or PrintpreviewDialog) that causes .NET Framework to fail its VisualStyleState check and thus throw an exception while rendering the application UI. 8 | 9 | ## Resolution 10 | A .NET 4.7.2 servicing fix [KB4481031](https://support.microsoft.com/en-us/help/4481031/january-22-2019-kb4481031) for this issue has been released and is also included in the version (4.8) of .NET Framework. 11 | -------------------------------------------------------------------------------- /releases/net472/README.md: -------------------------------------------------------------------------------- 1 | # .NET Framework 4.7.2 Release Notes 2 | 3 | You can learn about the changes made in the .NET Framework 4.7.2. 4 | 5 | - [Download](http://go.microsoft.com/fwlink/?LinkId=863262) 6 | - [.NET Framework 4.7.2 RTM Announcement blog post](https://go.microsoft.com/fwlink/?linkid=863281) 7 | - [.NET Framework 4.7.2 Windows Update release blog post](https://go.microsoft.com/fwlink/?LinkId=2005309) 8 | - [Release notes](dotnet472-changes.md) 9 | - [Application compatibility](https://go.microsoft.com/fwlink/?linkid=863254) 10 | - [API changes](dotnet472-api-changes.md) 11 | - [Known issues](dotnet472-known-issues.md) 12 | 13 | ## Release Notes by Product Area 14 | 15 | - [ASP.NET](dotnet472-changes.md#aspnet) 16 | - [BCL](dotnet472-changes.md#bcl) 17 | - [CLR](dotnet472-changes.md#clr) 18 | - [ClickOnce](dotnet472-changes.md#clickonce) 19 | - [Networking](dotnet472-changes.md#networking) 20 | - [SQL](dotnet472-changes.md#sql) 21 | - [WCF](dotnet472-changes.md#wcf) 22 | - [Windows Forms](dotnet472-changes.md#windows-forms) 23 | - [Workflow](dotnet472-changes.md#workflow) 24 | - [WPF](dotnet472-changes.md#wpf) 25 | -------------------------------------------------------------------------------- /releases/net48/KnownIssues/wpf-pma-window-drag.md: -------------------------------------------------------------------------------- 1 | # Per-Monitor DPI-aware WPF applications position mouse cursor incorrectly when dragging between monitors 2 | 3 | ## Symptoms 4 | A user running a WPF application that enables the Per-Monitor DPI awareness feature introduced in .NET Framework 4.7.2 may notice that the mouse cursor is in a different location relative to the window after dragging the window from one monitor to another. 5 | 6 | ## Cause 7 | This issue is caused by a calculation error when resizing and placing the window after switching DPI. 8 | 9 | ## Resolution 10 | This issue is being tracked at https://github.com/dotnet/wpf/issues/967. 11 | -------------------------------------------------------------------------------- /releases/net48/README.md: -------------------------------------------------------------------------------- 1 | # .NET Framework 4.8 Release Notes 2 | 3 | You can learn about the changes made in the .NET Framework 4.8. 4 | 5 | - [Download](http://go.microsoft.com/fwlink/?LinkId=2085155) 6 | - [.NET Framework 4.8 RTM Announcement blog post](https://go.microsoft.com/fwlink/?linkid=2054306) 7 | - [.NET Framework 4.8 Windows Update Release Blog Post](https://go.microsoft.com/fwlink/?linkid=2100817) 8 | - [Release notes](dotnet48-changes.md) 9 | - [Application compatibility](https://go.microsoft.com/fwlink/?linkid=2053971) 10 | - [API changes](dotnet48-api-changes.md) 11 | - [Known issues](dotnet48-known-issues.md) 12 | 13 | ## Release Notes by Product Area 14 | 15 | - [ASP.NET](dotnet48-changes.md#aspnet) 16 | - [BCL](dotnet48-changes.md#bcl) 17 | - [ClickOnce](dotnet48-changes.md#clickonce) 18 | - [CLR](dotnet48-changes.md#clr) 19 | - [Networking](dotnet48-changes.md#networking) 20 | - [SQL](dotnet48-changes.md#sql) 21 | - [WCF](dotnet48-changes.md#wcf) 22 | - [Windows Forms](dotnet48-changes.md#windows-forms) 23 | - [WPF](dotnet48-changes.md#wpf) 24 | - [Workflow](dotnet48-changes.md#workflow) 25 | 26 | NOTE: .NET Framework 4.8 will be available on Windows Update, Windows Server Update Services (WSUS), and Microsoft Update Catalog soon. However, if you have a business requirement to temporarily block the automatic installation through Windows Update in your managed environment, you can refer to [KB4516563](https://support.microsoft.com/en-us/help/4516563) for guidance. 27 | 28 | -------------------------------------------------------------------------------- /releases/net48/dotnet48-known-issues.md: -------------------------------------------------------------------------------- 1 | .NET Framework 4.8 Known Issues 2 | ================================= 3 | 4 | This document lists the known issues that you may experience after you install the Microsoft .NET Framework 4.8 5 | 6 | ## Product issues for the .NET Framework 4.8 7 | - [776516 - ASP.NET - InvalidOperationException in ASP.Net-RecycleLimitMonitor-AlertProxyMonitors](https://github.com/Microsoft/dotnet/blob/master/releases/net48/KnownIssues/776516-InvalidOperationException%20in%20System_Web_ni!System.Web.Hosting.RecycleLimitMonitor%2BRecycleLimitMonitorSingleton.AlertProxyMonitors.md) 8 | 9 | - [780675 - WPF - Per-Monitor DPI-aware WPF applications position mouse cursor incorrectly when dragging between monitors](https://github.com/Microsoft/dotnet/blob/master/releases/net48/KnownIssues/wpf-pma-window-drag.md) 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /releases/net481/KnownIssues/4.x WCF optional components.md: -------------------------------------------------------------------------------- 1 | # 4.x WCF optional components 2 | 3 | ## Symptoms 4 | The .NET Framework 4.x WCF optional components on Windows 11 ARM64 client machines will fail to be enabled either through the dism command or add/remove program UI. 5 | 6 | ## Workaround 7 | No workaround available 8 | 9 | ## Resolution 10 | A resolution to this issue will be included in an upcoming release 11 | 12 | **Note**: Message Queuing (MSMQ) Activation will remain disabled because MSMQ is not available on Windows 11 for ARM64 client machines 13 | -------------------------------------------------------------------------------- /releases/net481/README.md: -------------------------------------------------------------------------------- 1 | # .NET Framework 4.8.1 Release Notes 2 | 3 | You can learn about the changes made in the .NET Framework 4.8.1. 4 | 5 | - [Download](https://go.microsoft.com/fwlink/?LinkId=2203304) 6 | - [.NET Framework 4.8.1 RTM announcement blog post](https://devblogs.microsoft.com/dotnet/announcing-dotnet-framework-481) 7 | - [.NET Framework 4.8.1 RTM availability on Windows Update and Catalog announcement blog post](https://devblogs.microsoft.com/dotnet/upcoming-availability-of-net-framework-4-8-1-on-windows-update-and-catalog/) 8 | - [Release notes](dotnet481-changes.md) 9 | - [Application compatibility](https://github.com/Microsoft/dotnet/blob/master/Documentation/compatibility/README.md#net-framework-481) 10 | - [Known issues](dotnet481-known-issues.md) 11 | 12 | ## Release Notes by Product Area 13 | 14 | - [Native support for Arm64](dotnet481-changes.md#native-support-for-Arm64) 15 | - [Accessible tooltips](dotnet481-changes.md#accessible-tooltips) 16 | - [Windows Forms – accessibility improvements](dotnet481-changes.md#windows-forms) 17 | 18 | -------------------------------------------------------------------------------- /releases/net481/dotnet481-known-issues.md: -------------------------------------------------------------------------------- 1 | .NET Framework 4.8.1 Known Issues 2 | ================================= 3 | 4 | This document lists the known issues that you may experience after you install the Microsoft .NET Framework 4.8.1 5 | 6 | ## Product issues for the .NET Framework 4.8.1 7 | - [ASP.NET - 4.x WCF optional components](https://github.com/microsoft/dotnet/blob/master/releases/net481/KnownIssues/4.x%20WCF%20optional%20components.md) 8 | -------------------------------------------------------------------------------- /src/bc-readme-gen/README-template.md: -------------------------------------------------------------------------------- 1 | # .NET Framework Application Compatibility 2 | 3 | The following documents provide information on .NET Framework application compatibility. They describe breaking changes and other changes in behavior in each .NET Framework release. 4 | 5 | Please help us improve the [.NET Framework Application Compatibility documents](https://github.com/Microsoft/dotnet/tree/master/Documentation/compatibility). In particular, better titles will improve the index below, both in content and the sort. 6 | -------------------------------------------------------------------------------- /src/bc-readme-gen/README.md: -------------------------------------------------------------------------------- 1 | # Breaking Change README Generator 2 | 3 | This tool generates the [.NET Framework Breaking Change README](https://github.com/Microsoft/dotnet/blob/master/Documentation/compatibility/README.md). It should be run when the [breaking change documents](https://github.com/Microsoft/dotnet/blob/master/Documentation/compatibility) are updated to ensure that the README is still correct. 4 | 5 | The tool uses a [README template](README-template.md) for the boiler plate part of the README. 6 | -------------------------------------------------------------------------------- /src/bc-readme-gen/bcreadgen.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | netcoreapp1.1 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /tools/DrainNGENQueue/DrainNGenQueue.ps1: -------------------------------------------------------------------------------- 1 | # Script to force the .NET Framework optimization service to run at maximum speed. 2 | 3 | $isWin8Plus = [Environment]::OSVersion.Version -ge (new-object 'Version' 6,2) 4 | $dotnetDir = [environment]::GetEnvironmentVariable("windir","Machine") + "\Microsoft.NET\Framework" 5 | $dotnet2 = "v2.0.50727" 6 | $dotnet4 = "v4.0.30319" 7 | 8 | $dotnetVersion = if (Test-Path ($dotnetDir + "\" + $dotnet4 + "\ngen.exe")) {$dotnet4} else {$dotnet2} 9 | 10 | $ngen32 = $dotnetDir + "\" + $dotnetVersion +"\ngen.exe" 11 | $ngen64 = $dotnetDir + "64\" + $dotnetVersion +"\ngen.exe" 12 | $ngenArgs = " executeQueuedItems" 13 | $is64Bit = Test-Path $ngen64 14 | 15 | 16 | #32-bit NGEN -- appropriate for 32-bit and 64-bit machines 17 | Write-Host("Requesting 32-bit NGEN") 18 | Start-Process -wait $ngen32 -ArgumentList $ngenArgs 19 | 20 | #64-bit NGEN -- appropriate for 64-bit machines 21 | 22 | if ($is64Bit) { 23 | Write-Host("Requesting 64-bit NGEN") 24 | Start-Process -wait $ngen64 -ArgumentList $ngenArgs 25 | } 26 | 27 | #AutoNGEN for Windows 8+ machines 28 | 29 | if ($isWin8Plus) { 30 | Write-Host("Requesting 32-bit AutoNGEN -- Windows 8+") 31 | schTasks /run /Tn "\Microsoft\Windows\.NET Framework\.NET Framework NGEN v4.0.30319" 32 | } 33 | 34 | #64-bit AutoNGEN for Windows 8+ machines 35 | 36 | if ($isWin8Plus -and $is64Bit) { 37 | Write-Host("Requesting 64-bit AutoNGEN -- Windows 8+") 38 | schTasks /run /Tn "\Microsoft\Windows\.NET Framework\.NET Framework NGEN v4.0.30319 64" 39 | } 40 | --------------------------------------------------------------------------------