Skip to content

Merge main into live #47595

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
Jul 26, 2025
2 changes: 2 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
When you're assigned an issue, after you've completed your work and the workflows (status checks) have run, check to make sure there are no build warnings under the OpenPublishing.Build status check. If there are, open the build report (under View Details) and resolve any build warnings you introduced.

When writing documentation, follow the following guidelines:

Unless otherwise specified, all .NET content refers to modern .NET (not .NET Framework).
Expand Down
20 changes: 8 additions & 12 deletions .github/policies/label-issues.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,12 @@ configuration:
* 'needs-more-info' label removed
if:
- payloadType: Issues
- or:

- or:
- or:
- isAction:
action: Opened
- isAction:
action: Reopened

action: Reopened
- labelRemoved:
label: 'needs-more-info'
then:
Expand All @@ -57,8 +55,7 @@ configuration:
- isAction:
action: Closed
- isActivitySender:
issueAuthor: true

issueAuthor: true
- labelAdded:
label: ':world_map: reQUEST'
then:
Expand All @@ -71,7 +68,6 @@ configuration:
- or:
- payloadType: Issues
- payloadType: Pull_Request

- labelAdded:
label: ':world_map: mapQUEST'
then:
Expand All @@ -97,8 +93,7 @@ configuration:
- isAction:
action: Reopened
- hasLabel:
label: "won't fix"

label: "won't fix"
then:
- removeLabel:
label: "won't fix"
Expand All @@ -109,8 +104,7 @@ configuration:
- isAction:
action: Closed
- hasLabel:
label: 'in-progress'

label: 'in-progress'
then:
- removeLabel:
label: 'in-progress'
Expand All @@ -122,7 +116,9 @@ configuration:
action: Closed
- isActivitySender:
issueAuthor: true

- not:
activitySenderHasAssociation:
association: Member
then:
- addLabel:
label: resolved-by-customer
Expand Down
22 changes: 18 additions & 4 deletions docs/ai/conceptual/evaluation-libraries.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
title: The Microsoft.Extensions.AI.Evaluation libraries
description: Learn about the Microsoft.Extensions.AI.Evaluation libraries, which simplify the process of evaluating the quality and accuracy of responses generated by AI models in .NET intelligent apps.
ms.topic: concept-article
ms.date: 05/13/2025
ms.date: 07/24/2025
---
# The Microsoft.Extensions.AI.Evaluation libraries

Expand All @@ -11,8 +11,9 @@ The Microsoft.Extensions.AI.Evaluation libraries simplify the process of evaluat
The evaluation libraries, which are built on top of the [Microsoft.Extensions.AI abstractions](../microsoft-extensions-ai.md), are composed of the following NuGet packages:

