diff --git a/xml/System/Char.xml b/xml/System/Char.xml index 663b53c834c..83b14976d58 100644 --- a/xml/System/Char.xml +++ b/xml/System/Char.xml @@ -245,7 +245,7 @@ The structure represents Unicode code points by using UTF-16 If you aren't familiar with Unicode, scalar values, code points, surrogate pairs, UTF-16, and the type, see [Introduction to character encoding in .NET](/dotnet/standard/base-types/character-encoding-introduction). -This article examines the relationship between a object and a character and discuss some common tasks performed with instances. We recommend that you consider the type, introduced in .NET Core 3.0, as an alternative to for performing some of these tasks. +This article examines the relationship between a object and a character and discusses some common tasks performed with instances. We recommend that you consider the type as an alternative to for performing some of these tasks. ## Char objects, Unicode characters, and strings diff --git a/xml/System/Environment.xml b/xml/System/Environment.xml index 9a5ddfd8fbd..85f1e262eab 100644 --- a/xml/System/Environment.xml +++ b/xml/System/Environment.xml @@ -775,7 +775,7 @@ Calling the `Environment.FailFast` method to terminate execution of an applicati ## Remarks The first element in the array contains the file name of the executing program. If the file name is not available, the first element is equal to . The remaining elements contain any additional tokens entered on the command line. -In .NET 5 and later versions, for single-file publishing, the first element is the name of the host executable. +For single-file publishing, the first element is the name of the host executable. The program file name can, but is not required to, include path information. @@ -1819,7 +1819,7 @@ By using this property, you can determine whether to access static variables in returns an OS version that may be incorrect when an application runs under Windows compatibility mode. For more information, see [GetVersionExA function remarks](/windows/win32/api/sysinfoapi/nf-sysinfoapi-getversionexa#remarks). -In .NET 5 and later versions, returns the actual OS version in compatibility modes specified by the [application manifest](/windows/win32/sysinfo/targeting-your-application-at-windows-8-1). For more information, see [Environment.OSVersion returns the correct operating system version](/dotnet/core/compatibility/core-libraries/5.0/environment-osversion-returns-correct-version). + returns the actual OS version in compatibility modes specified by the [application manifest](/windows/win32/sysinfo/targeting-your-application-at-windows-8-1). For more information, see [Environment.OSVersion returns the correct operating system version](/dotnet/core/compatibility/core-libraries/5.0/environment-osversion-returns-correct-version). To identify the operating system platform, for example, Linux or Windows, you can use the method. @@ -1913,7 +1913,7 @@ To identify the operating system platform, for example, Linux or Windows, you ca Specifies whether the allocated array must be pinned. Allocates an array. An array object. - - - + To be added. @@ -285,8 +277,6 @@ In .NET 7 and earlier versions: If pinned is set to `true`, `T` must not be a re ## Remarks -In .NET 7 and earlier versions: If pinned is set to `true`, `T` must not be a reference type or a type that contains object references. - Skipping zero-initialization is a security risk. The uninitialized array can contain invalid valuetype instances or sensitive information created by other parts of the application. The code operating on uninitialized arrays should be heavily scrutinized to ensure that the uninitialized data is never read. diff --git a/xml/System/Guid.xml b/xml/System/Guid.xml index c3c90535332..b2897420e40 100644 --- a/xml/System/Guid.xml +++ b/xml/System/Guid.xml @@ -1119,7 +1119,7 @@ On Windows, this function wraps a call to the [CoCreateGuid](/windows/win32/api/combaseapi/nf-combaseapi-cocreateguid) function. The generated GUID contains 122 bits of strong entropy. - On non-Windows platforms, starting with .NET 6, this function calls the OS's underlying cryptographically secure pseudo-random number generator (CSPRNG) to generate 122 bits of strong entropy. In previous versions of .NET, the entropy is not guaranteed to be generated by a CSPRNG. + On non-Windows platforms, this function calls the OS's underlying cryptographically secure pseudo-random number generator (CSPRNG) to generate 122 bits of strong entropy. It is recommended that applications __not__ use the _NewGuid_ method for cryptographic purposes. First, since a Version 4 UUID has a partially predictable bit pattern, the _NewGuid_ function cannot serve as a proper cryptographic pseudo-random function (PRF). If the output of _NewGuid_ is given to a cryptographic component that requires its input to be generated by a proper PRF, the cryptographic component may not be able to maintain its security properties. Second, _NewGuid_ utilizes at most 122 bits of entropy, regardless of platform. Some cryptographic components set a minimum entropy level on their inputs as a matter of policy. Such policies often set the minimum entropy level at 128 bits or higher. Passing the output of _NewGuid_ to such a routine may violate its policy. diff --git a/xml/System/IAsyncDisposable.xml b/xml/System/IAsyncDisposable.xml index 63d5c3e59f9..f750799eaa5 100644 --- a/xml/System/IAsyncDisposable.xml +++ b/xml/System/IAsyncDisposable.xml @@ -62,7 +62,7 @@ If your application uses an object that implements `IAsyncDisposable`, you shoul You might implement `IAsyncDisposable` in the following situations: -- When developing an asynchronous enumerator that owns unmanaged resources. Asynchronous enumerators are used with the C# 8.0 async streams feature. For more information about async streams, see [Tutorial: Generate and consume async streams using C# 8.0 and .NET Core 3.0](/dotnet/csharp/tutorials/generate-consume-asynchronous-stream). +- When developing an asynchronous enumerator that owns unmanaged resources. Asynchronous enumerators are used with the C# 8.0 async streams feature. For more information about async streams, see [Tutorial: Generate and consume async streams](/dotnet/csharp/tutorials/generate-consume-asynchronous-stream). - When your class owns unmanaged resources and releasing them requires a resource-intensive I/O operation, such as flushing the contents of an intermediate buffer into a file or sending a packet over a network to close a connection. Use the method to perform whatever cleanup is necessary after using the unmanaged resources, such as freeing, releasing, or resetting the unmanaged resources. For more information, see [Implement a DisposeAsync method](/dotnet/standard/garbage-collection/implementing-disposeasync). diff --git a/xml/System/IntPtr.xml b/xml/System/IntPtr.xml index bf8aa908bd5..fadd7147f16 100644 --- a/xml/System/IntPtr.xml +++ b/xml/System/IntPtr.xml @@ -262,11 +262,11 @@ > [!NOTE] > Using as a pointer or a handle is error prone and unsafe. It is simply an integer type that can be used as an interchange format for pointers and handles due to being the same size. Outside of specific interchange requirements, such as for passing data to a language that doesn't support pointers, a correctly typed pointer should be used to represent pointers and should be used to represent handles. - This type implements the and interfaces. In .NET 7 and later versions, this type also implements the , , and interfaces. + This type implements the , , , , and interfaces. In C# starting from version 9.0, you can use the built-in `nint` type to define native-sized integers. This type is represented by the type internally and provides operations and conversions that are appropriate for integer types. For more information, see [nint and nuint types](/dotnet/csharp/language-reference/builtin-types/integral-numeric-types). - In C# starting from version 11 and when targeting the .NET 7 or later runtime, `nint` is an alias for in the same way that `int` is an alias for . + In C# starting from version 11, `nint` is an alias for in the same way that `int` is an alias for . ## Examples @@ -1740,7 +1740,7 @@ For this method matches the IEEE The addition operation does not throw an exception if the result is too large to represent as a signed integer in the executing process. Instead, it is performed in an unchecked context. - In C# starting from version 11 and when targeting the .NET 7 or later runtime, this API is only accessible via reflection. The addition operator is directly recognized by the language and will follow the normal language behavior for addition operations, including overflowing in a `checked` context if the result is too large to represent. + In C# starting from version 11, this API is only accessible via reflection. The addition operator is directly recognized by the language and will follow the normal language behavior for addition operations, including overflowing in a `checked` context if the result is too large to represent. The equivalent method for this operator is ]]> @@ -2236,7 +2236,7 @@ For this method matches the IEEE The subtraction operation does not throw an exception if the result is too small to represent as a signed integer in the executing process. Instead, it is performed in an unchecked context. - In C# starting from version 11 and when targeting the .NET 7 or later runtime, this API is only accessible via reflection. The subtraction operator is directly recognized by the language and will follow the normal language behavior for subtraction operations, including overflowing in a `checked` context if the result is too small to represent. + In C# starting from version 11, this API is only accessible via reflection. The subtraction operator is directly recognized by the language and will follow the normal language behavior for subtraction operations, including overflowing in a `checked` context if the result is too small to represent. The equivalent method for this operator is ]]> diff --git a/xml/System/MarshalByRefObject.xml b/xml/System/MarshalByRefObject.xml index afc23c057d4..d22c72ece83 100644 --- a/xml/System/MarshalByRefObject.xml +++ b/xml/System/MarshalByRefObject.xml @@ -158,7 +158,7 @@ ## Remarks -This method is marked obsolete starting in .NET 5. +This method is obsolete. ]]> @@ -216,7 +216,7 @@ This method is marked obsolete starting in .NET 5. ## Remarks -This method is marked obsolete starting in .NET 5. +This method is obsolete. ]]> diff --git a/xml/System/String.xml b/xml/System/String.xml index 3106c6e8e14..486da280f74 100644 --- a/xml/System/String.xml +++ b/xml/System/String.xml @@ -167,14 +167,6 @@ Each character in a string has an associated Unicode character category, which i .NET maintains its own table of characters and their corresponding categories, which ensures that a specific version of a .NET implementation running on different platforms returns identical character category information. On all .NET versions and across all OS platforms, character category information is provided by the [Unicode Character Database](https://www.unicode.org/ucd/). -The following table lists .NET versions and the versions of the Unicode Standard on which their character categories are based. - -| .NET version | Version of the Unicode Standard | -|---------------|-----------------------------------------------------------------------------------------| -| .NET Core 2.1 | [The Unicode Standard, Version 8.0.0](https://www.unicode.org/versions/Unicode8.0.0/) | -| .NET Core 3.1 | [The Unicode Standard, Version 11.0.0](https://www.unicode.org/versions/Unicode11.0.0/) | -| .NET 5 | [The Unicode Standard, Version 13.0.0](https://www.unicode.org/versions/Unicode13.0.0/) | - In addition, .NET supports string comparison and sorting based on the Unicode standard. String comparison and sorting information is provided by [International Components for Unicode](https://icu.unicode.org/) libraries (except on Windows versions prior to Windows 10 May 2019 Update). ## Embedded null characters @@ -5572,7 +5564,7 @@ If you are new to the `String.Format` method, see method or by calling to deserialize a object that represents the required time zone. However, time zones created by these method calls are not system-defined time and cannot be retrieved using the method. These custom time zones can be accessed only through the object reference returned by the or method call. -In .NET 7 and earlier versions, this method returns a new instance for each method call. This might impact performance in applications that call the `FindSystemTimeZoneById` method repeatedly with the same identifier. (In .NET 8 and later versions, this method always returns a cached instance.) +This method always returns a cached instance. ## Examples @@ -3474,7 +3474,7 @@ The time zone identifier is a key string that uniquely identifies a particular t ## Remarks -This API is exclusively supported on .NET 6 and later versions, and only when the application utilizes the ICU library. +This API is supported only when the application utilizes the ICU library. However, in .NET, the ICU library is not always used by default, particularly in the following scenarios: - When the application runs on an operating system that does not have the ICU library, and the app does not utilize the [app-local ICU](/dotnet/core/extensions/globalization-icu#app-local-icu) feature. @@ -3540,7 +3540,7 @@ If the application is running on a Windows OS version that lacks the ICU library ## Remarks -This API is exclusively supported on .NET 6.0 and later versions. It is also supported when the application utilizes the ICU library, otherwise the API will fail. +This API is supported only when the application utilizes the ICU library; otherwise, the API fails. However, in .NET, the ICU library is not always used by default, particularly in the following scenarios: - When the application runs on an operating system that does not have the ICU library, and the app does not utilize the [APP-Local ICU](/dotnet/core/extensions/globalization-icu#app-local-icu) feature. @@ -3606,7 +3606,7 @@ If the application is running on a Windows OS version that lacks the ICU library ## Remarks -This API is exclusively supported on .NET 6.0 and later versions. It is also supported when the application utilizes the ICU library, otherwise the API will fail. +This API is supported only when the application utilizes the ICU library; otherwise, the API fails. However, in .NET, the ICU library is not always used by default, particularly in the following scenarios: - When the application runs on an operating system that does not have the ICU library, and the app does not utilize the [App-local ICU](/dotnet/core/extensions/globalization-icu#app-local-icu) feature. diff --git a/xml/System/Type.xml b/xml/System/Type.xml index f746887b89e..65cbde8f8c4 100644 --- a/xml/System/Type.xml +++ b/xml/System/Type.xml @@ -2622,7 +2622,7 @@ False method does not return constructors in a particular order, such as declaration order. Your code must not depend on the order in which constructors are returned, because that order varies. However, starting with .NET 7, the ordering is deterministic based upon the metadata ordering in the assembly. + The method returns constructors in a deterministic order based upon the metadata ordering in the assembly. The following table shows what members of a base class are returned by the `Get` methods when reflecting on a type. @@ -2721,7 +2721,7 @@ The following filter flags can be used to See for more information. -In .NET 6 and earlier versions, the method does not return constructors in a particular order, such as declaration order. Your code must not depend on the order in which constructors are returned, because that order varies. However, starting with .NET 7, the ordering is deterministic based upon the metadata ordering in the assembly. +The method returns constructors in a deterministic order based upon the metadata ordering in the assembly. If the current represents a constructed generic type, this method returns the objects with the type parameters replaced by the appropriate type arguments. For example, if class `C` has a constructor `C(T t1)` (`Sub New(ByVal t1 As T)` in Visual Basic), calling on `C` returns a that represents `C(int t1)` in C# (`Sub New(ByVal t1 As Integer)` in Visual Basic). @@ -3421,7 +3421,7 @@ If the current represents a generic type parameter, the | | (in Visual Basic, combine the values using ` Or `) to get it. - In .NET 6 and earlier versions, the method does not return events in a particular order, such as alphabetical or declaration order. Your code must not depend on the order in which events are returned, because that order varies. However, starting with .NET 7, the ordering is deterministic based upon the metadata ordering in the assembly. + The method returns events in a deterministic order based upon the metadata ordering in the assembly. This method can be overridden by a derived class. @@ -3524,7 +3524,7 @@ If the current represents a generic type parameter, the method does not return events in a particular order, such as alphabetical or declaration order. Your code must not depend on the order in which events are returned, because that order varies. However, starting with .NET 7, the ordering is deterministic based upon the metadata ordering in the assembly. + The method returns events in a deterministic order based upon the metadata ordering in the assembly. The following filter flags can be used to define which events to include in the search: @@ -3845,7 +3845,7 @@ If the current represents a generic type parameter, the method does not return fields in a particular order, such as alphabetical or declaration order. Your code must not depend on the order in which fields are returned, because that order varies. However, starting with .NET 7, the ordering is deterministic based upon the metadata ordering in the assembly. + The method returns fields in a deterministic order based upon the metadata ordering in the assembly. The following table shows what members of a base class are returned by the `Get` methods when reflecting on a type. @@ -3970,7 +3970,7 @@ The following modifier flags can be used t See for more information. -In .NET 6 and earlier versions, the method does not return fields in a particular order, such as alphabetical or declaration order. Your code must not depend on the order in which fields are returned, because that order varies. However, starting with .NET 7, the ordering is deterministic based upon the metadata ordering in the assembly. +The method returns fields in a deterministic order based upon the metadata ordering in the assembly. If the current represents a constructed generic type, this method returns the objects with the type parameters replaced by the appropriate type arguments. @@ -4713,7 +4713,7 @@ The current instance or argument is an open ge method does not return interfaces in a particular order, such as alphabetical or declaration order. Your code must not depend on the order in which interfaces are returned, because that order varies. However, starting with .NET 7, the ordering is deterministic based upon the metadata ordering in the assembly. + The method returns interfaces in a deterministic order based upon the metadata ordering in the assembly. If the current represents a constructed generic type, this method returns the objects with the type parameters replaced by the appropriate type arguments. @@ -4799,7 +4799,7 @@ The current instance or argument is an open ge Members include properties, methods, fields, events, and so on. - In .NET 6 and earlier versions, the method does not return members in a particular order, such as alphabetical or declaration order. Your code must not depend on the order in which members are returned, because that order varies. However, starting with .NET 7, the ordering is deterministic based upon the metadata ordering in the assembly. + The method returns members in a deterministic order based upon the metadata ordering in the assembly. This method overload will not find class initializers (static constructor). To find class initializers, use an overload that takes , and specify | (` Or ` in Visual Basic). You can also get the class initializer using the property. @@ -4918,7 +4918,7 @@ The current instance or argument is an open ge Members include properties, methods, fields, events, and so on. - In .NET 6 and earlier versions, the method does not return members in a particular order, such as alphabetical or declaration order. Your code must not depend on the order in which members are returned, because that order varies. However, starting with .NET 7, the ordering is deterministic based upon the metadata ordering in the assembly. + The method returns members in a deterministic order based upon the metadata ordering in the assembly. The following filter flags can be used to define which members to include in the search: @@ -5036,7 +5036,7 @@ The current instance or argument is an open ge ## Remarks Members include properties, methods, fields, events, and so on. - In .NET 6 and earlier versions, the method does not return members in a particular order, such as alphabetical or declaration order. Your code must not depend on the order in which members are returned, because that order varies. However, starting with .NET 7, the ordering is deterministic based upon the metadata ordering in the assembly. + The method returns members in a deterministic order based upon the metadata ordering in the assembly. The following filter flags can be used to define which members to include in the search: @@ -5154,7 +5154,7 @@ The current instance or argument is an open ge Members include properties, methods, constructors, fields, events, and nested types. - In .NET 6 and earlier versions, the method does not return members in a particular order, such as alphabetical or declaration order. Your code must not depend on the order in which members are returned, because that order varies. However, starting with .NET 7, the ordering is deterministic based upon the metadata ordering in the assembly. + The method returns members in a deterministic order based upon the metadata ordering in the assembly. This method overload calls the method overload, with | | (` Or `` Or ` in Visual Basic). It will not find class initializers (static constructors). To find class initializers, call the overload, and specify | (` Or ` in Visual Basic). You can also get the class initializer using the property. @@ -5287,7 +5287,7 @@ The following modifier flags can be used t See for more information. -In .NET 6 and earlier versions, the method does not return members in a particular order, such as alphabetical or declaration order. Your code must not depend on the order in which members are returned, because that order varies. However, starting with .NET 7, the ordering is deterministic based upon the metadata ordering in the assembly. +The method returns members in a deterministic order based upon the metadata ordering in the assembly. To get the class initializer (static constructor) using this method overload, you must specify | (` Or ` in Visual Basic). You can also get the class initializer using the property. @@ -6917,7 +6917,7 @@ An empty array of the type (that is, Type[] types = ## Remarks -In .NET 6 and earlier versions, the method does not return methods in a particular order, such as alphabetical or declaration order. Your code must not depend on the order in which methods are returned, because that order varies. However, starting with .NET 7, the ordering is deterministic based upon the metadata ordering in the assembly. +The method returns methods in a deterministic order based upon the metadata ordering in the assembly. Constructors are not included in the array of methods returned by this call. Make a separate call to `GetConstructors()` to get the constructor methods. @@ -7038,7 +7038,7 @@ For the `GetMethods(BindingFlags)` overload to successfully retrieve method info See for more information. -In .NET 6 and earlier versions, the method does not return methods in a particular order, such as alphabetical or declaration order. Your code must not depend on the order in which methods are returned, because that order varies. However, starting with .NET 7, the ordering is deterministic based upon the metadata ordering in the assembly. +The method returns methods in a deterministic order based upon the metadata ordering in the assembly. If the current represents a constructed generic type, this method returns the objects with the type parameters replaced by the appropriate type arguments. @@ -7320,7 +7320,7 @@ If the current represents a type parameter in the definition method does not return types in a particular order, such as alphabetical or declaration order. Your code must not depend on the order in which types are returned, because that order varies. However, starting with .NET 7, the ordering is deterministic based upon the metadata ordering in the assembly. + The method returns types in a deterministic order based upon the metadata ordering in the assembly. Only the public types immediately nested in the current type are returned; the search is not recursive. @@ -7422,7 +7422,7 @@ If the current represents a type parameter in the definition ## Remarks The search for nested types is not recursive. - In .NET 6 and earlier versions, the method does not return types in a particular order, such as alphabetical or declaration order. Your code must not depend on the order in which types are returned, because that order varies. However, starting with .NET 7, the ordering is deterministic based upon the metadata ordering in the assembly. + The method returns types in a deterministic order based upon the metadata ordering in the assembly. The following filter flags can be used to define which nested types to include in the search: @@ -7595,7 +7595,7 @@ If the current represents a type parameter in the definition A property is considered public to reflection if it has at least one accessor that is public. Otherwise the property is considered private, and you must use | | (in Visual Basic, combine the values using ` Or `) to get it. - In .NET 6 and earlier versions, the method does not return properties in a particular order, such as alphabetical or declaration order. Your code must not depend on the order in which properties are returned, because that order varies. However, starting with .NET 7, the ordering is deterministic based upon the metadata ordering in the assembly. + The method returns properties in a deterministic order based upon the metadata ordering in the assembly. The following table shows what members of a base class are returned by the `Get` methods when reflecting on a type. @@ -7720,7 +7720,7 @@ The following filter flags can be used to See for more information. -In .NET 6 and earlier versions, the method does not return properties in a particular order, such as alphabetical or declaration order. Your code must not depend on the order in which properties are returned, because that order varies. However, starting with .NET 7, the ordering is deterministic based upon the metadata ordering in the assembly. +The method returns properties in a deterministic order based upon the metadata ordering in the assembly. If the current represents a constructed generic type, this method returns the objects with the type parameters replaced by the appropriate type arguments. diff --git a/xml/System/UIntPtr.xml b/xml/System/UIntPtr.xml index 5355ff23c81..e034f9f4037 100644 --- a/xml/System/UIntPtr.xml +++ b/xml/System/UIntPtr.xml @@ -264,11 +264,11 @@ > [!NOTE] > Using as a pointer or a handle is error prone and unsafe. It is simply an integer type that can be used as an interchange format for pointers and handles due to being the same size. Outside of specific interchange requirements, such as for passing data to a language that doesn't support pointers, a correctly typed pointer should be used to represent pointers and should be used to represent handles. - This type implements the and interfaces. In .NET 7 and later versions, this type also implements the , , and interfaces. + This type implements the and interfaces. This type also implements the , , and interfaces. In C# starting from version 9.0, you can use the built-in `nuint` type to define native-sized integers. This type is represented by the type internally and provides operations and conversions that are appropriate for integer types. For more information, see [nint and nuint types](/dotnet/csharp/language-reference/builtin-types/integral-numeric-types). - In C# starting from version 11 and when targeting the .NET 7 or later runtime, `nuint` is an alias for in the same way that `uint` is an alias for . + In C# starting from version 11, `nuint` is an alias for in the same way that `uint` is an alias for . ]]> @@ -1455,7 +1455,7 @@ For this method matches the IEEE 754:201 The addition operation does not throw an exception if the result is too large to represent as an unsigned integer in the executing process. Instead, it is performed in an unchecked context. - In C# starting from version 11 and when targeting the .NET 7 or later runtime, this API is only accessible via reflection. The addition operator is directly recognized by the language and will follow the normal language behavior for addition operations, including overflowing in a `checked` context if the result is too large to represent. + In C# starting from version 11, this API is only accessible via reflection. The addition operator is directly recognized by the language and will follow the normal language behavior for addition operations, including overflowing in a `checked` context if the result is too large to represent. The equivalent method for this operator is . ]]> @@ -1955,7 +1955,7 @@ For this method matches the IEEE 754:201 The subtraction operation does not throw an exception if the result is too small to represent as an unsigned integer in the executing process. Instead, it is performed in an unchecked context. - In C# starting from version 11 and when targeting the .NET 7 or later runtime, this API is only accessible via reflection. The subtraction operator is directly recognized by the language and will follow the normal language behavior for subtraction operations, including overflowing in a `checked` context if the result is too small to represent. + In C# starting from version 11, this API is only accessible via reflection. The subtraction operator is directly recognized by the language and will follow the normal language behavior for subtraction operations, including overflowing in a `checked` context if the result is too small to represent. ]]> diff --git a/xml/System/Uri.xml b/xml/System/Uri.xml index 8b3b3a39c84..cb2dc899542 100644 --- a/xml/System/Uri.xml +++ b/xml/System/Uri.xml @@ -163,7 +163,7 @@ Uri uri1 = new Uri("C:/test/path/file.txt") // Implicit file path. Uri uri2 = new Uri("file:///C:/test/path/file.txt") // Explicit file path. ``` -These implicit file paths are not compliant with the URI specification and should be avoided when possible. When using .NET Core on Unix-based systems, implicit file paths can be especially problematic, because an absolute implicit file path is *indistinguishable* from a relative path. When such ambiguity is present, default to interpreting the path as an absolute URI. +These implicit file paths are not compliant with the URI specification and should be avoided when possible. When using .NET on Unix-based systems, implicit file paths can be especially problematic, because an absolute implicit file path is *indistinguishable* from a relative path. When such ambiguity is present, default to interpreting the path as an absolute URI. ## Security considerations