Skip to content

Commit 93fc41f

Browse files
Merge pull request #49448 from dotnet/main
Merge main into live
2 parents 055b352 + 690503f commit 93fc41f

26 files changed

+552
-226
lines changed

.github/prompts/error-consolidation.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ Overall steps:
88
1. Run Copilot search for other existing errors that person may have missed.
99
1. Search for missing errors.
1010

11-
## Add a single existing file into the new consolidated article.
11+
## Add a single existing file into the new consolidated article.
1212

13-
We're going to work through a series of files consolidating errors and warnings related to declaring overloaded operators.
13+
We're going to work through a series of files consolidating errors and warnings related to declaring the `dynamic` type and dynamic binding.
1414

15-
The destination for all these edits is the overloaded-operator-errors.md file. It already contains a skeleton for the final output.
15+
The destination for all these edits is the dynamic-type-and-binding-errors.md file. It already contains a skeleton for the final output.
1616

1717
For each source file I specify in this chat, you'll do the following tasks:
1818

@@ -28,7 +28,7 @@ For each source file I specify in this chat, you'll do the following tasks:
2828

2929
## Search for other related articles that may be missed.
3030

31-
Search all files in the docs/csharp/language-reference/compiler-messages and the docs/csharp/misc folder for any other errors and warnings that involve operator overloading. Give me a list to review for possible additional consolidation. Don't make any edits until the originating user approves.
31+
Search all files in the docs/csharp/language-reference/compiler-messages and the docs/csharp/misc folder for any other errors and warnings that involve the `dynamic` type or dynamic binding. Give me a list to review for possible additional consolidation. Don't make any edits until the originating user approves.
3232

3333
## Final search in roslyn source
3434

@@ -51,7 +51,7 @@ Note that no redirections need to be added for these error codes.
5151

5252
## Build consolidated sections
5353

54-
For all remaining work, all edits will be in the `overloaded-operator-errors.md` file. The final format should mirror the structure of the `preprocessor-errors.md` file. Every H2 is a theme, all anchors are for the theme, not an individual error code.
54+
For all remaining work, all edits will be in the `dynamic-type-and-binding-errors.md` file. The final format should mirror the structure of the `preprocessor-errors.md` file. Every H2 is a theme, all anchors are for the theme, not an individual error code.
5555

5656
To do that, make a new H2 section for the theme. Remove all the H2s for the individual error codes that are part of that theme. Where applicable, the new H2 can include text or examples from the H2s you remove. The new section should include links to language reference articles that discuss the feature or theme.
5757

