[mono][hot reload] MethodBase.GetParameters on added method causes a crash #77512

Description

@lambdageek

Description

Seen when adding a new event handler with in an Android MAUI app after adding a new XAML button.

Crash stack trace: https://gist.github.com/lambdageek/7055193d9078cbe48fce72f0d3675b3c

Reproduction Steps

  1. Create a new MAUI app and run it with debugging on Android (probably ios, too).
  2. Add a new <Button> to the XAML with the tab-completed "Button_Clicked" event handler
  3. Wait for the XAML change to apply
  4. hit the "Apply Changes" VS button to apply the C# changes
  5. Crash * Assertion at /__w/1/s/src/mono/mono/metadata/metadata.c:1306, condition 'idx >= 0' not met

Expected behavior

Change is applied and the new event handler is usable

Actual behavior

We hit an assertion

Regression?

No

Known Workarounds

restart the app

Configuration

.NET 7 RC2
VS 17.4 Preview

Other information

From the stack trace, it's crashing when we're trying to call MethodBase.GetParameters. the param field on the added method is 0. (method params are added with the AddParam EnC function code, and the param field on the MethodDef is 0)

Related AzDo ticket https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1567043

Metadata

Metadata

Assignees

Labels

area-EnC-monoHot Reload for WebAssembly, iOS/Android, etc

Type

