1
0

More than 1 year has passed since last update.

EdgeJsをC#側のソースコードからデバッグする

Last updated at Posted at 2021-10-19

EdgeJsをC#側のソースコードからデバッグする

EdgeJs処理の流れ

場所  処理 処理2
JS側 require('edge-js'); を呼ぶ edge-jsがC#側のbootstrapを呼ぶ
C#側 bootstrapが呼ばれる
C#側 bootstrapが参照しているEdgeCompiler.Dllがbootstrap内にないなら Edge.js.CSharp.csprojを呼びbootstrap内にEdgeCompiler.Dllがを生成する
C#側 bootstrapが参照しているEdgeCompiler.Dllがbootstrap内にあるなら bootstrap内のEdgeCompiler.Dllが参照される

node_modulesに入っているC#のプロジェクトをRiderに追加する

プロジェクト名  場所
bootstrap.csproj node_modules/edge-js/lib/bootstrap/bootstrap.csproj
Edge.js.csproj node_modules/edge-js/src/double/Edge.js/Edge.js.csproj
Edge.js.CSharp.csproj node_modules/edge-js/src/double/Edge.js.CSharp/Edge.js.CSharp.csproj

Screenshot from 2021-10-19 17-28-14.png

EDGE_APP_ROOTを無効にする

process.env.EDGE_APP_ROOTはとりあえず無効にする。

//process.env.EDGE_APP_ROOT = '';

C#側のEdgejsにデバッグ文を書く

EdgeCompiler.csにConsole.writeなどデバッグ文を書きます。

EdgeCompiler.cs 190行付近 ここではEdjsJSに使用できるアセンブリを表示しています

EdgeCompiler.cs
   private bool TryCompile(string source, List<string> references, IDictionary<string, string> compileAssemblies, out string errors, out Assembly assembly)
    {
        assembly = null;
        errors = null;

        foreach (var VARIABLE in compileAssemblies.Keys)
        {
            Console.WriteLine("key   " + VARIABLE);
        }

        foreach (var VARIABLE in compileAssemblies.Values)
        {
            Console.WriteLine("value   " + VARIABLE);
        }

        string projectDirectory = Environment.GetEnvironmentVariable("EDGE_APP_ROOT") ?? Directory.GetCurrentDirectory();

C#側のEdgejsをビルドする

デバッグ文を追加したら、再ビルドします。 

Releaseに設定する
Screenshot from 2021-10-19 17-56-46.png
bootstrapでビルドする
bootstrapcsprojはEdge.js.CSharp.csprojを参照しています
Screenshot from 2021-10-19 18-23-04.png

.NET Coreを使用しており、.NET Core SDKとCLIを使用している場合は、アプリケーションの依存関係を指定するproject.jsonファイル(仕様はこちら)が必要です。この依存関係のリストには、Edge.jsランタイムパッケージと、コードを動的にコンパイルする必要がある場合は、Edge.js.CSharpなど、使用する予定のコンパイラのパッケージも含まれている必要があります。プロジェクトのディレクトリで dotnet restore(依存関係のリストア)と dotnet build(プロジェクトのビルドと依存関係マニフェストの生成)コマンドを実行して、bin/[configuration]/[framework]の下に .deps.json ファイル(bin/Release/netstandard1.6/MyProject.deps.json)を生成しておく必要があります。この.deps.jsonファイルは、ノードが実行される現在の作業ディレクトリにあるか、環境変数EDGE_APP_ROOTを設定してそのディレクトリを指定する必要があります。例えば、c:DotNet\MyProjectディレクトリにあるnetstandard1.6プロジェクトの場合は、以下のように実行します。
set EDGE_APP_ROOT=c:\DotNet\MyProject\bin\Release\netstandard1.6
node app.js

JS側のEdgejsを実行する

Edgejsを実行するとC#側で書いたデバッグ文が表示されます。
Screenshot from 2021-10-19 18-00-17.png

C#とNode.jsを連携する その2へ続く

1
0
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
1
0