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

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

<img width="300" alt="Screenshot from 2021-10-19 17-28-14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/8767a3a4-97ac-39a3-6790-707a0753bef3.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に設定する**
<img width="300" alt="Screenshot from 2021-10-19 17-56-46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/3c40ef68-8d1e-fdf0-cd4c-258c8fbdceaa.png">
**bootstrapでビルドする**
bootstrapcsprojはEdge.js.CSharp.csprojを参照しています
<img width="300" alt="Screenshot from 2021-10-19 18-23-04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/b6707ffa-6278-58e5-7ea5-c65c1bfc19b8.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

https://github.com/agracio/edge-js
###JS側のEdgejsを実行する
Edgejsを実行するとC#側で書いたデバッグ文が表示されます。
<img width="500" alt="Screenshot from 2021-10-19 18-00-17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/c4603f47-ae2f-3e7f-3e05-6f7994cd0ed0.png">

[C#とNode.jsを連携する その２](https://qiita.com/iota_11/items/98b98bdfcc62dea7a966)へ続く