深入淺出Blazor webassembly之vs code 環境設置過程


1. 安裝了最新的 dot net SDK 6.0.100-preview.3.21202.5

2.  為 VS code 安裝 C#插件, 需要在 v1.23.12 以上版本

3. 建立了blazor wasm 模版項目,  能正常運行起來.

 4. 但發現VS code 的 intellicode 功能失效, 比如代碼導航功能不能使用

 ⒌ 在VS code 中重啟 OmniSharp  , 發現如下報錯.

[info]: OmniSharp.Stdio.Host
        Starting OmniSharp on Windows 6.1.7601.65536 (x64)
[info]: OmniSharp.Services.DotNetCliService
        DotNetPath set to dotnet
[info]: OmniSharp.MSBuild.Discovery.MSBuildLocator Located 2 MSBuild instance(s) 1: Visual Studio Community 2019 16.6.30225.117 16.6.0 - "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin" 2: StandAlone 17.0.0 - "c:\Users\drothy64\.vscode\extensions\ms-dotnettools.csharp-1.23.14\.omnisharp\1.37.15-beta.7\.msbuild\Current\Bin" [info]: OmniSharp.MSBuild.Discovery.MSBuildLocator
        Registered MSBuild instance: Visual Studio Community 2019 16.6.30225.117 16.6.0 - "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin"
[info]: OmniSharp.WorkspaceInitializer
        Invoking Workspace Options Provider: OmniSharp.Roslyn.CSharp.Services.CSharpFormattingWorkspaceOptionsProvider, Order: 0
[info]: OmniSharp.WorkspaceInitializer
        Invoking Workspace Options Provider: OmniSharp.Roslyn.CSharp.Services.Completion.CompletionOptionsProvider, Order: 0
[info]: OmniSharp.WorkspaceInitializer
        Invoking Workspace Options Provider: OmniSharp.Roslyn.CSharp.Services.RenameWorkspaceOptionsProvider, Order: 100
[info]: OmniSharp.WorkspaceInitializer
        Invoking Workspace Options Provider: OmniSharp.Roslyn.CSharp.Services.ImplementTypeWorkspaceOptionsProvider, Order: 110
[info]: OmniSharp.WorkspaceInitializer
        Invoking Workspace Options Provider: OmniSharp.Roslyn.CSharp.Services.BlockStructureWorkspaceOptionsProvider, Order: 140
[info]: OmniSharp.Cake.CakeProjectSystem
        Detecting Cake files in 'c:\Users\drothy64\Desktop\blazor\projects'.
[info]: OmniSharp.Cake.CakeProjectSystem
        Could not find any Cake files
[info]: OmniSharp.MSBuild.ProjectSystem
        Detecting projects in 'c:\Users\drothy64\Desktop\blazor\projects\blazordemo.sln'.
[info]: OmniSharp.MSBuild.ProjectManager
        Queue project update for 'c:\Users\drothy64\Desktop\blazor\projects\blazorDemo1\blazorDemo1.csproj'
[info]: OmniSharp.Script.ScriptProjectSystem
        Detecting CSX files in 'c:\Users\drothy64\Desktop\blazor\projects'.
[info]: OmniSharp.Script.ScriptProjectSystem
        Could not find any CSX files
[info]: OmniSharp.WorkspaceInitializer
        Configuration finished.
[info]: OmniSharp.Stdio.Host
        Omnisharp server running using Stdio at location 'c:\Users\drothy64\Desktop\blazor\projects' on host 7256.
[info]: OmniSharp.MSBuild.ProjectManager
        Loading project: c:\Users\drothy64\Desktop\blazor\projects\blazorDemo1\blazorDemo1.csproj
[fail]: OmniSharp.MSBuild.ProjectManager
        Failed to load project file '{projectFilePath}'.
Microsoft.Build.Exceptions.InvalidProjectFileException: 找不到指定的 SDK“Microsoft.NET.Sdk.BlazorWebAssembly”。  

問題分析:

