###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 |
####EDGE_APP_ROOTを無効にする
process.env.EDGE_APP_ROOTはとりあえず無効にする。
//process.env.EDGE_APP_ROOT = '';
###C#側のEdgejsにデバッグ文を書く
EdgeCompiler.csにConsole.writeなどデバッグ文を書きます。
EdgeCompiler.cs 190行付近 ここではEdjsJSに使用できるアセンブリを表示しています
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に設定する
bootstrapでビルドする
bootstrapcsprojはEdge.js.CSharp.csprojを参照しています
.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#側で書いたデバッグ文が表示されます。