1

厳密には技術的な観点からです。Roslynは、特定のC2#プロジェクトだけでキックインしてコンパイルするC#の変種 - たとえばC2# - としてmodded、repacked、およびdistributionできますか?

VS2015のインストールごとに1つのRoslynがありますが、複数の言語とコンパイラが並んでいます。 Visual Studioは、編集/コンパイルされたプロジェクトタイプ(またはアイテムタイプ)の定義に基づいて、適切な拡張機能とコンパイラをコンテキストに基づいて起動します。 Visual Studio用の言語を構築する開発者は、それらの定義を開発し、それらは言語とともにVSにインストールされます。

Q1。言語開発者がこれらの(定義、プロジェクト、アイテムのテンプレートなど)を開発すると、Roslynは1つの真のC#/ VB Roslynと並んで別の言語/コンパイラに改造/ブランド化できますか?

Q2。そうでない場合は、ここで技術的な制限はありますか?

Q3。 RoslynのアーキテクチャとVSとの関係が、一般的なサードパーティの言語/コンパイラとは根本的に異なるという制限がある場合、理論的な回避策はありますか?例えば。一般的なサードパーティの言語/コンパイラとまったく同じ方法でVSに収まるようにModled Roslynをラップしますか?

答えて

2

どれくらい修正したいかによって異なります。あなたはそのままコア層を維持する場合は、あなたが考えられるなど、オリジナルの無修正ロザリンコアアセンブリを参照し、新しい言語、ファイル拡張子、プロジェクトの種類をエクスポートし、C#& VBと並んで三ロザリン言語を作成することができ

あなたは思いますRoslynのMicrosoft.*.CSharpプロジェクトを完全に複製する必要があります。

実際には、&のエクスポートを継承するために必要なタイプがあまりにも多いため、内部で(かつ[InternalsVisibleTo]経由でRoslyn自身の他の部分に公開されているため)、実際にはうまくいかないでしょう。

また、Roslynコードベース全体を完全に新しい拡張子セットとしてフォークすることもできます。アセンブリの&名前空間名をすべて元のプロジェクトと並行して読み込むことができるようにする必要があります。また、すべてのGUIDと一意のIDを変更して、VS全体のエクスポートを元の拡張から区別する必要があります。

これは、VS APIが変更されると、多くの作業になります(Roslynのエディタ&プロジェクトシステムのレイヤは、正式にサポートされておらず、変更の可能性が高いAPIを使用してVSに密接に結合されます) 。また、オリジナルの上流のコードベースから名前を変更して変更を取り込むことは容易ではありません。

+0

私がインクリメンタルな機能をC#にしか考えていない場合はどうすればよいですか? C#のスーパーセットバリアント。新しいキーワード(例:アクセス修飾子)を追加したり、ビルド時にC#コード生成を使用してその効果を実装したりしますか?あなたはこのmodded Roslynを標準のC#/ VB Roslynでパッケージ化し、配布し、次に実行できると思いますか?もしそうなら、非常に面白いことが起こる可能性があるからです。 – Mart

+1

@Mart:並行して実行すると、私の2番目の選択肢に記載されている莫大な努力が必要になります。これは非常にサポートされていません。 – SLaks

+0

簡単に実現できるVS内でC#コンパイラのあなたのバージョンを実行したいだけの場合。実際、これはMicrosoft.Net.Compilersのnugetパッケージの機能です。それはcsc.exeを出荷し、.propsファイルに 'CscToolExe'プロパティをオーバーライドします。しかし、これはIDEの機能などでは役に立ちません。 – Tamas

関連する問題