.NET Coreとは
.NET CoreはMicrosoftが開発を進めているオープンソースの汎用開発フレームワークです。
11月に発表予定の.NET5のベースになるフレームワークです。
#.NET Coreに移行するメリット#
- マルチプラットフォームに対応できる
- 最新技術が早く実装される
.NETのCore問題点
- .NET Frameworkとメソッド、クラスの構成が変わっている。
- .NET CoreのFormアプリケーションでFormデザイナに対応していない
- 実装されていない機能がある(実装する予定すらなくなっているものもある)
このように移行には問題があります
特に最後の実装されていない機能がある点について詳しく書いていこうと思います。
移行しようとしてみた
私は今自作言語をC#で開発しています。
そのため、マルチプラットフォームに対応していたほうが多くのメリットがあります。
なので.NET Frameworkで書いた動的コード生成のプログラムの構文を.NET Coreで書いてみました。
コードについてはこちらの記事を使いました。
これをコピペしたらこんな問題が発生しました。
エラーを一づつ見てみましょう
一つ目のエラー CS1061エラー
アセンブリ参照が不足しているという問題です。
これについてはAppDomainを対応しないといっていたので仕方ありません。
なのでGoogleで
DefineDynamicAssembly
と調べてみました。
するとこちらのサイトで
AssemblyBuilder.DefineDynamicAssemblyメソッドを代わりに使えるようです。
これで一つ目のエラーは解消しました。
二つ目のエラー CS0117
これはAssemblyBuilderAccessにSaveがないということです。これについて調べるとこちらのサイトが見つかりました。
その結果残念なことがわかりました。
.NET CoreではRunとRunAndCollectしかありません。
つまり保存することができないのです
2020/5/5時点で.NET CoreのSystem.Reflection.Emitでは動的に実行ファイルの生成ができないということです。
これについてはどうすることもできません。
その他のエラー
そのほかのエラーは二つ目のエラーが原因となっているものと、
変数名の変更といった最悪消してしまってもよい機能ですので、割愛します。
#最後に#
このように.NET Coreは実装が終わったといっておりますが、実際には実装されていない機能があり.NET Frameworkでしかできないことがあります。
なので11月にリリースされる.NET5では実装されることを祈ります。
また、これを使うとできるよーって言う方法がありましたらコメントお願いします。
#追記#
System.Reflection.Emitの動的コード生成ができませんと説明しましたが
現在開発中のようですので.NET8以降で追加される可能性があるようです。
また、.NET Core限定でMetadataBuilderというもので動的コード生成できるようなので、そちらを使うのことも可能なようです。
私が、使い方を理解できれば記事にするかもしてません。