LoginSignup
2
2

C#とMind7を混在ビルドする環境をVSCodeで構築

Last updated at Posted at 2024-02-28

はじめに

諸般の流れからVSCodeでMind 8 for WindowsのKernelをデバッグ実行する環境をつくってまいりましたが、どちらかというとそれはCベースな環境でした。今回はその流れに割込みでVSCodeでMind 7.5 for WindowsのアプリケーションソースがMindコンパイラでビルドできる環境に加えてC#のアプリケーションソースがビルド、デバッグ実行できる環境をつくります。その目的はなに?この記事ダレトク?

前提条件

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

VSCodeの拡張機能

.NET Install Tool 2.0.2 Microsoft
Base language support for C# 2.18.16 Microsoft
C/C++ for Visual Studio Code 1.18.5 Microsoft
C/C++ Extension Pack 1.3.0 Microsoft

C/C++のデバッガは直接使わないのですが、Mind7アプリケーションをデバッグ実行で強引にローンチするために流用しています。

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!");

tasks.json

適当にデバッグ実行しようとすると下記のようなtasks.jsonとlaunch.jsonを生成してくれます。これに後でMind7の記述を追記していきます。

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の実行とデバッグに「.NET Core Launch (console)」が既定で表示されていますので実行します。
ターミナルに下記のような出力が表示され

 *  実行するタスク: 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

デバッグコンソールにC#サンプルアプリの実行結果が表示されます。

Hello, World!
プログラム '[7800] cs.dll' がコード 0 (0x0) で終了しました。

Mind7環境の構成

つづいてMind7アプリがビルドできる環境を構成します。下記のサンプルソースファイルを作成します。

hello.src
メインとは
    「Hello, World! by mind7」を 表示して 改行すること。

tasks.json

C#のエクステンションが自動生成したtasks.jsonに下記のコードを追記します。

tasks.json
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "command": "dotnet",          
            //C#が生成した内容略
            "problemMatcher": "$msCompile"
        },
        {
            "label": "mind build",
            "type": "process",
            "command": "C:/mind7/bin/mind.exe",
            "args": [
                "${workspaceFolder}/hello.src",
                "C:/mind7/lib/file"
            ],
            "problemMatcher": []
        },
        {
            "label": "mind launch",
            "type": "process",
            "command": "${workspaceFolder}/hello.exe",
            "args": [
                ],
            "problemMatcher": []
        }
    ]
}
    

ここで、VSCodeのメニューからターミナル→タスクの実行を選択します。下図のようにtasks.jsonの内容が展開されますのでmind buildを選択します。

vscodec22.png

ターミナルに下記のような出力が表示されます。

 *  実行するタスク: C:/mind7/bin/mind.exe C:\developments\vscode\mind7dll\cs/hello.src C:/mind7/lib/file 

日本語プログラミング言語 Mind Version 7.5 for Windows
          Copyright(C) 1985-2004 Scripts Lab. Inc.
          Single user license.  Serial No:750*****
コンパイル中 - 終了
Coping.. C:\mind7\bin\mindexec.exe --> C:\developments\vscode\mind7dll\cs\hello.exe

同じ手順でmind launchを選択するとMind7サンプルアプリの実行結果がターミナルに出力されます。

 *  実行するタスク: C:\developments\vscode\mind7dll\cs/hello.exe  

Hello, World! by mind7

launch.json

しかし、ここではやはりVSCodeの実行とデバッグから実行したい気分です。そこでC#エクステが生成したlaunch.jsonに下記のようなコードを追記してみます。

launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            //C#が生成した内容略        
        },
        {
            "name": "mind7",
            "type": "cppvsdbg",
            "request": "launch",
            "program": "${workspaceFolder}/hello.exe",
            "args": [],
            "console": "integratedTerminal"
        }
    ]
}        

これはつまりMind7アプリのランタイムはCなので、デバッグは実行できないにしても(シンボルファイルありでビルドしておけばもしかしたらCランタイム部分でブレークできるかもしれませんが)とりあえずローンチしてくれるとうれしいなという思惑です。

デバッグ実行開始

VSCodeの実行とデバッグのプルダウンを展開すると「mind7」が表示されていますので実行します。
デバッグコンソールに下記のような出力が表示されました。

Loaded 'C:\developments\vscode\mind7dll\cs\hello.exe'. Module was built without symbols.
Loaded 'C:\Windows\SysWOW64\ntdll.dll'. 
Loaded 'C:\Windows\SysWOW64\kernel32.dll'. 
Loaded 'C:\Windows\SysWOW64\KernelBase.dll'. 
Loaded 'C:\Windows\SysWOW64\advapi32.dll'. 
Loaded 'C:\Windows\SysWOW64\msvcrt.dll'. 
Loaded 'C:\Windows\SysWOW64\sechost.dll'. 
Loaded 'C:\Windows\SysWOW64\bcrypt.dll'. 
Loaded 'C:\Windows\SysWOW64\rpcrt4.dll'. 
The program '[384] hello.exe' has exited with code 0 (0x0).

思惑どおりではあるようです。
ターミナルに下記のような出力が表示されます。:tada:

Hello, World! by mind7
PS C:\developments\vscode\mind7dll\cs>

vscodec23.png

おわりに

今回は構成していませんが、プレタスクにビルドを設定すれば、ソースコードを改修する都度ビルド実行はできそうですね。

2
2
2

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
2
2