serdarciplak / BlazorMonaco

Blazor component for Microsoft's Monaco Editor which powers Visual Studio Code.
https://serdarciplak.github.io/BlazorMonaco/
MIT License
449 stars 100 forks source link

Not working when debugging, but works after publishing and running executable #115

Open jonowilliams26 opened 10 months ago

jonowilliams26 commented 10 months ago

I am using Blazor Monaco in a Blazor Server app and experiencing some weird behaviour. When running in Visual Studio, I am getting errors, but when I publish the app, the package works.

When running the project in Visual Studio Blazor Monaco fails to load and I get the follow exception in the console.

fail: Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost[111]
      Unhandled exception in circuit '3etjGIvbTp7lHvTo_xh410bBhhmS8PskWVf_CDdaXdw'.
      Microsoft.JSInterop.JSException: Could not find 'blazorMonaco.editor.create' ('blazorMonaco' was undefined).
Error: Could not find 'blazorMonaco.editor.create' ('blazorMonaco' was undefined).
    at https://localhost:7074/_framework/blazor.server.js:1:497
    at Array.forEach (<anonymous>)
    at s.findFunction (https://localhost:7074/_framework/blazor.server.js:1:465)
    at E (https://localhost:7074/_framework/blazor.server.js:1:2611)
    at https://localhost:7074/_framework/blazor.server.js:1:3499
    at new Promise (<anonymous>)
    at Ft.beginInvokeJSFromDotNet (https://localhost:7074/_framework/blazor.server.js:1:3480)
    at Ft._invokeClientMethod (https://localhost:7074/_framework/blazor.server.js:1:75072)
    at Ft._processIncomingData (https://localhost:7074/_framework/blazor.server.js:1:72696)
    at Ft.connection.onreceive (https://localhost:7074/_framework/blazor.server.js:1:67009)
         at Microsoft.JSInterop.JSRuntime.InvokeAsync[TValue](Int64 targetInstanceId, String identifier, Object[] args)
         at Microsoft.JSInterop.JSRuntimeExtensions.InvokeVoidAsync(IJSRuntime jsRuntime, String identifier, Object[] args)
         at BlazorMonaco.Helpers.JsRuntimeExt.SafeInvokeAsync(IJSRuntime jsRuntime, String identifier, Object[] args)
         at BlazorMonaco.Editor.Global.Create(IJSRuntime jsRuntime, String domElementId, StandaloneEditorConstructionOptions options, EditorOverrideServices overrideServices, DotNetObjectReference`1 dotnetObjectRef)
         at BlazorMonaco.Editor.StandaloneCodeEditor.OnAfterRenderAsync(Boolean firstRender)
         at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle, ComponentState owningComponentState)

This is my _Host.cshtml

@page "/"
@using Microsoft.AspNetCore.Components.Web
@namespace CalculationSandbox.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <base href="~/" />
    <link href="app.css" rel="stylesheet" />
    <link rel="icon" type="image/png" href="favicon.png"/>
    <component type="typeof(HeadOutlet)" render-mode="ServerPrerendered" />
</head>
<body>
    <component type="typeof(App)" render-mode="ServerPrerendered" />
    <script src="_content/BlazorMonaco/jsInterop.js"></script>
    <script src="_content/BlazorMonaco/lib/monaco-editor/min/vs/loader.js"></script>
    <script src="_content/BlazorMonaco/lib/monaco-editor/min/vs/editor/editor.main.js"></script>
    <script src="_framework/blazor.server.js"></script>
</body>
</html>

However, when I publish the app and run the published executable Blazor Monaco works without any issues. I have tried the following

serdarciplak commented 8 months ago

There was another similar issue about static web assets not being available at the _content/BlazorMonaco/ path. That seems to be related to the app's configuration. The Microsoft doc here has some suggestions which may help.