2016-12-30 21 views
3

私はlittle libraryを持っています。これはEmittingクラスとメソッドに大いに依存しています。.Net標準を使用したコード生成

管理対象外のものを使用しないため、.Net Standardに移行したいので、どのOSでも簡単に実行できます。しかし、私の解決策でポータビリティチェッカーを実行したとき、私のExpressionジェネレータパーツですべてが正常であることが示されましたが、それはEmitの用途でうぬぼれています。

ここでは、net452,netstandard1.6およびnetstandard2.0の解析があります。

enter image description here

ネット標準でサポートされているか、私はそれに私のライブラリを移植忘れることができ、実行時にクラスを生成するためにいくつかの近代的で推奨される方法があるかどうか私の質問はありますか?

+0

これは、Roslyn、C#6以上のクラスを生成するための推奨される方法です。 C#のスクリプトはそれを使って、スクリプトのテキストからクラスを生成して実行します –

+0

これは[this of duplicate]と見なすことができます(http://stackoverflow.com/questions/39197663/generate-c-sharp-code-with -roslyn-and-net-core) –

+0

@PanagiotisKanavosこの機能は[構築中](https://github.com/dotnet/roslyn/issues/5561)なので、Rosylinはビルド時にコードを生成できません。 –

答えて

1

まあ、私は、今日.Net Standardで、我々は残りのための発現スタンドアロンのデリゲートを生成するために木や昔ながらのEmitSystem.Reflection.EmitSystem.Reflection.Emit.Lightweight名前空間で使用可能)を持っていることがわかりました。残念なことに、私は前者と後者の間の橋を失いました(私はLambdaExpression.CompileToMethodsee questionを意味します)。

したがって、実行時に型を生成する必要がないかぎり(たとえば、オンザフライでインターフェイスを実装するなど)、フルデスクトップ.Netとほぼ同じコード生成能力があります。この場合、手動でILを放出する必要があります。

+0

私はすべてのフレームワークとコンパイル時に動作するRoslynベースのソリューションに取り組んでいます。それはさらに強力です。したがって、式を生成する必要がある場合は、それらを使用してください。クラス生成の場合は、Roslyn APIを使用してビルド中に生成するプラグインを作成する方が簡単です。詳細については、[このプロジェクト(私のものではなく、ただ使っています)](https://github.com/AArnott/CodeGeneration.Roslyn)を参照してください。 –

関連する問題