程序能正常編譯運行, 說明 .net 6 SDK安裝沒有問題,  項目文件也是正常的, 而且可以運行, 不應該會報 InvalidProjectFileException 異常啊.

既然項目文件沒有問題, 會不會是 OmniSharp.MSBuild 的問題呢? 仔細看日志, OmniSharp 找到了兩個 msbuild, 一個是VS code 的C#插件自帶的, 另一個是 VS 2019 16.6 自帶的, 而且 OmniSharp  使用了 VS 2019 16.6 自帶的 msbuild, 可能是 VS 2019 16.6 的msbuild 版本較老, 和 OmniSharp 的roslyn編譯器不兼容.

參考 https://github.com/OmniSharp/omnisharp-roslyn/issues/1700 解決了該問題.

解決方案是: 強制 omnisharp 使用自帶的 msbuild.

具體為:

(1) 新建 C:\Users\{username}\.omnisharp\omnisharp.json  文件

(2) 編輯文件內容如下,  注意替換真實的路徑

更多設置參考 https://github.com/OmniSharp/omnisharp-roslyn/wiki/Configuration-Options

{
    "msbuild": {
        "useBundledOnly": true
    },
    "RoslynExtensionsOptions": {
        "enableAnalyzersSupport": true
    },
    "FormattingOptions": {
        "enableEditorConfigSupport": true
    }
}

或者直接指定msbuild路徑

{
    "MSBuild": {
        "msbuildoverride": {
            "MSBuildPath": "C:\\Users\\{username}\\.vscode\\extensions\\ms-dotnettools.csharp-1.23.14\\.omnisharp\\1.37.15-beta.7\\.msbuild\\Current\\Bin",
            "Name": "OmniSharp MSBuild",
            "PropertyOverrides": {
                "MSBuildExtensionsPath": "C:\\Users\\{username}\\.vscode\\extensions\\ms-dotnettools.csharp-1.23.14\\.omnisharp\\1.37.15-beta.7\\.msbuild"
            }
        }
    }
}

然后重啟 onmisharp 服務,  intellicode 恢復正常.

 

6. VS code 仍然報 Error Acquisition .Net 錯誤 , 這個沒有找到解決方案, 但不影響調試運行, 不用管它

 

7. 在瀏覽器端調試 Blazor 程序

步驟1: 按照正常方式運行 blazor 項目, 不需要在調試模式下.

步驟2.  以啟用調試模式打開 chrome 或edge 瀏覽器(不能使用firefox) , 命令行如下:
      msedge --remote-debugging-port=9222  http://localhost:5000/

      chrome --remote-debugging-port=9222  http://localhost:5000/

使用上面命令后, 瀏覽器會監聽 9222 調試端口, vscode為 blazor 項目已經實現了chrome devtools protocol 協議, 在vs code中開啟項目, 除了會監聽應用正常的http 5000端口外, 還會開啟 63021  端口, 在瀏覽器端的 chrome devtools 會連接 63021 端口.

 

步驟3: 在瀏覽器打開 http://localhost:5000/ 頁面的tab 頁面內, 使用 Shift+Alt+D 進入一個專門的 devtools 界面.

在 devtools 的sources tab頁下, 找到 file:// 節點下會顯示 razor 和 C# 源碼, 還可以設置斷點, 可以watch 變量.

 

 

 

 

 

 

 

 

8. 在VS code 端調試代碼 (未成功)

步驟1: 首先安裝 blazorWasm 調試插件

 

 步驟2: 按 F5 快捷鍵, VS 自動為項目創建 launch.json 文件, 但接下來報如下錯誤.

 

項目結構為:

 

可以確定是 .vscode 目錄應該放在 blazorDemo1 項目之下, 但實際卻和 blazorDemo1 目錄同級. 

VS code 重新打開blazorDemo1 項目, 按F5 就能將 .vscode 目錄建在blazorDemo1 項目之下,  可以看出調試進程全部啟動成功.

但比較悲劇的是, 在VS code中不管如何設置斷點, 都不能在斷點處停下來.

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM