diff --git a/docs/azure/includes/dotnet-all.md b/docs/azure/includes/dotnet-all.md
index 9e5f6a78ffee8..085839dc3425a 100644
--- a/docs/azure/includes/dotnet-all.md
+++ b/docs/azure/includes/dotnet-all.md
@@ -414,7 +414,7 @@
| Common | NuGet [2.2.1](https://www.nuget.org/packages/Microsoft.Azure.Common/2.2.1) | | |
| Common - Dependencies | NuGet [1.0.0](https://www.nuget.org/packages/Microsoft.Azure.Common.Dependencies/1.0.0) | | |
| Computer Vision | NuGet [7.0.1](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Vision.ComputerVision/7.0.1) | | GitHub [7.0.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.CognitiveServices.Vision.ComputerVision_6.0.0-preview.1/sdk/cognitiveservices/Vision.ComputerVision) |
-| Cosmos DB | NuGet [3.47.0](https://www.nuget.org/packages/Microsoft.Azure.Cosmos/3.47.0)
NuGet [3.49.0-preview.0](https://www.nuget.org/packages/Microsoft.Azure.Cosmos/3.49.0-preview.0) | [docs](/dotnet/api/overview/azure/cosmosdb) | GitHub [3.47.0](https://github.com/Azure/azure-cosmos-dotnet-v3/tree/3.12.0/Microsoft.Azure.Cosmos) |
+| Cosmos DB | NuGet [3.47.0](https://www.nuget.org/packages/Microsoft.Azure.Cosmos/3.47.0)
NuGet [3.49.0-preview.1](https://www.nuget.org/packages/Microsoft.Azure.Cosmos/3.49.0-preview.1) | [docs](/dotnet/api/overview/azure/cosmosdb) | GitHub [3.47.0](https://github.com/Azure/azure-cosmos-dotnet-v3/tree/3.12.0/Microsoft.Azure.Cosmos) |
| Custom Image Search | NuGet [2.1.0-preview.1](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Search.BingCustomImageSearch/2.1.0-preview.1) | | GitHub [2.1.0-preview.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.CognitiveServices.Search.BingCustomImageSearch_2.1.0-preview.1/sdk/cognitiveservices/Search.BingCustomImageSearch) |
| Custom Image Search | NuGet [2.0.0](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Search.CustomImageSearch/2.0.0) | | |
| Custom Search | NuGet [2.1.0-preview.1](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Search.BingCustomSearch/2.1.0-preview.1) | | GitHub [2.1.0-preview.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.CognitiveServices.Search.BingCustomSearch_2.1.0-preview.1/sdk/cognitiveservices/Search.BingCustomSearch) |
diff --git a/docs/core/compatibility/8.0.md b/docs/core/compatibility/8.0.md
index dd8f6625893e4..b475fba01d0bf 100644
--- a/docs/core/compatibility/8.0.md
+++ b/docs/core/compatibility/8.0.md
@@ -2,7 +2,7 @@
title: Breaking changes in .NET 8
titleSuffix: ""
description: Navigate to the breaking changes in .NET 8.
-ms.date: 12/05/2023
+ms.date: 04/10/2025
no-loc: [Blazor, Razor, Kestrel]
---
# Breaking changes in .NET 8
@@ -102,13 +102,14 @@ If you're migrating an app to .NET 8, the breaking changes listed here might aff
## Interop
-| Title | Type of change |
-| ------------------------------------------------------------------------------------------------- | ------------------- |
-| [CreateObjectFlags.Unwrap only unwraps on target instance](interop/8.0/comwrappers-unwrap.md) | Behavioral change |
-| [Custom marshallers require additional members](interop/8.0/marshal-modes.md) | Source incompatible |
-| [IDispatchImplAttribute API is removed](interop/8.0/idispatchimplattribute-removed.md) | Binary incompatible |
-| [JSFunctionBinding implicit public default constructor removed](interop/8.0/jsfunctionbinding-constructor.md) | Binary incompatible |
-| [SafeHandle types must have public constructor](interop/8.0/safehandle-constructor.md) | Source incompatible |
+| Title | Type of change |
+|---------------------------------------------------------------------------------------------------------------|---------------------|
+| [CreateObjectFlags.Unwrap only unwraps on target instance](interop/8.0/comwrappers-unwrap.md) | Behavioral change |
+| [Custom marshallers require additional members](interop/8.0/marshal-modes.md) | Source incompatible |
+| [IDispatchImplAttribute API is removed](interop/8.0/idispatchimplattribute-removed.md) | Binary incompatible |
+| [JSFunctionBinding implicit public default constructor removed](interop/8.0/jsfunctionbinding-constructor.md) | Binary incompatible |
+| [SafeHandle types must have public constructor](interop/8.0/safehandle-constructor.md) | Source incompatible |
+| [Linux native library resolution no longer uses `netcoredeps`](interop/8.0/linux-netcoredeps.md) | Behavioral change |
## Networking
diff --git a/docs/core/compatibility/interop/8.0/linux-netcoredeps.md b/docs/core/compatibility/interop/8.0/linux-netcoredeps.md
new file mode 100644
index 0000000000000..bbf0fa16e3eba
--- /dev/null
+++ b/docs/core/compatibility/interop/8.0/linux-netcoredeps.md
@@ -0,0 +1,49 @@
+---
+title: "Breaking change - Linux native library resolution no longer uses `netcoredeps`"
+description: "Learn about the breaking change in .NET 8 where Linux applications no longer search the `netcoredeps` subdirectory for native libraries."
+ms.date: 4/10/2025
+ai-usage: ai-assisted
+ms.custom: https://github.com/dotnet/docs/issues/45777
+---
+
+# Linux native library resolution no longer uses `netcoredeps`
+
+Starting in .NET 8, Linux applications no longer search the `netcoredeps` subdirectory for native libraries.
+
+## Version introduced
+
+.NET 8
+
+## Previous behavior
+
+In earlier versions of .NET, Linux applications searched for native libraries in a `netcoredeps` subdirectory located next to the application executable. This behavior applied to all native library loads, including user-defined platform invokes (p/invokes).
+
+## New behavior
+
+In .NET 8 and later, Linux applications no longer search the `netcoredeps` subdirectory for native libraries. Native library resolution now follows standard mechanisms without relying on this subdirectory.
+
+## Type of breaking change
+
+This is a [behavioral change](../../categories.md#behavioral-change).
+
+## Reason for change
+
+The `netcoredeps` behavior was originally introduced to handle complex dependencies on third-party libraries in earlier .NET versions. .NET 8+ no longer requires this behavior due to improved dependency handling. Additionally, the mechanism isn't aligned with recommended practices for ELF platforms.
+
+For more information, see [GitHub issue #114393](https://github.com/dotnet/runtime/issues/114393).
+
+## Recommended action
+
+If your application relied on the `netcoredeps` subdirectory for p/invokes or custom native library resolution, use the following alternatives:
+
+- Implement a custom resolution mechanism using one of the following:
+ -
+ - [System.Runtime.Loader.AssemblyLoadContext.LoadUnmanagedDll](/dotnet/api/system.runtime.loader.assemblyloadcontext.loadunmanageddll)
+ -
+ -
+- If an `RPATH` is required in your deployment, modify the ELF file explicitly using the `patchelf` utility.
+
+## Affected APIs
+
+- `DllImport`
+-
diff --git a/docs/core/compatibility/toc.yml b/docs/core/compatibility/toc.yml
index d8b6d06e914fa..74a1a6e83698c 100644
--- a/docs/core/compatibility/toc.yml
+++ b/docs/core/compatibility/toc.yml
@@ -362,6 +362,8 @@ items:
href: interop/8.0/jsfunctionbinding-constructor.md
- name: SafeHandle types must have public constructor
href: interop/8.0/safehandle-constructor.md
+ - name: Linux native library resolution no longer uses `netcoredeps`
+ href: interop/8.0/linux-netcoredeps.md
- name: Networking
items:
- name: SendFile throws NotSupportedException for connectionless sockets
@@ -1818,6 +1820,8 @@ items:
href: interop/8.0/jsfunctionbinding-constructor.md
- name: SafeHandle types must have public constructor
href: interop/8.0/safehandle-constructor.md
+ - name: Linux native library resolution no longer uses `netcoredeps`
+ href: interop/8.0/linux-netcoredeps.md
- name: .NET 7
items:
- name: RuntimeInformation.OSArchitecture under emulation
diff --git a/docs/core/whats-new/dotnet-10/overview.md b/docs/core/whats-new/dotnet-10/overview.md
index 702067de1d63d..a0108678bd5a3 100644
--- a/docs/core/whats-new/dotnet-10/overview.md
+++ b/docs/core/whats-new/dotnet-10/overview.md
@@ -53,6 +53,11 @@ The .NET 10 SDK introduces the following new features and enhancements, includin
- **Pruning of framework-provided package references**: Automatically removes unused framework-provided package references, reducing build times and disk usage.
- **More consistent command order**: New noun-first aliases for `dotnet` CLI commands improve readability and consistency.
+- **CLI commands default to interactive mode in interactive terminals**: The `--interactive` flag is now enabled by default for CLI commands in interactive terminals.
+- **Native shell tab-completion scripts**: The `dotnet` CLI now supports generating native tab-completion scripts for popular shells using the `dotnet completions generate [SHELL]` command. Supported shells include `bash`, `fish`, `nushell`, `powershell`, and `zsh`.
+- **Console apps can natively create container images**: Console apps can now create container images via `dotnet publish /t:PublishContainer` without requiring the `` property in the project file.
+- **Explicitly control the image format of containers**: A new `` property allows you to explicitly set the format of container images to either `Docker` or `OCI`.
+- **Support for Microsoft.Testing.Platform in `dotnet test`**: A new `dotnet test` experience made specifically for Microsoft.Testing.Platform can be opted-in via `dotnet.config`. For more information about the existing `dotnet test` integration for MTP and the new integration, see [Testing with `dotnet test`](../../testing/unit-testing-with-dotnet-test.md).
For more information, see [What's new in the SDK for .NET 10](sdk.md).
diff --git a/samples/snippets/csharp/VS_Snippets_CLR/conceptual.timespan.custom/cs/customexamples1.cs b/samples/snippets/csharp/VS_Snippets_CLR/conceptual.timespan.custom/cs/customexamples1.cs
index 73f404d7e0ed3..310686965f8bd 100644
--- a/samples/snippets/csharp/VS_Snippets_CLR/conceptual.timespan.custom/cs/customexamples1.cs
+++ b/samples/snippets/csharp/VS_Snippets_CLR/conceptual.timespan.custom/cs/customexamples1.cs
@@ -64,8 +64,8 @@ private static void ddSpecifier()
for (int ctr = 2; ctr <= 8; ctr++)
{
string fmt = new String('d', ctr) + @"\.hh\:mm\:ss";
- Console.WriteLine($"{fmt} --> {ts1:" + fmt + "}");
- Console.WriteLine($"{fmt} --> {ts2:" + fmt + "}");
+ Console.WriteLine($"{fmt} --> {ts1.ToString(fmt)}");
+ Console.WriteLine($"{fmt} --> {ts2.ToString(fmt)}");
Console.WriteLine();
}
// The example displays the following output:
diff --git a/samples/snippets/csharp/VS_Snippets_CLR/conceptual.timespan.custom/cs/fspecifiers1.cs b/samples/snippets/csharp/VS_Snippets_CLR/conceptual.timespan.custom/cs/fspecifiers1.cs
index eb7dfaca4918d..f8f51ea0bb7f9 100644
--- a/samples/snippets/csharp/VS_Snippets_CLR/conceptual.timespan.custom/cs/fspecifiers1.cs
+++ b/samples/snippets/csharp/VS_Snippets_CLR/conceptual.timespan.custom/cs/fspecifiers1.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
public class Example
{
@@ -11,15 +11,15 @@ public static void Main()
Console.WriteLine();
for (int ctr = 1; ctr <= 7; ctr++) {
- fmt = new String('f', ctr);
+ fmt = new string('f', ctr);
if (fmt.Length == 1) fmt = "%" + fmt;
- Console.WriteLine("{0,10}: {1:" + fmt + "}", fmt, ts);
+ Console.WriteLine($"{fmt,10}: {ts.ToString(fmt)}");
}
Console.WriteLine();
for (int ctr = 1; ctr <= 7; ctr++) {
- fmt = new String('f', ctr);
- Console.WriteLine("{0,10}: {1:s\\." + fmt + "}", "s\\." + fmt, ts);
+ fmt = $"s\\.{new string('f', ctr)}";
+ Console.WriteLine($"{fmt,10}: {ts.ToString(fmt)}");
}
// The example displays the following output:
// %f: 8
diff --git a/samples/snippets/csharp/VS_Snippets_CLR/conceptual.timespan.custom/cs/negativevalues1.cs b/samples/snippets/csharp/VS_Snippets_CLR/conceptual.timespan.custom/cs/negativevalues1.cs
index 69e74ad5c5c3b..38eed378f2a7e 100644
--- a/samples/snippets/csharp/VS_Snippets_CLR/conceptual.timespan.custom/cs/negativevalues1.cs
+++ b/samples/snippets/csharp/VS_Snippets_CLR/conceptual.timespan.custom/cs/negativevalues1.cs
@@ -9,10 +9,10 @@ public static void Main()
String fmt = (result < TimeSpan.Zero ? "\\-" : "") + "dd\\.hh\\:mm";
Console.WriteLine(result.ToString(fmt));
- Console.WriteLine($"Interval: {result:" + fmt + "}");
+ Console.WriteLine($"Interval: {result.ToString(fmt)}");
}
}
// The example displays output like the following:
-// -1291.10:54
-// Interval: -1291.10:54
+// -5582.12:21
+// Interval: -5582.12:21
//
diff --git a/samples/snippets/csharp/VS_Snippets_VBCSharp/csrefKeywordsModifiers/CS/csrefKeywordsModifiers.cs b/samples/snippets/csharp/VS_Snippets_VBCSharp/csrefKeywordsModifiers/CS/csrefKeywordsModifiers.cs
index 8a87e3f819e6f..73ac9eac4848d 100644
--- a/samples/snippets/csharp/VS_Snippets_VBCSharp/csrefKeywordsModifiers/CS/csrefKeywordsModifiers.cs
+++ b/samples/snippets/csharp/VS_Snippets_VBCSharp/csrefKeywordsModifiers/CS/csrefKeywordsModifiers.cs
@@ -785,7 +785,7 @@ public abstract class Shape
protected Shape(string color)
{
Color = color;
- Console.WriteLine("Created a shape with color {color}.");
+ Console.WriteLine($"Created a shape with color {color}.");
}
// Abstract method that must be implemented by derived classes
@@ -813,7 +813,7 @@ public class Program
public static void Main(string[] args)
{
Square square = new Square("red", 5);
- Console.WriteLine("Area of the square: {square.CalculateArea()}");
+ Console.WriteLine($"Area of the square: {square.CalculateArea()}");
}
}
//