4
2

C#(.NET Core6.0)をx86でVSCodeのビルド実行できるまで コード -532462766 (0xe0434352) で終了の解消

Last updated at Posted at 2024-03-02

はじめに

諸般の事情からVSCodeでC#(.NET Core6.0)をx86ターゲットでビルド・デバッグ実行できるようしたいひとのメモです。.NET Core7.0以降は未確認。Windowsです。

前提条件

Windows11 Pro 22H2
VSCode(Visual Studo Code) 1.86.1
C# 10 dotnet-sdk-6.0.404-win-x64

VSCodeの拡張機能

.NET Install Tool 2.0.2 Microsoft
Base language support for C# 2.18.16 Microsoft

C#環境の構成

最初にC#のプロジェクトを作成してVSCodeを起動します。

C:\developments\vscode\mind7dll>dotnet new console -o cs
テンプレート "コンソール アプリ" が正常に作成されました。

作成後の操作を処理しています...
C:\developments\vscode\mind7dll\cs\cs.csproj で ' dotnet restore ' を実行しています...
  復元対象のプロジェクトを決定しています...
  C:\developments\vscode\mind7dll\cs\cs.csproj を復元しました (150 ms)。
正常に復元されました。

C:\developments\vscode\mind7dll>cd cs
C:\developments\vscode\mind7dll\cs>code .

下記のサンプルソースが生成されています。

Program.cs
// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");

cs.csproj

cs.csprojに

<PlatformTarget>x86</PlatformTarget>

を追加します。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <PlatformTarget>x86</PlatformTarget>
  </PropertyGroup>

</Project>

tasks.json

適当にデバッグ実行しようとすると下記のようなtasks.jsonとlaunch.jsonを生成してくれます。

tasks.json
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "command": "dotnet",
            "type": "process",
            "args": [
                "build",
                "${workspaceFolder}/cs.csproj",
                "/property:GenerateFullPaths=true",
                "/consoleloggerparameters:NoSummary;ForceNoAlign"
            ],
            "problemMatcher": "$msCompile"
        },
        {
            "label": "publish",
            "command": "dotnet",
            "type": "process",
            "args": [
                "publish",
                "${workspaceFolder}/cs.csproj",
                "/property:GenerateFullPaths=true",
                "/consoleloggerparameters:NoSummary;ForceNoAlign"
            ],
            "problemMatcher": "$msCompile"
        },
        {
            "label": "watch",
            "command": "dotnet",
            "type": "process",
            "args": [
                "watch",
                "run",
                "--project",
                "${workspaceFolder}/cs.csproj"
            ],
            "problemMatcher": "$msCompile"
        }
    ]
}

launch.json

launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            // IntelliSense を使用して、C# デバッグに存在する属性を確認します
            // 既存の属性の説明にホバーを使用する
            // 詳細については、https://github.com/dotnet/vscode-csharp/blob/main/debugger-launchjson.md を参照してください
            "name": ".NET Core Launch (console)",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build",
            // ターゲット フレームワークを変更した場合は、プログラム パスを更新するようにしてください。
            "program": "${workspaceFolder}/bin/Debug/net6.0/cs.dll",
            "args": [],
            "cwd": "${workspaceFolder}",
            // 'console' フィールドの詳細については、https://aka.ms/VSCode-CS-LaunchJson-Console を参照してください
            "console": "internalConsole",
            "stopAtEntry": false
        },
        {
            "name": ".NET Core Attach",
            "type": "coreclr",
            "request": "attach"
        }
    ]
}

ビルド実行

VSCodeのメニューからターミナル→タスクの実行を選択します。tasks.jsonの"build"が表示されていますので、それを選択して実行します。

下記のようにターミナルに出力されてビルドは成功します。

*  実行するタスク: C:\Program Files\dotnet\dotnet.exe build C:\developments\vscode\mind7dll\cs/cs.csproj /property:GenerateFullPaths=true /consoleloggerparameters:NoSummary;ForceNoAlign 

MSBuild version 17.3.2+561848881 for .NET
  復元対象のプロジェクトを決定しています...
  復元対象のすべてのプロジェクトは最新です。
  cs -> C:\developments\vscode\mind7dll\cs\bin\Debug\net6.0\cs.dll

下記のようなbinフォルダやobjフォルダが生成されて実行ファイルも生成されたようです。

C:\developments\vscode\mind7dll\cs>tree
C:.
├─.vscode
├─bin
│  └─Debug
│      └─net6.0
│          └─publish
└─obj
    └─Debug
        └─net6.0
            ├─ref
            └─refint

VSCodeの実行とデバッグに「.NET Core Launch (console)」が既定で表示されていますので実行します。VSCodeが一瞬オレンジ色で発火したみたいな感じとなり、コンソール出力は実行されませんでした。

デバッグコンソールには下記が出力されていました。

'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\6.0.27\System.Private.CoreLib.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。
プログラム '[10684] cs.dll' がコード -532462766 (0xe0434352) で終了しました。

コード -532462766 (0xe0434352) で終了

このエラーコードは、.NET アプリケーションで発生することがあり -532462766 (0xe0434352) は、不明なソフトウェア例外を示しているようです。しかし、デバッグ実行してもブレークはしなかったため?の状態でした。

C:\developments\vscode\mind7dll\cs\bin\Debug\net6.0>dir
 C:\developments\vscode\mind7dll\cs\bin\Debug\net6.0 のディレクトリ

2024/03/02  12:52    <DIR>          .
2024/02/28  21:33    <DIR>          ..
2024/03/02  14:12               398 cs.deps.json
2024/03/02  14:49             4,608 cs.dll
2024/03/02  14:49           115,200 cs.exe
2024/03/02  14:49            10,244 cs.pdb
2024/03/02  12:52               147 cs.runtimeconfig.json
2024/03/02  12:52    <DIR>          publish
               5 個のファイル             130,597 バイト