docs/core/deploying/macos.md

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
---
2+
title: Publish .NET apps for macOS
3+
description: Learn how to publish .NET applications for macOS, including signing, notarization, and app entitlements.
4+
author: agocke
5+
ms.author: angocke
6+
ms.date: 10/22/2025
7+
ms.topic: how-to
8+
ai-usage: ai-assisted
9+
---
10+
11+
# Publish .NET apps for macOS
12+
13+
Publishing .NET applications for macOS requires several additional steps compared to other platforms, due to Apple's security requirements.
14+
15+
## Prerequisites
16+
17+
Before you publish your .NET application for macOS, ensure you have the following:
18+
19+
- **Apple Developer Account**: Needed for code signing and notarization.
20+
- **Xcode Command Line Tools**: Provides `codesign`, `altool`, and other utilities.
21+
- **.NET SDK**: Ensure you have the latest .NET SDK installed.
22+
23+
## Produce your app using .NET SDK
24+
25+
Use one of the methods described in the [.NET application publishing overview](/dotnet/core/deploying/) to produce an application. You can create either a framework-dependent or self-contained application.
26+
27+
## Sign and notarize your app
28+
29+
Use [Apple's developer documentation](https://developer.apple.com/documentation/security/notarizing_macos_software_before_distribution) to sign and notarize the app native binaries. .NET creates a native *apphost* executable as the entry point for your app. This apphost must be signed and, if your app uses special capabilities, it must be assigned the appropriate **entitlements**.
30+
31+
### Entitlements for apps not published as Native AOT
32+
33+
For apps not published as [Native AOT](native-aot/index.md), the `com.apple.security.cs.allow-jit` entitlement is required.
34+
35+
### Entitlements for apps published as Native AOT
36+
37+
For apps published as [Native AOT](native-aot/index.md), no entitlements are required.
38+
39+
### Optional entitlements for debugging and diagnostics
40+
41+
The following entitlements enable additional debugging and diagnostic capabilities:
42+
43+
- **`com.apple.security.get-task-allow`**: Needed for dump collection with `createdump` and `dotnet dump`.
44+
- **`com.apple.security.cs.debugger`**: Needed to attach a debugger to the process.
45+
46+
> [!WARNING]
47+
> Failing to sign and notarize your app might result in the application crashing while executing a restricted operation.

docs/core/tutorials/cli-templates-create-item-template.md

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ title: Create an item template for dotnet new - .NET CLI
33
titleSuffix: ""
44
description: Learn how to create an item template for the dotnet new command. Item templates can contain any number of files.
55
author: adegeo
6-
ms.date: 09/08/2023
6+
ms.date: 10/23/2025
7+
ai-usage: ai-assisted
78
ms.topic: tutorial
89
ms.author: adegeo
910
---
@@ -17,7 +18,7 @@ You can view the completed template in the [.NET Samples GitHub repository](http
1718
> [!TIP]
1819
> **Item** templates aren't shown in the **Add** > **New Item** dialog of Visual Studio.
1920
20-
In this part of the series, you'll learn how to:
21+
In this part of the series, you learn how to:
2122

2223
> [!div class="checklist"]
2324
>
@@ -29,13 +30,11 @@ In this part of the series, you'll learn how to:
2930
3031
## Prerequisites
3132

32-
* [.NET SDK 7.0.100](https://dotnet.microsoft.com/download) or a later version.
33+
- [.NET 9](https://dotnet.microsoft.com/download) or a later version.
3334

34-
The reference article explains the basics about templates and how they're put together. Some of this information is reiterated here.
35+
- The reference article explains the basics about templates and how they're put together. Some of this information is reiterated here.
3536

36-
* Open a terminal and navigate to a folder where you'll store and test the templates.
37-
38-
[!INCLUDE [dotnet6-syntax-note](includes/dotnet6-syntax-note.md)]
37+
- Open a terminal and navigate to a folder where you'll store and test the templates.
3938

4039
## Create the required folders
4140

@@ -54,7 +53,7 @@ parent_folder
5453

5554
## Create an item template
5655

57-
An item template is a specific type of template that contains one or more files. These types of templates are useful when you already have a project and you want to generate another file, like a config file or code file. In this example, you'll create a class that adds an extension method to the string type.
56+
An item template is a specific type of template that contains one or more files. These types of templates are useful when you already have a project and you want to generate another file, like a config file or code file. In this example, you create a class that adds an extension method to the string type.
5857

5958
In your terminal, navigate to the _working\content_ folder and create a new subfolder named _extensions_.
6059

@@ -64,7 +63,7 @@ working
6463
└───extensions
6564
```
6665

67-
Navigate to the _extensions_ folder and create a new file named _StringExtensions.cs_. Open the file in a text editor. This class will provide an extension method named `Reverse` that reverses the contents of a string. Paste in the following code and save the file:
66+
Navigate to the _extensions_ folder and create a new file named _StringExtensions.cs_. Open the file in a text editor. This class provides an extension method named `Reverse` that reverses the contents of a string. Paste in the following code and save the file:
6867

6968
```csharp
7069
namespace System;
@@ -80,7 +79,7 @@ public static class StringExtensions
8079
}
8180
```
8281

83-
Now that the content of the template is finished, the next step is to create the template config.
82+
Now that the content of the template is finished, create the template config.
8483

8584
## Create the template config
8685

@@ -171,7 +170,7 @@ Template options:
171170
Default: StringExtensions
172171
```
173172

174-
Now that you have a valid _.template.config/template.json_ file, your template is ready to be installed. In your terminal, navigate to the _extensions_ folder and run the following command to install the template located at the current folder:
173+
Now that you have a valid _.template.config/template.json_ file, your template is ready to be installed. In your terminal, navigate to the _extensions_ folder and run the following command to install the template located at the current folder:
175174

176175
* **On Windows**: `dotnet new install .\`
177176
* **On Linux or macOS**: `dotnet new install ./`
@@ -192,8 +191,9 @@ Example templates: string extensions stringext [C#]
192191

193192
Now that you have an item template installed, test it.
194193

195-
01. Navigate to the _test_ folder.
196-
01. Create a new console application with `dotnet new console`, which generates a working project you can easily test with the `dotnet run` command.
194+
1. Navigate to the _test_ folder.
195+
196+
1. Create a new console application with `dotnet new console`, which generates a working project you can easily test with the `dotnet run` command.
197197

198198
```dotnetcli
199199
dotnet new console
@@ -211,7 +211,7 @@ Now that you have an item template installed, test it.
211211
Restore succeeded.
212212
```
213213
214-
01. Run the project using the following command.
214+
1. Run the project using the following command.
215215
216216
```dotnetcli
217217
dotnet run
@@ -223,7 +223,7 @@ Now that you have an item template installed, test it.
223223
Hello, World!
224224
```
225225
226-
01. Run `dotnet new stringext` to generate the _StringExtensions.cs_ file from the template.
226+
1. Run `dotnet new stringext` to generate the _StringExtensions.cs_ file from the template.
227227
228228
```dotnetcli
229229
dotnet new stringext
@@ -235,7 +235,7 @@ Now that you have an item template installed, test it.
235235
The template "Example templates: string extensions" was created successfully.
236236
```
237237
238-
01. Change the code in _Program.cs_ to reverse the `"Hello, World!"` string with the extension method provided by the template.
238+
1. Change the code in _Program.cs_ to reverse the `"Hello, World!"` string with the extension method provided by the template.
239239
240240
```csharp
241241
Console.WriteLine("Hello, World!".Reverse());
@@ -257,7 +257,7 @@ Congratulations! You created and deployed an item template with .NET. In prepara
257257
258258
## Uninstall the template
259259
260-
In your terminal, navigate to the _extensions_ folder and run the following command to uninstall the templates located at the current folder:
260+
In your terminal, navigate to the _extensions_ folder and run the following command to uninstall the templates located at the current folder:
261261
262262
* **On Windows**: `dotnet new uninstall .\`
263263
* **On Linux or macOS**: `dotnet new uninstall ./`

docs/core/tutorials/cli-templates-create-project-template.md

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@
22
title: Create a project template for dotnet new
33
description: Learn how to create a project template for the dotnet new command.
44
author: adegeo
5-
ms.date: 09/08/2023
5+
ms.date: 10/23/2025
6+
ai-usage: ai-assisted
67
ms.topic: tutorial
78
ms.author: adegeo
89
---
910

1011
# Tutorial: Create a project template
1112

12-
With .NET, you can create and deploy templates that generate projects, files, even resources. This tutorial is part two of a series that teaches you how to create, install, and uninstall, templates for use with the `dotnet new` command.
13+
With .NET, you can create and deploy templates that generate projects, files, and resources. This tutorial is part two of a series that teaches you how to create, install, and uninstall templates for use with the `dotnet new` command.
1314

1415
> [!TIP]
1516
> The official .NET templates that are shipped with the .NET SDK can be found in the following repositories:
@@ -26,7 +27,7 @@ With .NET, you can create and deploy templates that generate projects, files, ev
2627
>
2728
> You can view the templates that are installed on your machine by running the `dotnet new list` command.
2829
29-
In this part of the series you'll learn how to:
30+
In this part of the series, you learn how to:
3031

3132
> [!div class="checklist"]
3233
>
@@ -38,16 +39,17 @@ In this part of the series you'll learn how to:
3839
3940
## Prerequisites
4041

41-
* Complete [part 1](cli-templates-create-item-template.md) of this tutorial series.
42-
* Open a terminal and navigate to the _working\content_ folder.
42+
- [.NET 9](https://dotnet.microsoft.com/download) or a later version.
4343

44-
[!INCLUDE [dotnet6-syntax-note](includes/dotnet6-syntax-note.md)]
44+
- Complete [part 1](cli-templates-create-item-template.md) of this tutorial series.
45+
46+
- Open a terminal and navigate to the _working\content_ folder.
4547

4648
## Create a project template
4749

4850
Project templates produce ready-to-run projects that make it easy for users to start with a working set of code. .NET includes a few project templates such as a console application or a class library. In this example, you create a new console application project that replaces the standard "Hello World" console output with one that runs asynchronously.
4951

50-
In your terminal, navigate to the _working\content_ folder and create a new subfolder named _consoleasync_. Enter the subfolder and run `dotnet new console` to generate the standard console application. You'll edit the files produced by this template to create a new template.
52+
In your terminal, navigate to the _working\content_ folder and create a new subfolder named _consoleasync_. Enter the subfolder and run `dotnet new console` to generate the standard console application. Edit the files produced by this template to create a new template.
5153

5254
```console
5355
working
@@ -59,7 +61,7 @@ working
5961

6062
## Modify Program.cs
6163

62-
Open up the _Program.cs_ file. The standard console project doesn't asynchronously write to the console output, so let's add that. Change the code to the following and save the file:
64+
Open up the _Program.cs_ file. The standard console project doesn't asynchronously write to the console output, so add that. Change the code to the following and save the file:
6365

6466
```csharp
6567
// See https://aka.ms/new-console-template for more information

docs/core/tutorials/cli-templates-create-template-package.md

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,19 @@
22
title: Create a template package for dotnet new
33
description: Learn how to create a csproj file that builds a template package for the dotnet new command.
44
author: adegeo
5-
ms.date: 09/11/2023
5+
ms.date: 10/23/2025
6+
ai-usage: ai-assisted
67
ms.topic: tutorial
78
ms.author: adegeo
89
---
910

1011
# Tutorial: Create a template package
1112

12-
With .NET, you can create and deploy templates that generate projects, files, and even resources. This tutorial is part three of a series that teaches you how to create, install, and uninstall templates for use with the `dotnet new` command.
13+
With .NET, you can create and deploy templates that generate projects, files, and resources. This tutorial is part three of a series that teaches you how to create, install, and uninstall templates for use with the `dotnet new` command.
1314

1415
You can view the completed template in the [.NET Samples GitHub repository](https://github.com/dotnet/samples/tree/main/core/tutorials/cli-templates-create-item-template).
1516

16-
In this part of the series you'll learn how to:
17+
In this part of the series, you learn how to:
1718

1819
> [!div class="checklist"]
1920
>
@@ -23,16 +24,16 @@ In this part of the series you'll learn how to:
2324
2425
## Prerequisites
2526

26-
* Complete [part 1](cli-templates-create-item-template.md) and [part 2](cli-templates-create-project-template.md) of this tutorial series.
27+
- [.NET 9](https://dotnet.microsoft.com/download) or a later version.
2728

28-
This tutorial uses the two templates created in the first two parts of this tutorial series. You can use a different template as long as you copy the template, as a folder, into the _working\content_ folder.
29+
- Complete [part 1](cli-templates-create-item-template.md) and [part 2](cli-templates-create-project-template.md) of this tutorial series.
2930

30-
* Open a terminal and navigate to the _working_ folder.
31+
This tutorial uses the two templates created in the first two parts of this tutorial series. You can use a different template as long as you copy the template, as a folder, into the _working\content_ folder.
3132

32-
* Install .NET 8 or .NET 9.
33-
* Install the `Microsoft.TemplateEngine.Authoring.Templates` template from the NuGet package feed.
33+
- Open a terminal and navigate to the _working_ folder.
3434

35-
* Run the `dotnet new install Microsoft.TemplateEngine.Authoring.Templates` command from your terminal.
35+
- Install the `Microsoft.TemplateEngine.Authoring.Templates` template from the NuGet package feed.
36+
- Run the `dotnet new install Microsoft.TemplateEngine.Authoring.Templates` command from your terminal.
3637

3738
## Create a template package project
3839

@@ -42,11 +43,11 @@ Template packages are represented by a NuGet package (_.nupkg_) file. And, like
4243

4344
Normally you use a C# project file to compile code and produce a binary. However, the project can also be used to generate a template package. By changing the settings of the _.csproj_, you can prevent it from compiling any code and instead include all the assets of your templates as resources. When this project is built, it produces a template package NuGet package.
4445

45-
The package you're going to generate will include the [item](cli-templates-create-item-template.md) and [project](cli-templates-create-project-template.md) templates previously created.
46+
The package you're going to generate includes the [item](cli-templates-create-item-template.md) and [project](cli-templates-create-project-template.md) templates previously created.
4647

4748
The [Microsoft.TemplateEngine.Authoring.Templates](https://www.nuget.org/packages/Microsoft.TemplateEngine.Authoring.Templates) package contains templates useful for template authoring. To install this package, nuget.org should be available as NuGet feed in the working directory.
4849

49-
01. In the _working_ folder, run the following command to create the template package:
50+
1. In the _working_ folder, run the following command to create the template package:
5051

5152
```dotnetcli
5253
dotnet new templatepack -n "AdatumCorporation.Utility.Templates"

docs/core/tutorials/creating-app-with-plugin-support.md

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -157,16 +157,12 @@ static IEnumerable<ICommand> CreateCommands(Assembly assembly)
157157
{
158158
int count = 0;
159159

160-
foreach (Type type in assembly.GetTypes())
160+
foreach (var type in assembly.GetTypes().Where(t => typeof(ICommand).IsAssignableFrom(t)))
161161
{
162-
if (typeof(ICommand).IsAssignableFrom(type))
162+
if (Activator.CreateInstance(type) is ICommand result)
163163
{
164-
ICommand result = Activator.CreateInstance(type) as ICommand;
165-
if (result != null)
166-
{
167-
count++;
168-
yield return result;
169-
}
164+
count++;
165+
yield return result;
170166
}
171167
}
172168

@@ -194,17 +190,13 @@ Now that the `AppWithPlugin` project has the `PluginLoadContext` type, update th
194190
static Assembly LoadPlugin(string relativePath)
195191
{
196192
// Navigate up to the solution root
197-
string root = Path.GetFullPath(Path.Combine(
198-
Path.GetDirectoryName(
199-
Path.GetDirectoryName(
200-
Path.GetDirectoryName(
201-
Path.GetDirectoryName(
202-
Path.GetDirectoryName(typeof(Program).Assembly.Location)))))));
193+
string root = Path.GetFullPath(
194+
Path.Combine(typeof(Program).Assembly.Location, "..", "..", "..", "..", ".."));
203195

204196
string pluginLocation = Path.GetFullPath(Path.Combine(root, relativePath.Replace('\\', Path.DirectorySeparatorChar)));
205197
Console.WriteLine($"Loading commands from: {pluginLocation}");
206-
PluginLoadContext loadContext = new PluginLoadContext(pluginLocation);
207-
return loadContext.LoadFromAssemblyName(new AssemblyName(Path.GetFileNameWithoutExtension(pluginLocation)));
198+
PluginLoadContext loadContext = new(pluginLocation);
199+
return loadContext.LoadFromAssemblyName(new(Path.GetFileNameWithoutExtension(pluginLocation)));
208200
}
209201
```
210202

0 commit comments

Comments
 (0)