Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
15f3606
Fix link (#51733)
gewarren Feb 13, 2026
b2e1484
Fix Azure Container Apps identity assign CLI flag (#51740)
scottaddie Feb 13, 2026
d00a435
Fix MSTest docs (#51751)
Evangelink Feb 16, 2026
f109863
Replace deprecated OpenTelemetry exporters with OTLP in Orleans monit…
Copilot Feb 17, 2026
4e98dc5
fix broken links to c# proposal (#51741)
gewarren Feb 17, 2026
7334909
Document `ArtifactsProjectName` property in artifacts output layout (…
Copilot Feb 17, 2026
59efb84
Replace semicolon with at character in dotnet install page (#51755)
BartoszKlonowski Feb 17, 2026
a125f80
Follow up on unresolved feedback from #51272 (#51756)
ReubenBond Feb 17, 2026
b85621f
[MSTest] Do not use var when type is not explicit (#51752)
Evangelink Feb 17, 2026
f0d65e9
Update model recommendations in GitHub Copilot modernization FAQ (#51…
Copilot Feb 17, 2026
dad6c78
Update SOS u command docs (#51761)
rcj1 Feb 17, 2026
ba463e1
Add docs on ExtendedLayout (#51762)
BillWagner Feb 17, 2026
a822a00
Bump actions/stale from 10.1.1 to 10.2.0 (#51766)
dependabot[bot] Feb 18, 2026
36efe18
Bump the dotnet group with 1 update (#51788)
dependabot[bot] Feb 18, 2026
6788c15
Bump the dotnet group with 2 updates (#51791)
dependabot[bot] Feb 18, 2026
246c391
Bump the dotnet group with 2 updates (#51780)
dependabot[bot] Feb 18, 2026
7e9787e
Bump the dotnet group with 3 updates (#51793)
dependabot[bot] Feb 18, 2026
42ea8c3
Bump the dotnet group with 2 updates (#51795)
dependabot[bot] Feb 18, 2026
4541514
Bump the dotnet group with 2 updates (#51813)
dependabot[bot] Feb 18, 2026
bba86a8
Bump the dotnet group with 2 updates (#51816)
dependabot[bot] Feb 18, 2026
b8487f0
Bump the dotnet group with 2 updates (#51821)
dependabot[bot] Feb 18, 2026
0727397
Bump the dotnet group with 3 updates (#51823)
dependabot[bot] Feb 18, 2026
2cef4d9
Bump the dotnet group with 4 updates (#51824)
dependabot[bot] Feb 18, 2026
e0c4693
Bump the dotnet group with 2 updates (#51822)
dependabot[bot] Feb 18, 2026
a4cc024
Bump github/codeql-action from 4.32.2 to 4.32.3 (#51768)
dependabot[bot] Feb 18, 2026
7cd11e0
Update package index with latest published versions (#51764)
azure-sdk Feb 18, 2026
0f663b0
Document that dump collection isn't supported on mobile platforms (#5…
steveisok Feb 19, 2026
f9b91d2
Document GeneratedRegexAttribute property support in .NET 9 (#51735)
Copilot Feb 19, 2026
fb457d4
Update documentation for ContinuousIntegrationBuild property (#51831)
tmat Feb 20, 2026
9f96085
Add additional compiler diagnostics related to applying attributes (#…
BillWagner Feb 20, 2026
a427d09
Update Coverlet docs to reflect native Microsoft.Testing.Platform sup…
Copilot Feb 20, 2026
9814883
Add some skills and prompts (#51737)
adegeo Feb 20, 2026
45734b7
Modernize the Get Started content (#51565)
BillWagner Feb 20, 2026
cfd9781
Add policy to auto-mention team when @meaghanlewis is referenced in i…
Copilot Feb 23, 2026
052b122
Change ms.topic from 'article' to 'concept-article' (#51833)
adegeo Feb 23, 2026
76fb6d2
fix: change to correct directory needed (#51838)
mikeirvingweb Feb 23, 2026
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
22 changes: 22 additions & 0 deletions .github/policies/mention-meaghanlewis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
id: mention.meaghanlewis
name: GitOps.IssueManagement
description: Mention team members when @meaghanlewis is referenced in issues
owner:
resource: repository
disabled: false
where:
configuration:
resourceManagementConfiguration:
eventResponderTasks:
- description: Mention team members when @meaghanlewis is mentioned in an issue
if:
- payloadType: Issues
- isAction:
action: Opened
- bodyContains:
pattern: '@meaghanlewis'
isRegex: False
then:
- addReply:
reply: >-
CC @gewarren @cmastr @BillWagner @adegeo
23 changes: 23 additions & 0 deletions .github/prompts/InstallGuide.UpdateDependencies.prompt.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
---
name: InstallGuide.UpdateDependencies
agent: agent
description: This prompt is used to update the .NET prerequisites for various Linux distributions in the documentation.
tools: ['vscode', 'execute', 'read', 'agent', 'edit', 'search', 'web', 'github/get_file_contents', 'todo']
---
You are a support engineer documenting the .NET prerequisites for various Linux distributions. You have old documentation that needs to be updated to reflect the latest .NET dependencies. Some of the information may be incorrect or outdated.

The supported .NET versions are .NET 8, .NET 9, .NET 10, with .NET 11 in preview. .NET 11 shouldn't be documented as we don't document preview releases in the installation guide. The source of most up-to-date information is the `os-packages.json` file in the .NET GitHub repository. Use the GitHub MCP server to get the files.

- **.NET 10**: `https://github.com/dotnet/core/blob/v10.0.3/release-notes/10.0/os-packages.json`
- **.NET 9**: `https://github.com/dotnet/core/blob/v10.0.3/release-notes/9.0/os-packages.json`
- **.NET 8**: Doesn't exist. For the most part, the packages are the same as .NET 9 except that zlib is required for .NET 8. Some packages may differ in name between .NET 8 and .NET 9.

Cross-reference the distribution and find the required dependencies for that distribution. Then, update the dependencies section of the article to ensure it includes all required dependencies for that distribution. If there is no source material for the .NET version (like .NET 8), use the closest version available (like .NET 9) and make any necessary adjustments based on known differences. The article should already have dependencies that work for at least .NET 8.

For .NET 9 and .NET 10, use the exact dependencies listed in the `os-packages.json` file.

If existing versions are listed, ensure that any new dependencies are added to the list without removing existing ones, unless they are no longer required.

zlib is required for .NET 8, but not for .NET 9 or .NET 10.

Remove libgdiplus and any related notes.
23 changes: 23 additions & 0 deletions .github/prompts/InstallGuide.UpdateSupportedOS.prompt.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
---
name: InstallGuide.UpdateSupportedOS
agent: agent
description: This prompt is used to update the supported operating systems for different versions of .NET in the documentation.
tools: ['vscode', 'execute', 'read', 'agent', 'edit', 'search', 'web', 'github/get_file_contents', 'todo']
---
You are a support engineer documenting which operating systems are supported with different versions of .NET. You have old documentation that needs to be updated to reflect the latest information. Some of the information may be incorrect or outdated.

The supported .NET versions are .NET 8, .NET 9, .NET 10, with .NET 11 in preview. .NET 11 shouldn't be documented as we don't document preview releases in the installation guide. The source of most up-to-date information is the `supported-os.json` file in the .NET GitHub repository. Use the GitHub MCP server to get the files.

- **.NET 10**: `https://github.com/dotnet/core/blob/v10.0.3/release-notes/10.0/supported-os.json`
- **.NET 9**: `https://github.com/dotnet/core/blob/v10.0.3/release-notes/9.0/supported-os.json`
- **.NET 8**: `https://github.com/dotnet/core/blob/v10.0.3/release-notes/8.0/supported-os.json`

## Actions

- Cross-reference the operating system and find which versions are supported
- Update the appropriate sections of the article to reflect the latest information
- Ensure that the tables listing supported operating systems for each .NET version are accurate and complete
- If an operating system version is no longer supported for a specific .NET version, remove it from the list
- If a new operating system version has been added for a specific .NET version, add it to the list
- Ensure that any notes about end-of-life or end-of-support dates are accurate and up-to-date
- Maintain the existing format and style of the documentation while making updates
5 changes: 3 additions & 2 deletions .github/prompts/RefreshLinks.prompt.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
---
model: GPT-4.1 (copilot)
mode: agent
name: RefreshLinks
agent: agent
description: "Updates link text to match target content headings"
model: GPT-4.1 (copilot)
---

# Refresh Links Prompt
Expand Down
101 changes: 101 additions & 0 deletions .github/skills/redirect-article/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
---
name: redirect-article
description: Deletes a markdown article and creates a redirect entry pointing to a different article. Use when consolidating articles, renaming or moving content, removing outdated documentation, or reorganizing the docs structure while preserving existing URLs.
---

# Redirect Article

Delete a markdown article from the repository and create a redirect entry that points users to a different article. This ensures existing links and bookmarks continue to work after content is reorganized.

## When to Use

- Deleting an article that should redirect to another existing article
- Consolidating multiple articles into a single article
- Renaming or moving an article to a new location
- Removing outdated content while preserving URL functionality

## Steps

### Required: Use the provided script

**DO NOT manually edit files or JSON.** Use the `create-redirect-entry.ps1` script to handle the redirect creation automatically.

1. **Delete the source article** - Remove the original markdown file from the repository using `Remove-Item`.
2. **Create a redirect entry** - **REQUIRED:** Use the `create-redirect-entry.ps1` script (see below) to add the redirect entry to the appropriate JSON file. Do not manually edit the JSON file.
3. **Update internal links** - Search the repository for links to the old article and update them to point to the new article.

## Redirection File Selection

To determine the correct redirection file for an article:

1. **Search for existing redirects** - Search the `.openpublishing.redirection.*.json` files for entries with paths similar to your source article (same folder or parent folder).
2. **Match by path prefix** - Use the redirection file that contains entries with the longest matching path prefix to your source article.
3. **Use the reference table** - If no existing entries match, consult the table below based on the content area.

**Reference table:**

| Product Area | Redirection File |
|--------------|------------------|
| AI | `.openpublishing.redirection.ai.json` |
| Architecture | `.openpublishing.redirection.architecture.json` |
| .NET Aspire | `.openpublishing.redirection.aspire.json` |
| Azure | `.openpublishing.redirection.azure.json` |
| .NET Core | `.openpublishing.redirection.core.json` |
| C# | `.openpublishing.redirection.csharp.json` |
| Desktop WPF | `.openpublishing.redirection.desktop-wpf.json` |
| .NET Framework | `.openpublishing.redirection.framework.json` |
| .NET Framework WinForms | `.openpublishing.redirection.framework-winforms.json` |
| .NET Framework WPF | `.openpublishing.redirection.framework-wpf.json` |
| F# | `.openpublishing.redirection.fsharp.json` |
| .NET Fundamentals | `.openpublishing.redirection.fundamentals.json` |
| Machine Learning | `.openpublishing.redirection.machine-learning.json` |
| Navigate | `.openpublishing.redirection.navigate.json` |
| Orleans | `.openpublishing.redirection.orleans.json` |
| .NET Standard | `.openpublishing.redirection.standard.json` |
| Visual Basic | `.openpublishing.redirection.visual-basic.json` |
| Default/General | `.openpublishing.redirection.json` |

## Scripts

### create-redirect-entry.ps1

**ALWAYS use this script to add redirect entries.** This script adds the entry in alphabetical order and handles formatting. It supports both `source_path_from_root` and `source_path` properties when reading existing entries.

Location (relative to this skill file): `./scripts/create-redirect-entry.ps1`

| Parameter | Required | Description |
|-----------|----------|-------------|
| `RedirectionFile` | Yes | The redirection JSON file name (e.g., `.openpublishing.redirection.csharp.json`) |
| `SourcePath` | Yes | Repository path of the deleted article (with or without leading `/`) |
| `RedirectUrl` | Yes | Destination URL to redirect to |

**Example:**

```powershell
.\scripts\create-redirect-entry.ps1 `
-RedirectionFile ".openpublishing.redirection.csharp.json" `
-SourcePath "docs/csharp/fundamentals/old-article.md" `
-RedirectUrl "/dotnet/csharp/fundamentals/new-article"
```

## Redirect Entry Format

```json
{
"source_path_from_root": "/docs/csharp/fundamentals/old-article.md",
"redirect_url": "/dotnet/csharp/fundamentals/new-article"
}
```

- **source_path_from_root**: File path from the repository root, starting with `/` (preferred property)
- **source_path**: Legacy property without leading `/` (some older files use this)
- **redirect_url**: URL path to redirect to (starts with `/dotnet/`)

> **Note:** The script handles both `source_path_from_root` and `source_path` when reading existing entries, but always writes new entries using `source_path_from_root`.

## Important Notes

- Redirect entries are sorted **alphabetically** by path (ignoring the leading `/` for `source_path_from_root`).
- Always determine the correct redirection file by searching for existing entries with similar paths before running the script.
- Always search the repository for links to the old article and update them.
- The `redirect_url` shouldn't include the file extension or domain—just the URL path.
161 changes: 161 additions & 0 deletions .github/skills/redirect-article/scripts/create-redirect-entry.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
<#
.SYNOPSIS
Adds a new redirection entry to an Open Publishing redirection JSON file.

.DESCRIPTION
This script adds a new redirection entry to the specified JSON file. The entry
is inserted alphabetically by path. The script handles both 'source_path_from_root'
(preferred) and 'source_path' properties when reading existing entries.

.PARAMETER RedirectionFile
The name of the redirection JSON file (e.g., '.openpublishing.redirection.csharp.json').

.PARAMETER SourcePath
The source path of the article being redirected (relative to repo root).
Example: 'docs/csharp/fundamentals/old-article.md'

.PARAMETER RedirectUrl
The destination URL to redirect to.
Example: '/dotnet/csharp/fundamentals/new-article'

.EXAMPLE
.\create-redirect-entry.ps1 -RedirectionFile ".openpublishing.redirection.csharp.json" -SourcePath "docs/csharp/fundamentals/old-article.md" -RedirectUrl "/dotnet/csharp/fundamentals/new-article"
#>

[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[string]$RedirectionFile,

[Parameter(Mandatory = $true)]
[string]$SourcePath,

[Parameter(Mandatory = $true)]
[string]$RedirectUrl
)

# Find the root of the git repository
function Get-GitRepoRoot {
$currentPath = (Get-Location).Path
while ($currentPath -ne $null) {
if (Test-Path (Join-Path $currentPath ".git")) {
return $currentPath
}
$parentPath = Split-Path $currentPath -Parent
if ($parentPath -eq $currentPath) {
break
}
$currentPath = $parentPath
}
return $null
}

# Get the source path from a redirection entry (handles both properties)
function Get-EntrySourcePath {
param($Entry)
if ($Entry.source_path_from_root) {
return $Entry.source_path_from_root
}
return $Entry.source_path
}

# Normalize a path for comparison (strip leading /)
function Get-NormalizedPath {
param([string]$Path)
return $Path.TrimStart('/')
}

# Main script logic
try {
# Normalize SourcePath (remove leading / if present for consistent handling)
$normalizedSourcePath = Get-NormalizedPath -Path $SourcePath

# Determine the redirection file path
if ([System.IO.Path]::IsPathRooted($RedirectionFile)) {
# Absolute path provided
$redirectionFilePath = $RedirectionFile
}
else {
# Relative path - find repo root and join
$repoRoot = Get-GitRepoRoot
if (-not $repoRoot) {
Write-Error "Could not find git repository root. Make sure you're running this script from within a git repository."
exit 1
}
Write-Host "Repository root: $repoRoot" -ForegroundColor Cyan
$redirectionFilePath = Join-Path $repoRoot $RedirectionFile
}

if (-not (Test-Path $redirectionFilePath)) {
Write-Error "Redirection file not found: $redirectionFilePath"
exit 1
}

Write-Host "Redirection file: $redirectionFilePath" -ForegroundColor Cyan

# Read and parse the JSON file
$jsonContent = Get-Content -Path $redirectionFilePath -Raw | ConvertFrom-Json

# Check if redirections array exists
if (-not $jsonContent.redirections) {
Write-Error "Invalid redirection file format. Expected 'redirections' array not found."
exit 1
}

# Check if entry already exists (check both source_path_from_root and source_path)
$sourcePathWithRoot = "/$normalizedSourcePath"
$existingEntry = $jsonContent.redirections | Where-Object {
(Get-NormalizedPath -Path (Get-EntrySourcePath -Entry $_)) -eq $normalizedSourcePath
}
if ($existingEntry) {
$existingPath = Get-EntrySourcePath -Entry $existingEntry
Write-Warning "A redirection entry for '$existingPath' already exists."
Write-Warning "Existing redirect_url: $($existingEntry.redirect_url)"
exit 1
}

# Create new redirection entry using source_path_from_root (preferred)
$newEntry = [PSCustomObject]@{
source_path_from_root = $sourcePathWithRoot
redirect_url = $RedirectUrl
}

# Convert redirections to a list for easier manipulation
$redirectionsList = [System.Collections.ArrayList]@($jsonContent.redirections)

# Find the correct position to insert (alphabetically by normalized path)
$insertIndex = 0
for ($i = 0; $i -lt $redirectionsList.Count; $i++) {
$existingNormalizedPath = Get-NormalizedPath -Path (Get-EntrySourcePath -Entry $redirectionsList[$i])
if ($existingNormalizedPath -gt $normalizedSourcePath) {
$insertIndex = $i
break
}
$insertIndex = $i + 1
}

# Insert the new entry at the correct position
$redirectionsList.Insert($insertIndex, $newEntry)

# Update the JSON object
$jsonContent.redirections = $redirectionsList.ToArray()

# Convert back to JSON with proper formatting
$jsonOutput = $jsonContent | ConvertTo-Json -Depth 10

# Write the updated JSON back to the file
$jsonOutput | Set-Content -Path $redirectionFilePath -Encoding UTF8

Write-Host ""
Write-Host "Successfully added redirection entry:" -ForegroundColor Green
Write-Host " Source: $sourcePathWithRoot" -ForegroundColor White
Write-Host " Redirect to: $RedirectUrl" -ForegroundColor White
Write-Host " Inserted at index: $insertIndex" -ForegroundColor Gray
Write-Host ""
Write-Host "File updated: $redirectionFilePath" -ForegroundColor Green

}
catch {
Write-Error "An error occurred: $_"
exit 1
}
42 changes: 42 additions & 0 deletions .github/skills/sort-redirects/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
---
name: sort-redirects
description: Sorts redirect entries in Open Publishing redirection JSON files alphabetically by path. Use after adding redirects or when the file becomes unsorted.
---

# Sort Redirects

Sort redirect entries in Open Publishing redirection JSON files alphabetically by path. This ensures consistency and makes the redirect files easier to maintain.

## When to Use

- After adding redirect entries to a JSON file
- When the redirect file has become unsorted
- After merging branches that may have caused unsorted entries

## Steps

1. **Identify the redirection file** - Determine which `.openpublishing.redirection.*.json` file needs sorting.
2. **Run the sort script** - Use the `sort-redirects.ps1` script with the file path.

## Scripts

### sort-redirects.ps1

Sorts all entries in the JSON file alphabetically by path (ignoring leading `/` for `source_path_from_root`). Handles both `source_path_from_root` and `source_path` properties.

Location (relative to this skill file): `./scripts/sort-redirects.ps1`

| Parameter | Required | Description |
|-----------|----------|-------------|
| `RedirectionFile` | Yes | The path to a redirection JSON file (e.g., `.openpublishing.redirection.csharp.json`) |

**Example:**

```powershell
.\scripts\sort-redirects.ps1 -RedirectionFile ".openpublishing.redirection.csharp.json"
```

## Important Notes

- The script preserves all existing redirect entries, only changing their order.
- Sorting is case-sensitive and alphabetical by the normalized path (without leading `/`).
Loading
Loading