Skip to content

HotReload fails to apply on the second attempt when changing default parameter in an anonymous delegates #79783

@LittleLittleCloud

Description

@LittleLittleCloud

Version Used: Can be reproduced on the latest VS main.

Steps to Reproduce:

  1. Create a console app and paste the following code into program.cs
// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");


await TestFunctionAsync((int a = 3, int b = 0) => a + b, 4, 5);

async Task TestFunctionAsync(Delegate func, params object[] args)
{
    while (true)
    {
        await Task.Delay(1000);

        // invoke delegate if the first two arguments are integers
        if (args.Length >= 2 && args[0] is int && args[1] is int)
        {
            Console.WriteLine("Invoking function with integer arguments.");
            var res = func.DynamicInvoke(args);
            Console.WriteLine($"Result: {res}");
        }
        else
        {
            Console.WriteLine("Skipping invocation due to non-integer arguments.");
        }
    }
}
  1. change the default value for b from 0 to 10 and apply hotreload (first attempt and hotreload applies successfully)
  2. then change the default value for b from 10 to 20 and apply hotreload (second attempt and hotreload fails)

Error log from hotreload panel

Project summary for 'C:\Users\xiaoyuz\source\repos\ConsoleApp8\ConsoleApp8\ConsoleApp8.csproj': ValidChanges
11:06:58.56 Emitting update of 'C:\Users\xiaoyuz\source\repos\ConsoleApp8\ConsoleApp8\ConsoleApp8.csproj'
11:06:58.56 Error Exception while emitting update: System.InvalidOperationException: Unexpected value '<>f__AnonymousDelegate1<T1, T2, TResult>' of type 'Microsoft.CodeAnalysis.CSharp.Symbols.AnonymousTypeManager+AnonymousDelegateTemplateSymbol'
   at Microsoft.CodeAnalysis.Emit.SymbolMatcher.<MapAnonymousDelegatesWithIndexedNames>b__9_0(AnonymousTypeValue value)
   at System.Collections.Immutable.ImmutableArray.CreateRange[TSource,TResult](ImmutableArray`1 items, Func`2 selector)
   at Microsoft.CodeAnalysis.Emit.SymbolMatcher.MapAnonymousDelegatesWithIndexedNames(IReadOnlyDictionary`2 anonymousDelegates)
   at Microsoft.CodeAnalysis.Emit.SymbolMatcher.MapBaselineToCompilation(EmitBaseline baseline, Compilation targetCompilation, CommonPEModuleBuilder targetModuleBuilder, IReadOnlyDictionary`2 mappedSynthesizedMembers, IReadOnlyDictionary`2 mappedDeletedMembers)
   at Microsoft.CodeAnalysis.CSharp.Emit.EmitHelpers.MapToCompilation(CSharpCompilation compilation, PEDeltaAssemblyBuilder moduleBeingBuilt)
   at Microsoft.CodeAnalysis.Compilation.SerializeToDeltaStreams(CommonPEModuleBuilder moduleBeingBuilt, DefinitionMap definitionMap, Stream metadataStream, Stream ilStream, Stream pdbStream, ArrayBuilder`1 updatedMethods, ArrayBuilder`1 changedTypes, DiagnosticBag diagnostics, Func`2 testSymWriterFactory, String pdbFilePath, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.CSharp.Emit.EmitHelpers.EmitDifference(CSharpCompilation compilation, EmitBaseline baseline, IEnumerable`1 edits, Func`2 isAddedSymbol, Stream metadataStream, Stream ilStream, Stream pdbStream, EmitDifferenceOptions options, CompilationTestData testData, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.Compilation.EmitDifference(EmitBaseline baseline, IEnumerable`1 edits, Func`2 isAddedSymbol, Stream metadataStream, Stream ilStream, Stream pdbStream, EmitDifferenceOptions options, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.EditAndContinue.EditSession.EmitSolutionUpdateAsync(Solution solution, ActiveStatementSpanProvider solutionActiveStatementSpanProvider, UpdateId updateId, ImmutableDictionary`2 runningProjects, CancellationToken cancellationToken)
11:07:00.01 Error C:\Users\xiaoyuz\source\repos\ConsoleApp8\ConsoleApp8\ConsoleApp8.csproj (line 1): error ENC1002: Cannot apply changes -- unexpected error: 'Cannot apply changes -- unexpected error: '''
11:07:00.01 ConsoleApp8 14: Error C:\Users\xiaoyuz\source\repos\ConsoleApp8\ConsoleApp8\ConsoleApp8.csproj(0,0,0,0): Cannot apply changes -- unexpected error: 'Cannot apply changes -- unexpected error: '''
11:07:00.01 ConsoleApp8 14: Error Errors found in application: 

Diagnostic Id:

Metadata

Metadata

Assignees

Type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions