10

私は、C#クラスのカスタム属性を使用してTypeScript定義とコードファイルを生成するTypeScriptコードジェネレーターを開発しています。

TypeScriptコード生成/ソースファイル分析の2つのオプションを検討しています。

  • コンパイルされたアセンブリに関する考察
  • Roslyn CTP

このツールは、プロパティとメソッドのカスタム属性を使用してTypeScriptファイルを生成します。現在、C#メソッド本体をJavaScriptに変換する予定はありませんが、将来的には変換される可能性があります。そのため、私はRoslynを真剣に検討しています。ただし、TypeScriptクラスのアウトラインを単純に生成するために、リフレクション属性とカスタム属性を使用できると思います。

不思議なんだけど:

a)Roslynは、Reflectionでは不可能な機能を提供しますか?私の理解では、Reflectionではメソッド本体を取得できません。

b)Roslyn CTPライセンスは、オープンソースライセンスの下でツールを配布することを妨げますか?ライセンスを読んだ後、これは私には明らかではありません

4

8 に答える 8

3

私はこれらの行に沿って何かをしました-C#クラスからTypescriptでデータモデルを作成するのに最適です。モデルの基本データを模倣するインターフェイスを備えた単一の AMD モジュールを生成するように構築しました。Generics もサポートし、クラスを更新するための toJS() メソッドと update(data:Interface) メソッドを含む Knockout プロパティを持つクラスを作成します。

全体が 1 つの T4 テンプレートにすぎません。誰かがこれを見つけて興味を持っている場合: http://spabuilder.wordpress.com/2014/07/31/generating-typescript-from-c/

データ注釈を使用している場合は、データ モデルの [KeyAttribute] および [Timespan] 属性も尊重します。

于 2014-08-01T02:17:15.947 に答える
2

私はjsの生成をいじっていましたが、Reflectionがこれに適したツールであることがわかりました。私は基本的に、メタデータが由来するプロジェクトの bin フォルダーにジェネレーターを向けています。必要なすべてのアセンブリを読み込む際に問題が発生する可能性があり、bin フォルダー内のアセンブリのバージョンと、ジェネレーター プロジェクトが参照する同じアセンブリのバージョンに関する警告があります。しかし、これらすべてを乗り越えれば (私は最小限の困難で済みました)、Reflection ははるかに使いやすく、信頼性が高くなります。

Roslyn を使用すると、基本的には c# を解析するだけです。Roslyn はこれを非常にうまく行っていますが、Reflection から切り替えるのをためらっています。リフレクションを使用すると、メタデータをより確実に取得できます。

コントローラー クラスを装飾する RoutePrefixAttribute の Prefix プロパティが必要だとします。C# を解析している場合は、[RoutePrefix("stringliteral")] または [RoutePrefix(constantString)] がある可能性があります。したがって、それがリテラルか定数式かを心配し、次に定数式の値を取得する方法を見つけ、属性にパラメーターを渡すさまざまな方法をすべて心配する必要があります (たとえば、これはコードを壊してください: [RoutePrefix(Prefix="literal")]...

リフレクションを使用して実際のランタイム オブジェクトを処理すると、すべてが簡単になります。素敵な RoutePrefixAttribute オブジェクトがあり、routePrefix.Prefix に移動して、プレフィックスの値を確実に取得できます。

これは、Reflection を使った作業がいかに簡単かを示す一例にすぎません。これは、C# オブジェクトのセットからタイプ セーフな方法でメタデータを収集することと、C# コードからデータをスクレイピングすることの違いです。ただし、非常に優れたスクレイピング ツールを使用します。

編集:この回答を書いて以来、私は弾丸を噛んでRoslynに切り替えました。コツをつかめばかなり強力です。1 つの大きな利点を見つけました。それは、ビジュアル スタジオ プラグインからワークスペースへの参照を取得し、プラグイン内であらゆる種類の操作を簡単に実行できることです。

于 2017-01-10T21:18:24.767 に答える
1

ライセンスは、バイナリを個人的に配布することを禁止しているだけではありませんか? NuGet パッケージから Rosyln CTP NuGet パッケージに依存関係を追加することを禁止するものではありません。個人でビットを配信することはできませんが、NuGet に Roslyn を自動的にプルさせることができます。

したがって、Rosyln のソースまたはバイナリをバージョン管理にチェックインすることは避けてください。

于 2013-12-21T16:16:22.053 に答える
0

Roslyn の Web サイトには、次のことが明確に記載されていません。

現在のライセンスは評価とプレビューのみを目的としており、Roslyn バイナリの再配布は許可されていません。Roslyn API でビルドされたサンプル プロジェクトの共有は許可されていますが、サンプル ユーザーがビルドして実行するには、Roslyn CTP または Roslyn NuGet パッケージがインストールされている必要があります。

于 2013-04-04T20:39:22.260 に答える
0

更新 - 2015 年 7 月

Roslyn はまだ CTP にありますが、GitHub の FAQはもっと的を射ています。

サンプル コードまたは学習目的で、Roslyn DLL を再配布するための推奨される方法は、Roslyn NuGet パッケージを使用することです: [url:Microsoft.CodeAnalysis| http://www.nuget.org/packages/Microsoft.CodeAnalysis] .

そのため、最終製品で DLL を再配布することはまだできないようです。プロジェクトはオープン ソースにする必要があり、ソリューションには NuGet パッケージへの参照が必要です。



元の回答 (2012 年 11 月)

オープンソースで配布できるとは思えません。

6.配布可能なコード. ソフトウェアには、以下の条件に従う場合に開発したプログラムで配布することが許可されているコードが含まれています。

6.c配布の制限配布可能コードのソース コードを変更または配布して、その一部が除外ライセンスの対象となるようにすることはできません。除外ライセンスとは、使用、変更、または配布の条件として、

  • コードをソース コード形式で開示または配布する。またはアイテム
  • 他の人はそれを変更する権利を持っています。

最初は、Roslyn バイナリを含めるだけで実行できるように思えますが、配布可能なコードの定義では、「ソフトウェアにはコードが含まれています...」と明確に記載されており、以降のすべてが参照していると思います。

あなたの他の質問に対して、Roslyn は完全には完成しておらず、まだベータ版です。現在、お客様のニーズに対応できる状態にあるかどうかは正確にはわかりません。これは、数時間いじくり回したいだけかもしれません。.NET で現在許可されている以上の機能があるとは思いません。9 月に最近追加されたものはこちらで、現在実装されていないものはこちらで確認できます。

于 2012-11-09T22:48:48.507 に答える
0

私は現在の Roslyn CTP を使用しません。単純に、2014 年に新しいバージョンが登場し、多くの重大な変更が確実にもたらされるためです。そのため、完全に非推奨のコードになる可能性があります。

(最近、MS チームのメンバーによるブログ投稿がありましたが、残念ながら現在リンクが手元にありません。)

編集
Roslynが商用利用も許可するライセンスを取得する可能性は十分にあります...

于 2013-12-21T16:23:43.650 に答える