No type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

    , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
     blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
    }
    } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
    })();
    (function(){
    try {
    var __m = "github.com";
    var __re = new RegExp('^' + "github\\.com" + '
    
    Skip to content

    [mono][hot reload] MethodBase.GetParameters on added method causes a crash #77512

    Description

    @lambdageek

    Description

    Seen when adding a new event handler with in an Android MAUI app after adding a new XAML button.

    Crash stack trace: https://gist.github.com/lambdageek/7055193d9078cbe48fce72f0d3675b3c

    Reproduction Steps

    1. Create a new MAUI app and run it with debugging on Android (probably ios, too).
    2. Add a new <Button> to the XAML with the tab-completed "Button_Clicked" event handler
    3. Wait for the XAML change to apply
    4. hit the "Apply Changes" VS button to apply the C# changes
    5. Crash * Assertion at /__w/1/s/src/mono/mono/metadata/metadata.c:1306, condition 'idx >= 0' not met

    Expected behavior

    Change is applied and the new event handler is usable

    Actual behavior

    We hit an assertion

    Regression?

    No

    Known Workarounds

    restart the app

    Configuration

    .NET 7 RC2
    VS 17.4 Preview

    Other information

    From the stack trace, it's crashing when we're trying to call MethodBase.GetParameters. the param field on the added method is 0. (method params are added with the AddParam EnC function code, and the param field on the MethodDef is 0)

    Related AzDo ticket https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1567043

    Metadata

    Metadata

    Assignees

    Labels

    area-EnC-monoHot Reload for WebAssembly, iOS/Android, etc

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
      Skip to content

      [mono][hot reload] MethodBase.GetParameters on added method causes a crash #77512

      Description

      @lambdageek

      Description

      Seen when adding a new event handler with in an Android MAUI app after adding a new XAML button.

      Crash stack trace: https://gist.github.com/lambdageek/7055193d9078cbe48fce72f0d3675b3c

      Reproduction Steps

      1. Create a new MAUI app and run it with debugging on Android (probably ios, too).
      2. Add a new <Button> to the XAML with the tab-completed "Button_Clicked" event handler
      3. Wait for the XAML change to apply
      4. hit the "Apply Changes" VS button to apply the C# changes
      5. Crash * Assertion at /__w/1/s/src/mono/mono/metadata/metadata.c:1306, condition 'idx >= 0' not met

      Expected behavior

      Change is applied and the new event handler is usable

      Actual behavior

      We hit an assertion

      Regression?

      No

      Known Workarounds

      restart the app

      Configuration

      .NET 7 RC2
      VS 17.4 Preview

      Other information

      From the stack trace, it's crashing when we're trying to call MethodBase.GetParameters. the param field on the added method is 0. (method params are added with the AddParam EnC function code, and the param field on the MethodDef is 0)

      Related AzDo ticket https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1567043

      Metadata

      Metadata

      Assignees

      Labels

      area-EnC-monoHot Reload for WebAssembly, iOS/Android, etc

      Type

      No type

      Projects

      No projects

        Milestone

        Relationships

        None yet

        Development

        No branches or pull requests

        Issue actions

        , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
        Skip to content

        [mono][hot reload] MethodBase.GetParameters on added method causes a crash #77512

        Description

        @lambdageek

        Description

        Seen when adding a new event handler with in an Android MAUI app after adding a new XAML button.

        Crash stack trace: https://gist.github.com/lambdageek/7055193d9078cbe48fce72f0d3675b3c

        Reproduction Steps

        1. Create a new MAUI app and run it with debugging on Android (probably ios, too).
        2. Add a new <Button> to the XAML with the tab-completed "Button_Clicked" event handler
        3. Wait for the XAML change to apply
        4. hit the "Apply Changes" VS button to apply the C# changes
        5. Crash * Assertion at /__w/1/s/src/mono/mono/metadata/metadata.c:1306, condition 'idx >= 0' not met

        Expected behavior

        Change is applied and the new event handler is usable

        Actual behavior

        We hit an assertion

        Regression?

        No

        Known Workarounds

        restart the app

        Configuration

        .NET 7 RC2
        VS 17.4 Preview

        Other information

        From the stack trace, it's crashing when we're trying to call MethodBase.GetParameters. the param field on the added method is 0. (method params are added with the AddParam EnC function code, and the param field on the MethodDef is 0)

        Related AzDo ticket https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1567043

        Metadata

        Metadata

        Assignees

        Labels

        area-EnC-monoHot Reload for WebAssembly, iOS/Android, etc

        Type

        No type

        Projects

        No projects

          Milestone

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
          Skip to content

          [mono][hot reload] MethodBase.GetParameters on added method causes a crash #77512

          Description

          @lambdageek

          Description

          Seen when adding a new event handler with in an Android MAUI app after adding a new XAML button.

          Crash stack trace: https://gist.github.com/lambdageek/7055193d9078cbe48fce72f0d3675b3c

          Reproduction Steps

          1. Create a new MAUI app and run it with debugging on Android (probably ios, too).
          2. Add a new <Button> to the XAML with the tab-completed "Button_Clicked" event handler
          3. Wait for the XAML change to apply
          4. hit the "Apply Changes" VS button to apply the C# changes
          5. Crash * Assertion at /__w/1/s/src/mono/mono/metadata/metadata.c:1306, condition 'idx >= 0' not met

          Expected behavior

          Change is applied and the new event handler is usable

          Actual behavior

          We hit an assertion

          Regression?

          No

          Known Workarounds

          restart the app

          Configuration

          .NET 7 RC2
          VS 17.4 Preview

          Other information

          From the stack trace, it's crashing when we're trying to call MethodBase.GetParameters. the param field on the added method is 0. (method params are added with the AddParam EnC function code, and the param field on the MethodDef is 0)

          Related AzDo ticket https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1567043

          Metadata

          Metadata

          Assignees

          Labels

          area-EnC-monoHot Reload for WebAssembly, iOS/Android, etc

          Type

          No type

          Projects

          No projects

            Milestone

            Relationships

            None yet

            Development

            No branches or pull requests

            Issue actions

            , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
            Skip to content

            [mono][hot reload] MethodBase.GetParameters on added method causes a crash #77512

            Description

            @lambdageek

            Description

            Seen when adding a new event handler with in an Android MAUI app after adding a new XAML button.

            Crash stack trace: https://gist.github.com/lambdageek/7055193d9078cbe48fce72f0d3675b3c

            Reproduction Steps

            1. Create a new MAUI app and run it with debugging on Android (probably ios, too).
            2. Add a new <Button> to the XAML with the tab-completed "Button_Clicked" event handler
            3. Wait for the XAML change to apply
            4. hit the "Apply Changes" VS button to apply the C# changes
            5. Crash * Assertion at /__w/1/s/src/mono/mono/metadata/metadata.c:1306, condition 'idx >= 0' not met

            Expected behavior

            Change is applied and the new event handler is usable

            Actual behavior

            We hit an assertion

            Regression?

            No

            Known Workarounds

            restart the app

            Configuration

            .NET 7 RC2
            VS 17.4 Preview

            Other information

            From the stack trace, it's crashing when we're trying to call MethodBase.GetParameters. the param field on the added method is 0. (method params are added with the AddParam EnC function code, and the param field on the MethodDef is 0)

            Related AzDo ticket https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1567043

            Metadata

            Metadata

            Assignees

            Labels

            area-EnC-monoHot Reload for WebAssembly, iOS/Android, etc

            Type

            No type

            Projects

            No projects

              Milestone

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
              Skip to content

              [mono][hot reload] MethodBase.GetParameters on added method causes a crash #77512

              Description

              @lambdageek

              Description

              Seen when adding a new event handler with in an Android MAUI app after adding a new XAML button.

              Crash stack trace: https://gist.github.com/lambdageek/7055193d9078cbe48fce72f0d3675b3c

              Reproduction Steps

              1. Create a new MAUI app and run it with debugging on Android (probably ios, too).
              2. Add a new <Button> to the XAML with the tab-completed "Button_Clicked" event handler
              3. Wait for the XAML change to apply
              4. hit the "Apply Changes" VS button to apply the C# changes
              5. Crash * Assertion at /__w/1/s/src/mono/mono/metadata/metadata.c:1306, condition 'idx >= 0' not met

              Expected behavior

              Change is applied and the new event handler is usable

              Actual behavior

              We hit an assertion

              Regression?

              No

              Known Workarounds

              restart the app

              Configuration

              .NET 7 RC2
              VS 17.4 Preview

              Other information

              From the stack trace, it's crashing when we're trying to call MethodBase.GetParameters. the param field on the added method is 0. (method params are added with the AddParam EnC function code, and the param field on the MethodDef is 0)

              Related AzDo ticket https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1567043

              Metadata

              Metadata

              Assignees

              Labels

              area-EnC-monoHot Reload for WebAssembly, iOS/Android, etc

              Type

              No type

              Projects

              No projects

                Milestone

                Relationships

                None yet

                Development

                No branches or pull requests

                Issue actions

                , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
                Skip to content

                [mono][hot reload] MethodBase.GetParameters on added method causes a crash #77512

                Description

                @lambdageek

                Description

                Seen when adding a new event handler with in an Android MAUI app after adding a new XAML button.

                Crash stack trace: https://gist.github.com/lambdageek/7055193d9078cbe48fce72f0d3675b3c

                Reproduction Steps

                1. Create a new MAUI app and run it with debugging on Android (probably ios, too).
                2. Add a new <Button> to the XAML with the tab-completed "Button_Clicked" event handler
                3. Wait for the XAML change to apply
                4. hit the "Apply Changes" VS button to apply the C# changes
                5. Crash * Assertion at /__w/1/s/src/mono/mono/metadata/metadata.c:1306, condition 'idx >= 0' not met

                Expected behavior

                Change is applied and the new event handler is usable

                Actual behavior

                We hit an assertion

                Regression?

                No

                Known Workarounds

                restart the app

                Configuration

                .NET 7 RC2
                VS 17.4 Preview

                Other information

                From the stack trace, it's crashing when we're trying to call MethodBase.GetParameters. the param field on the added method is 0. (method params are added with the AddParam EnC function code, and the param field on the MethodDef is 0)

                Related AzDo ticket https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1567043

                Metadata

                Metadata

                Assignees

                Labels

                area-EnC-monoHot Reload for WebAssembly, iOS/Android, etc

                Type

                No type

                Projects

                No projects

                  Milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions