21
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

.NET Frameworkから.NET Coreに移行したくてもできない理由

Last updated at Posted at 2020-05-05

.NET Coreとは

.NET CoreはMicrosoftが開発を進めているオープンソースの汎用開発フレームワークです。
11月に発表予定の.NET5のベースになるフレームワークです。
#.NET Coreに移行するメリット#

  • マルチプラットフォームに対応できる
  • 最新技術が早く実装される

.NETのCore問題点

  • .NET Frameworkとメソッド、クラスの構成が変わっている。
  • .NET CoreのFormアプリケーションでFormデザイナに対応していない
  • 実装されていない機能がある(実装する予定すらなくなっているものもある)

このように移行には問題があります
特に最後の実装されていない機能がある点について詳しく書いていこうと思います。

移行しようとしてみた

私は今自作言語をC#で開発しています。
そのため、マルチプラットフォームに対応していたほうが多くのメリットがあります。
なので.NET Frameworkで書いた動的コード生成のプログラムの構文を.NET Coreで書いてみました。

コードについてはこちらの記事を使いました。
これをコピペしたらこんな問題が発生しました。
スクリーンショット (38).png

エラーを一づつ見てみましょう

一つ目のエラー 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というもので動的コード生成できるようなので、そちらを使うのことも可能なようです。
私が、使い方を理解できれば記事にするかもしてません。

21
12
4

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
21
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?