EventListeners are never invoked in `dotnet run app.cs`
- Dominant language
- C#
- Stars
- 3.2k
- Forks
- 1.3k
- PR merge metrics
- PR metrics pending
Description
### Description
When a `dotnet run app.cs` application that uses an `EventListener` is executed, nothing is ever recorded to that listener.
### Reproduction Steps
Create a new C# "console app" solution using top-level statements. Replace the contents of `Program.cs` with the below. Build the solution so that an executable is generated.
```csharp
using System.Collections.Concurrent;
using System.Diagnostics.Tracing;
using EventSourceEnumerator eventSourceEnumerator = new();
using HttpClient client = new();
await client.GetAsync("https://example.com");
Console.WriteLine($"Number of events recorded: {eventSourceEnumerator.Events.Count}");
// borrowed from https://www.meziantou.net/listing-all-available-etw-events-in-a-dotnet-application.htm
internal sealed class EventSourceEnumerator : EventListener
{
public ConcurrentDictionary> Events { get; } = new();
public EventSourceEnumerator()
{
EventSourceCreated += OnEventSourceCreated;
EventWritten += OnEventWritten;
}
private void OnEventWritten(object? sender, EventWrittenEventArgs e)
{
var events = Events[e.EventSource.Name];
if (events != null)
{
if (!events.ContainsKey(e.EventId))
{
events.TryAdd(e.EventId, new EventInfo(e.EventId, e.EventName, e.Level, e.PayloadNames?.ToArray() ?? Array.Empty()));
}
}
}
private void OnEventSourceCreated(object? sender, EventSourceCreatedEventArgs e)
{
if (e.EventSource is null)
return;
if (!Events.ContainsKey(e.EventSource.Name))
{
EnableEvents(e.EventSource, EventLevel.LogAlways);
Events.TryAdd(e.EventSource.Name, new ConcurrentDictionary());
}
}
}
internal sealed record EventInfo(int Id, string? Name, EventLevel Level, string[] PayloadNames);
```
### Expected behavior
Output should be
`Number of events recorded: 15`
in both cases.
### Actual behavior
Correct:
```
> path\to\solution\directory\bin\Debug\net10.0\Program.exe
Number of events recorded: 15
```
Incorrect:
```
> dotnet run --file path\to\solution\directory\Program.cs
Number of events recorded: 0
```
### Regression?
N/A, `dotnet run app.cs` is new in .NET 10 which is current at the time of writing.
### Known Workarounds
None.
### Configuration
```
> dotnet --info
.NET SDK:
Version: 10.0.103
Commit: c2435c3e0f
Workload version: 10.0.100-manifests.c992be6d
MSBuild version: 18.0.11+c2435c3e0
Runtime Environment:
OS Name: Windows
OS Version: 10.0.26100
OS Platform: Windows
RID: win-x64
Base Path: C:\Program Files\dotnet\sdk\10.0.103\
```
### Other information
_No response_
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.