- [📦 Microsoft.Extensions.AI.Evaluation](https://www.nuget.org/packages/Microsoft.Extensions.AI.Evaluation) – Defines the core abstractions and types for supporting evaluation.
- [📦 Microsoft.Extensions.AI.Evaluation.Quality](https://www.nuget.org/packages/Microsoft.Extensions.AI.Evaluation.Quality) – Contains evaluators that assess the quality of LLM responses in an app according to metrics such as relevance and completeness. These evaluators use the LLM directly to perform evaluations.
- [📦 Microsoft.Extensions.AI.Evaluation.Safety](https://www.nuget.org/packages/Microsoft.Extensions.AI.Evaluation.Safety) – Contains evaluators, such as the `ProtectedMaterialEvaluator` and `ContentHarmEvaluator`, that use the [Azure AI Foundry](/azure/ai-foundry/) Evaluation service to perform evaluations.
- [📦 Microsoft.Extensions.AI.Evaluation.NLP](https://www.nuget.org/packages/Microsoft.Extensions.AI.Evaluation.NLP) - Contains [evaluators](#nlp-evaluators) that evaluate the similarity of an LLM's response text to one or more reference responses using natural language processing (NLP) metrics. These evaluators aren't LLM or AI-based; they use traditional NLP techniques such as text tokenization and n-gram analysis to evaluate text similarity.
- [📦 Microsoft.Extensions.AI.Evaluation.Quality](https://www.nuget.org/packages/Microsoft.Extensions.AI.Evaluation.Quality) – Contains [evaluators](#quality-evaluators) that assess the quality of LLM responses in an app according to metrics such as relevance and completeness. These evaluators use the LLM directly to perform evaluations.
- [📦 Microsoft.Extensions.AI.Evaluation.Safety](https://www.nuget.org/packages/Microsoft.Extensions.AI.Evaluation.Safety) – Contains [evaluators](#safety-evaluators), such as the `ProtectedMaterialEvaluator` and `ContentHarmEvaluator`, that use the [Azure AI Foundry](/azure/ai-foundry/) Evaluation service to perform evaluations.
- [📦 Microsoft.Extensions.AI.Evaluation.Reporting](https://www.nuget.org/packages/Microsoft.Extensions.AI.Evaluation.Reporting) – Contains support for caching LLM responses, storing the results of evaluations, and generating reports from that data.
- [📦 Microsoft.Extensions.AI.Evaluation.Reporting.Azure](https://www.nuget.org/packages/Microsoft.Extensions.AI.Evaluation.Reporting.Azure) - Supports the reporting library with an implementation for caching LLM responses and storing the evaluation results in an [Azure Storage](/azure/storage/common/storage-introduction) container.
- [📦 Microsoft.Extensions.AI.Evaluation.Console](https://www.nuget.org/packages/Microsoft.Extensions.AI.Evaluation.Console) – A command-line tool for generating reports and managing evaluation data.
Expand All @@ -23,7 +24,7 @@ The libraries are designed to integrate smoothly with existing .NET apps, allowi

## Comprehensive evaluation metrics

The evaluation libraries were built in collaboration with data science researchers from Microsoft and GitHub, and were tested on popular Microsoft Copilot experiences. The following sections show the built-in [quality](#quality-evaluators) and [safety](#safety-evaluators) evaluators and the metrics they measure.
The evaluation libraries were built in collaboration with data science researchers from Microsoft and GitHub, and were tested on popular Microsoft Copilot experiences. The following sections show the built-in [quality](#quality-evaluators), [NLP](#nlp-evaluators), and [safety](#safety-evaluators) evaluators and the metrics they measure.

You can also customize to add your own evaluations by implementing the <xref:Microsoft.Extensions.AI.Evaluation.IEvaluator> interface.

Expand All @@ -41,9 +42,22 @@ Quality evaluators measure response quality. They use an LLM to perform the eval
| <xref:Microsoft.Extensions.AI.Evaluation.Quality.EquivalenceEvaluator> | `Equivalence` | Evaluates the similarity between the generated text and its ground truth with respect to a query |
| <xref:Microsoft.Extensions.AI.Evaluation.Quality.GroundednessEvaluator> | `Groundedness` | Evaluates how well a generated response aligns with the given context |
| <xref:Microsoft.Extensions.AI.Evaluation.Quality.RelevanceTruthAndCompletenessEvaluator>† | `Relevance (RTC)`, `Truth (RTC)`, and `Completeness (RTC)` | Evaluates how relevant, truthful, and complete a response is |
| <xref:Microsoft.Extensions.AI.Evaluation.Quality.IntentResolutionEvaluator> | `Intent Resolution` | Evaluates an AI system's effectiveness at identifying and resolving user intent (agent-focused) |
| <xref:Microsoft.Extensions.AI.Evaluation.Quality.TaskAdherenceEvaluator> | `Task Adherence` | Evaluates an AI system's effectiveness at adhering to the task assigned to it (agent-focused) |
| <xref:Microsoft.Extensions.AI.Evaluation.Quality.ToolCallAccuracyEvaluator> | `Tool Call Accuracy` | Evaluates an AI system's effectiveness at using the tools supplied to it (agent-focused) |

† This evaluator is marked [experimental](../../fundamentals/syslib-diagnostics/experimental-overview.md).

### NLP evaluators

NLP evaluators evaluate the quality of an LLM response by comparing it to a reference response using natural language processing (NLP) techniques. These evaluators aren't LLM or AI-based; instead, they use older NLP techniques to perform text comparisons.

| Evaluator type | Metric | Description |
|---------------------------------------------------------------------------|--------------------|-------------|
| <xref:Microsoft.Extensions.AI.Evaluation.NLP.BLEUEvaluator> | `BLEU` | Evaluates a response by comparing it to one or more reference responses using the bilingual evaluation understudy (BLEU) algorithm. This algorithm is commonly used to evaluate the quality of machine-translation or text-generation tasks. |
| <xref:Microsoft.Extensions.AI.Evaluation.NLP.GLEUEvaluator> | `GLEU` | Measures the similarity between the generated response and one or more reference responses using the Google BLEU (GLEU) algorithm, a variant of the BLEU algorithm that's optimized for sentence-level evaluation. |
| <xref:Microsoft.Extensions.AI.Evaluation.NLP.F1Evaluator> | `F1` | Evaluates a response by comparing it to a reference response using the *F1* scoring algorithm (the ratio of the number of shared words between the generated response and the reference response). |

### Safety evaluators

Safety evaluators check for presence of harmful, inappropriate, or unsafe content in a response. They rely on the Azure AI Foundry Evaluation service, which uses a model that's fine tuned to perform evaluations.
Expand Down
2 changes: 1 addition & 1 deletion docs/core/additional-tools/uninstall-tool-cli-dry-run.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ dotnet-core-uninstall dry-run -h|--help|-?

## Description

The `dotnet-core-uninstall list` command simulates .NET SDK and runtime removal. A status output is provided for each .NET SDK and runtime that would have been removed by the tool.
The `dotnet-core-uninstall dry-run` command simulates .NET SDK and runtime removal. A status output is provided for each .NET SDK and runtime that would have been removed by the tool.

### Arguments

Expand Down
1 change: 1 addition & 0 deletions docs/core/compatibility/10.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ If you're migrating an app to .NET 10, the breaking changes listed here might af
| [Consistent shift behavior in generic math](core-libraries/10.0/generic-math.md) | Behavioral change | Preview 1 |
| [Default trace context propagator updated to W3C standard](core-libraries/10.0/default-trace-context-propagator.md) | Behavioral change | Preview 4 |
| [DriveInfo.DriveFormat returns Linux filesystem types](core-libraries/10.0/driveinfo-driveformat-linux.md) | Behavioral change | Preview 6 |
| [GnuTarEntry and PaxTarEntry no longer includes atime and ctime by default](core-libraries/10.0/tar-atime-ctime-default.md) | Behavioral change | Preview 5 |
| [LDAP DirectoryControl parsing is now more stringent](core-libraries/10.0/ldap-directorycontrol-parsing.md) | Behavioral change | Preview 1 |
| [MacCatalyst version normalization](core-libraries/10.0/maccatalyst-version-normalization.md) | Behavioral change | Preview 1 |
| [.NET runtime no longer provides default SIGTERM signal handler](core-libraries/10.0/sigterm-signal-handler.md) | Behavioral change | Preview 5 |
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
---
title: "Breaking change: GnuTarEntry and PaxTarEntry exclude atime and ctime by default"
description: "Learn about the breaking change in .NET 10 where GnuTarEntry and PaxTarEntry no longer automatically set access time and change time fields."
ms.date: 06/05/2025
ai-usage: ai-assisted
ms.custom: https://github.com/dotnet/docs/issues/46465
---
# GnuTarEntry and PaxTarEntry exclude atime and ctime by default

Starting in .NET 10, <xref:System.Formats.Tar.GnuTarEntry> and <xref:System.Formats.Tar.PaxTarEntry> no longer automatically set access time (`atime`) and change time (`ctime`) fields when creating new entries. These fields are problematic in tar entries because not all tar readers support them. The fields will still be preserved when reading, and you set them directly. But they won't be set on existing entries that didn't have them to start, or when converting from other entry types.

The behavior of <xref:System.Formats.Tar.TarEntry.ModificationTime?displayProperty=nameWithType> is unchanged. It's initialized to <xref:System.DateTime.UtcNow> for tar entries created with a constructor, and uses the file modification time for entries created from files.

Other minor fixes have been made to <xref:System.Formats.Tar> to prioritize round-tripping of `TarEntry` entries from read to write without change.

## Version introduced

.NET 10 Preview 5

## Previous behavior

Previously, `GnuTarEntry` and `PaxTarEntry` always added `atime` and `ctime` values when creating new entries.

## New behavior

Starting in .NET 10, `GnuTarEntry` and `PaxTarEntry` only set `atime` and `ctime` if:

- The entry is read from a tar archive that already contains these fields.
- The user explicitly set them using the appropriate properties.

The behavior of <xref:System.Formats.Tar.TarEntry.ModificationTime?displayProperty=nameWithType> remains unchanged. It's initialized to <xref:System.DateTime.UtcNow?displayProperty=nameWithType> for tar entries created with a constructor, and uses the file modification time for entries created from files.

## Type of breaking change

This is a [behavioral change](../../categories.md#behavioral-change).

## Reason for change

This change was made for better compatibility with other tar readers and to improve round-tripping of tar files without modification.

## Recommended action

No action required for most users&mdash;most archives have no use for these timestamps.

If you require these fields to be set, you can use the following APIs:

- For `GnuTarEntry`: Use the <xref:System.Formats.Tar.GnuTarEntry.AccessTime?displayProperty=nameWithType> and <xref:System.Formats.Tar.GnuTarEntry.ChangeTime?displayProperty=nameWithType> properties.
- For `PaxTarEntry`: Use the constructor that accepts extended attributes: <xref:System.Formats.Tar.PaxTarEntry.%23ctor(System.Formats.Tar.TarEntryType,System.String,System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{System.String,System.String}})>.

However, be aware that setting these fields creates a tar file that isn't readable by many tar clients.

## Affected APIs

- <xref:System.Formats.Tar.GnuTarEntry?displayProperty=fullName>
- <xref:System.Formats.Tar.PaxTarEntry?displayProperty=fullName>
- <xref:System.Formats.Tar.TarReader?displayProperty=fullName>
- <xref:System.Formats.Tar.TarWriter?displayProperty=fullName>
4 changes: 2 additions & 2 deletions docs/core/compatibility/sdk/8.0/source-link.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@ The [Source Link](https://github.com/dotnet/sourcelink) build tooling is now inc

## Previous behavior

Prior to this change, the default `InformationalVersion` of a library or application was the `Version` property.
Prior to this change, `InformationalVersion` did not include any build metadata. The default `InformationalVersion` of a library or application was the `Version` property.

## New behavior

Starting in .NET 8, the default `InformationalVersion` of a library or application is the `Version` property *and* the `SourceRevisionId` property.
Starting in .NET 8, `InformationalVersion` includes the `SourceRevisionId` property in all cases. For example, the default `InformationalVersion` of a library or application is the `Version` property *and* the `SourceRevisionId` property.

## Version introduced

Expand Down
2 changes: 2 additions & 0 deletions docs/core/compatibility/toc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ items:
href: core-libraries/10.0/default-trace-context-propagator.md
- name: DriveInfo.DriveFormat returns Linux filesystem types
href: core-libraries/10.0/driveinfo-driveformat-linux.md
- name: GnuTarEntry and PaxTarEntry exclude atime and ctime by default
href: core-libraries/10.0/tar-atime-ctime-default.md
- name: LDAP DirectoryControl parsing is now more stringent
href: core-libraries/10.0/ldap-directorycontrol-parsing.md
- name: MacCatalyst version normalization
Expand Down
2 changes: 1 addition & 1 deletion docs/core/tools/dotnet-msbuild.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ The `dotnet msbuild` command allows access to a fully functional MSBuild.

The command has the exact same capabilities as the existing MSBuild command-line client for SDK-style projects only. The options are all the same. For more information about the available options, see the [MSBuild command-line reference](/visualstudio/msbuild/msbuild-command-line-reference).

The [dotnet build](dotnet-build.md) command is equivalent to `dotnet msbuild -restore`. When you don't want to build the project and you have a specific target you want to run, use `dotnet build` or `dotnet msbuild` and specify the target.
The [dotnet build](dotnet-build.md) command is equivalent to `dotnet msbuild -restore`.

## Examples

Expand Down
2 changes: 1 addition & 1 deletion docs/core/tools/dotnet-tool-install.md
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ For more information, see [Install a local tool](global-tools.md#install-a-local

Installs [dotnetsay](https://www.nuget.org/packages/dotnetsay/) as a local tool for the current directory.

- **`dotnet tool install -g --verbosity minimal`**
- **`dotnet tool install -g dotnetsay --verbosity minimal`**

Installs [dotnetsay](https://www.nuget.org/packages/dotnetsay/) as a global tool with the verbosity of minimal. The default verbosity for global tool is quiet.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public void CreateAndRunAssembly(string assemblyPath)

## Persisted dynamic assemblies in .NET

The new <xref:System.Reflection.Emit.PersistedAssemblyBuilder> type derived from the <xref:System.Reflection.Emit.AssemblyBuilder> and allows save the dynamic assemblies in .NET Core, check the usage scenarios and examples from [PersistedAssemblyBuilder](system-reflection-emit-persistedassemblybuilder.md) page.
In .NET, the <xref:System.Reflection.Emit.PersistedAssemblyBuilder> type, which derives from <xref:System.Reflection.Emit.AssemblyBuilder>, lets you save dynamic assemblies. For more information, see the usage scenarios and examples at [PersistedAssemblyBuilder](system-reflection-emit-persistedassemblybuilder.md).

## Persisted dynamic assemblies in .NET Framework

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ The machine learning task used to train the sentiment analysis model in this tut

- *SentimentAnalysis.consumption.cs* - This file contains the `ModelInput` and `ModelOutput` schemas as well as the `Predict` function generated for consuming the model.
- *SentimentAnalysis.training.cs* - This file contains the training pipeline (data transforms, trainer, trainer hyperparameters) chosen by Model Builder to train the model. You can use this pipeline for re-training your model.
- **SentimentAnalysis.zip* - This is a serialized zip file which represents your trained ML.NET model.
- **SentimentAnalysis.mlnet* - This file contains metadata and configuration details for an ML.NET model.

1. Select the **Next step** button to move to the next step.

Expand Down Expand Up @@ -144,7 +144,7 @@ To make a single prediction, you have to create a <xref:Microsoft.ML.PredictionE

```csharp
builder.Services.AddPredictionEnginePool<ModelInput, ModelOutput>()
.FromFile("SentimentAnalysis.zip");
.FromFile("SentimentAnalysis.mlnet");
```

### Create sentiment analysis handler
Expand Down
Loading