以前このブログで紹介した.NET Interactive。
.NET InteractiveがC# のREPLとして便利だった - 窓を作っては壊していた人のブログ
最近.NET WebAssemblyについて調査していて、それに関係する.NET 7から追加されたAttributeを使ったアプリケーションを作れないかなと、この便利なREPLを使って実験を試みています。 試してみた所、6.0.100以降7未満のSDKを読み込んでいるようで、7から追加されたAttributeを含むコードをReflectionなどで舐めていくとAssemblyが見つからずに実行時例外が起こってしまいました。
ということで、今回は.NET 7環境で.NET Interactiveを使うために書き換えを行っていこうと思います。
ビルドする
Try .NET 7 by yamachu · Pull Request #1 · yamachu/interactive · GitHub
このPRに書いてあることだけといえばだけです。
- リポジトリに含まれている
net6.0
をnet7.0
に置換する
これはVSCodeの置換機能を使えば一発なので特に
将来的にキーワードとなる可能性があるため、lowercaseなクラス名などを禁止する CS8981 をcsprojファイルで無視する
また
暗号化関係のクラスはアルゴリズム名を受け取るファクトリメソッドを持っているが、その使用は廃止するから書き換えてくれという SYSLIB0045 をコード書き換えまたはcsprojの書き換えで無視する
- ビルドに使用する.NET SDKを7系に変える
リポジトリrootにある global.json
を適当な値で書き換える
これでビルドが通るので、まずはそれを確認します。
実際に使ってみる
interactive/DEVELOPER-GUIDE.md at main · dotnet/interactive · GitHub
このガイドに沿ってVSCodeの settings.json
を書き換える。
User設定として置くと、他のマシンとSyncしてしまうため、適当なディレクトリをWorkspaceとして、Workspace設定として設定するのが良いと思う。
参考までに設定を載せておく。
{ "dotnet-interactive.kernelTransportArgs": [ "/Users/yk-yamada/Projects/github.com/dotnet/interactive/.dotnet/dotnet", "/Users/yk-yamada/Projects/github.com/dotnet/interactive/artifacts/bin/dotnet-interactive/Debug/net7.0/Microsoft.DotNet.Interactive.App.dll", "[vscode]", "stdio", "--working-dir", "{working_dir}" ], "dotnet-interactive.notebookParserArgs": [ "/Users/yk-yamada/Projects/github.com/dotnet/interactive/.dotnet/dotnet", "/Users/yk-yamada/Projects/github.com/dotnet/interactive/artifacts/bin/dotnet-interactive/Debug/net7.0/Microsoft.DotNet.Interactive.App.dll", "notebook-parser" ] }
これで実験は出来たのですが、追加されたAttributeはPlatform依存のコードだったため結局自分のやりたいことは出来なかったというオチがあったりします。 まあ.NET 7なInteractive環境が出来たので良しとしましょう。