CI サーバーの MSBuild タスク内で Roslyn を使用して、コンパイル前にソース コードを変更することは可能ですか? 私はVSでやりたいことをすることに成功しましたが、VSの外でそれが可能かどうか疑問に思います。現在、Workspace API と Compiler API を検討していますが、それらはそれを実現するための適切なツールのようですが、それが可能かどうかはまだわかりません。特に、MSBuild に対して行った変更を元に戻して、その作業を継続できるようにすることを懸念しています。
3 に答える
これは間違いなく私たちが考えているシナリオです。今日、それを少し難しくするいくつかの問題があります:
- すでにmsbuild内にいるため、WorkspaceAPIを使用してプロジェクト/ソリューションをロードすることはできません。
- 通常のコンパイラAPIを使用するには、大量の作業になる可能性のあるコンパイルを自分で作成する必要があります。
将来的には、「csc / vbcコマンドライン文字列からワークスペースを作成する」を提供したいと考えています。これにより、これがはるかに簡単になります。
これに関する以前の議論については、コンパイラ(csc.exeまたはvbc.exe)自体へのフックと、MSビルドタスクでのRoslynの使用に関する問題を参照してください。
MSビルドタスクでRoslynを使用する際の問題に関する質問に関して、
public class MyTask : Task
TaskをAppDomainIsolatedTaskに変更するのは簡単な修正です。私はmsdnアカウントを持っていないので、ここに投稿します。それがお役に立てば幸いです。
私は個人的にこれをテストすることはできませんでしたが (したがって、この「回答」をコメントとして扱ってください)、Roslyn に関するもの、特にこのブログ エントリを読むと、それが可能であるように見えます (「Rewrite」を探してください)。段落。
どうやら、ソースから構文ツリーを構築し (コンパイラにとってはそれほど驚くべきことではないと思います)、API を使用してこれを変更し、最後に文字列/ファイルなどに書き戻すことができます。
また、Roslyn 構文ツリーの概念に関するMSDNと、 「構文変換」に関するこのチュートリアルも参照してください。