Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/azure/includes/dotnet-all.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)<br>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)<br>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) |
Expand Down
17 changes: 9 additions & 8 deletions docs/core/compatibility/8.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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

Expand Down
49 changes: 49 additions & 0 deletions docs/core/compatibility/interop/8.0/linux-netcoredeps.md
Original file line number Diff line number Diff line change
@@ -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:
- <xref:System.Runtime.Loader.AssemblyLoadContext.ResolvingUnmanagedDll?displayProperty=fullName>
- [System.Runtime.Loader.AssemblyLoadContext.LoadUnmanagedDll](/dotnet/api/system.runtime.loader.assemblyloadcontext.loadunmanageddll)
- <xref:System.Runtime.InteropServices.NativeLibrary.SetDllImportResolver(System.Reflection.Assembly,System.Runtime.InteropServices.DllImportResolver)?displayProperty=fullName>
- <xref:System.Runtime.InteropServices.NativeLibrary.Load*?displayProperty=fullName>
- If an `RPATH` is required in your deployment, modify the ELF file explicitly using the `patchelf` utility.

## Affected APIs

- `DllImport`
- <xref:System.Runtime.InteropServices.NativeLibrary.Load*?displayProperty=fullName>
4 changes: 4 additions & 0 deletions docs/core/compatibility/toc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
5 changes: 5 additions & 0 deletions docs/core/whats-new/dotnet-10/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 `<EnableSdkContainerSupport>` property in the project file.
- **Explicitly control the image format of containers**: A new `<ContainerImageFormat>` 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).

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System;
using System;

public class Example
{
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
// </Snippet29>
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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()}");
}
}
//</snippet27>
Expand Down
Loading