10

残念ながら、C# では追加のユーザー定義構文を使用できません。しかし、ビジュアル スタジオの onbuild-event を利用することで、この制限を超えることができるかどうか疑問に思っていました。

実際の C# コードに簡単に変換できるシンタックス シュガーがあるとします。C# プロジェクトがビルドされる直前に、この新しい構文を含む cs ドキュメントを有効な cs ドキュメントに自動的に変換すると、プロジェクトは正常にビルドされます。全体的に、これは C# 言語を拡張したかのように機能します。これは、非公式の構文を含む無効な cs ドキュメントから始めたにもかかわらず、コンパイルされたためです。

この翻訳は永続的であるなど、これにはいくつかの問題があることを認識しています。これは、元の cs を復元することで回避できる可能性があります (デバッグが終了した後に復元する必要があります。そうしないと、IDE 機能の一部が失われます)。しかし、これらは二次的な問題です。

このアイデアについてどう思うか教えてください。これは可能ですか?もしそうなら、誰かが私をいくつかの有用なチュートリアルに案内して、これを達成できますか? 具体的には、onbuild イベントへのタップです。MSDN を検索しましたが、トピック (http://msdn.microsoft.com/en-us/library/hthab0h8.aspx) は役に立ちませんでした。

4

3 に答える 3

11

あなたが何をしようとしているのかについて私は十分に知らないので、これが良い考えであるかどうかは言いません. ただし、これをお勧めします。あなたが提案しているのは、ビルド プロセス中に通常の cs に変換される、ある種の「拡張 C#」ソース コード ファイルを用意することです。

個人的には、まず C# 言語を "拡張" しているという考えから脱却することで、これを明確にしたいと思います。代わりに、たまたま構文的に C# に似ている新しい言語を定義するものと考えます (私は推測します)。Visual Studio が言語を C# としてコンパイルしようとしないように、別のファイル拡張子を使用します。(多分 .csx? 人々は文字 x を追加するのが大好きですよね?)

Visual Studio は、この種のことを他の方法で既に行っていますが、それほど明白ではないかもしれません。プロジェクトにリソース ファイルを追加すると、通常、Visual Studio には動的に生成された "designer.cs" が含まれ、.resx ファイルの内容に基づいてコードが生成されます。.resx ファイルのプロパティを見ると、「カスタム ツール」プロパティの値が「ResXFileCodeGenerator」であることがわかります。理論的には、独自のジェネレーターを実装して、言及した翻訳ステップを実行できるはずです。実際、あなたが言ったように、この翻訳は一度限りのものである必要はありません。翻訳プロセスによって新しいファイルが生成されますが、元のファイルはそのまま残ります。元のファイルを変更すると、Visual Studio によって自動生成されたファイルが再生成されます。

カスタム ジェネレーターを自分で実装しようとしたことはありませんが、次の記事が関連していると思います: 単一ファイル ジェネレーターの実装および単一ファイル ジェネレーターの登録

.csproj ファイルには、次のようなものが含まれます。

<Content Include="Example.csx">
  <Generator>ExtendedCSharpCodeGenerator</Generator>
  <LastGenOutput>Example.cs</LastGenOutput>
</Content>
<Compile Include="Example.cs">
  <AutoGen>True</AutoGen>
  <DesignTime>True</DesignTime>
  <DependentUpon>Example.csx</DependentUpon>
</Compile>

ここで、Example.csx は拡張構文を含むソース コード ファイルであり、Example.cs は Example.csx を通常の C# コードに変換した結果の出力です。

于 2010-10-20T20:37:30.983 に答える
3

あなたが話していることは、Visual Studio の T4 テンプレートにとって完璧なタスクのようです。

http://msdn.microsoft.com/en-us/library/bb126445.aspx

好きなように定義できます。特定の形式のテキスト ファイル、UML モデル、データベース。T4 テンプレートは、それを任意の方法でコードに変換できます。

于 2010-10-20T20:45:46.650 に答える
2

それが良いアイデアかどうかはわかりませんが、私はちょうどアイデアを持っていました。おそらく、Visual Studioの拡張を見て、SDKをダウンロードし、ドキュメントを確認することができます。多分あなたが達成しようとしていることをすることは可能でしょう。

于 2010-10-20T20:21:16.707 に答える