binフォルダには上記のように実行ファイルが生成されていますので、とりあえずコマンドプロンプトから実行してみます。

C:\developments\vscode\mind7dll\cs\bin\Debug\net6.0>cs
You must install .NET to run this application.

App: C:\developments\vscode\mind7dll\cs\bin\Debug\net6.0\cs.exe
Architecture: x86
App host version: 6.0.27
.NET location: Not found

Learn about runtime installation:
https://aka.ms/dotnet/app-launch-failed

Download the .NET runtime:
https://aka.ms/dotnet-core-applaunch?missing_runtime=true&arch=x86&rid=win10-x86&apphost_version=6.0.27

上記の結果から、x86の.NET runtimeを別途インストールしないといけないようですね。確かにインストールしてあるのはdotnet-sdk-6.0.404-win-x64ですが、x86で動かすには別途必要なようです。

前提条件の訂正

2024/03/02時点では下記のサイトより.NET Core6.0がダウンロードできます。

6.0.419が最新でしたので、x86の他x64もダウンロードしてバージョンを揃えました。
dotnet-sdk-6.0.419-win-x64
dotnet-sdk-6.0.419-win-x86

x86ランタイムインストール後のビルド実行

コマンドプロンプトから実行すると、実行できるようになっていました。:tada:

C:\developments\vscode\mind7dll\cs\bin\Debug\net6.0>cs
Hello, World!

VSCodeは一度再起動しましたが、まだダメのようでした。
デバッグコンソールの出力は以前と同じで、まだ「Microsoft.NETCore.App\6.0.27\System.Private.CoreLib.dll' が読み込まれました。」と出力されています。

project.assets.jsonを確認すると6.0.419にはなっていそう。

    "frameworks": {
      "net6.0": {
        "targetAlias": "net6.0",
        "imports": [
          "net461",
          "net462",
          "net47",
          "net471",
          "net472",
          "net48",
          "net481"
        ],
        "assetTargetFallback": true,
        "warn": true,
        "frameworkReferences": {
          "Microsoft.NETCore.App": {
            "privateAssets": "all"
          }
        },
        "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.419\\RuntimeIdentifierGraph.json"
      }
    }
  }

binフォルダとobjフォルダを削除してからデバッグ実行してみましたが
デバッグコンソールの出力は以前と同じです。

このフォルダには6.0.27しかないようでした。

C:\Program Files\dotnet\shared\Microsoft.NETCore.App>dir
 C:\Program Files\dotnet\shared\Microsoft.NETCore.App のディレクトリ

2024/02/15  20:15    <DIR>          .
2024/03/02  15:20    <DIR>          ..
2024/03/02  15:18    <DIR>          6.0.27
               0 個のファイル                   0 バイト

紛らわしいですが、インストーラのバージョンが6.0.419でも、ランタイムバージョンとしては6.0.27のようですね。フォルダもタイムスタンプも本日になっていました。

前記ダウンロードサイトの記述より

SDK 6.0.419
付加済みランタイム
.NET Runtime 6.0.27
ASP.NET Core ランタイム 6.0.27
.NET デスクトップ ランタイム 6.0.27
言語サポート
C# 10.0
F# 6.0
Visual Basic 16.9

コマンドプロンプトからは正常実行されますが、VSCodeからは正常にデバッグ実行できない。この謎をさぐるため、C#のVSCodeエクステンションが生成したタスクのwatchを実行してみます。

 *  実行するタスク: C:\Program Files\dotnet\dotnet.exe watch run --project C:\developments\vscode\mind7dll\cs/cs.csproj 

dotnet watch 🔥 Hot reload enabled. For a list of supported edits, see https://aka.ms/dotnet/hot-reload.
  💡 Press "Ctrl + R" to restart.
dotnet watch 🔧 Building...
  復元対象のプロジェクトを決定しています...
  復元対象のすべてのプロジェクトは最新です。
  cs -> C:\developments\vscode\mind7dll\cs\bin\Debug\net6.0\cs.dll
dotnet watch 🚀 Started
Failed to load the dll from [C:\Program Files\dotnet\host\fxr\6.0.27\hostfxr.dll], HRESULT: 0x800700C1
The library hostfxr.dll was found, but loading it from C:\Program Files\dotnet\host\fxr\6.0.27\hostfxr.dll failed
  - Installing .NET prerequisites might help resolve this problem.
     https://go.microsoft.com/fwlink/?linkid=798306
dotnet watch ❌ Exited with error code -2147450750
dotnet watch ⏳ Waiting for a file to change before restarting dotnet...

デバッグ実行のときだけ、なにかhostfxr.dll(.NET Host Resolver)に問題が生じている模様。

C:\developments\vscode\mind7dll\cs>dir "C:\Program Files\dotnet\host\fxr\6.0.27"
 C:\Program Files\dotnet\host\fxr\6.0.27 のディレクトリ

2024/03/02  15:18    <DIR>          .
2024/03/02  15:18    <DIR>          ..
2024/01/21  22:37           378,656 hostfxr.dll
               1 個のファイル             378,656 バイト

おわりに

デバッグ実行開始にはいたりませんがでしたが、ビルド実行はできるようになりましたので、いったん本記事は終了となります。
下記のタスクをtasks.jsonに追加することで、タスクの実行から実行できます。

tasks.json
        {
            "label": "exec",
            "command": "${workspaceFolder}/bin/debug/net6.0/cs.exe",
            "type": "process",
            "args": [],
            "problemMatcher": []
        },
4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2