8

私はroslyn ctp2を実行しています

プロジェクトに新しい html ファイルを追加しようとしています

IWorkspace workspace = Workspace.LoadSolution("MySolution.sln");
var originalSolution = workspace.CurrentSolution;
ISolution newSolution = originalSolution;
newSolution.GetProject(newSolution.ProjectIds.First())
                        .AddDocument("index.html", "<html></html>");
workspace.ApplyChanges(originalSolution, newSolution);

この結果、変更は書き込まれません。新しいhtmlファイルをVSに表示しようとしています

4

2 に答える 2

6

ここには 2 つの問題があります。

  1. Roslyn ISolutionIProject、およびIDocumentオブジェクトは不変であるため、変更を確認するにはISolution、変更を加えて新しい を作成し、 を呼び出す必要がありますWorkspace.ApplyChanges()
  2. Roslyn ではIDocument、コンパイラに渡されるファイルに対してのみオブジェクトが作成されます。これを別の言い方をすればCompile ItemGroup、プロジェクト ファイルの一部であるということです。他のファイル (html ファイルを含む) の場合は、通常の Visual Studio インターフェイス ( IVsSolution.
于 2012-09-11T13:31:47.030 に答える
5

ワークスペースは不変です。つまり、ワークスペースを変更するように見えるメソッドは、代わりに、変更が適用された新しいインスタンスを返します。

したがって、次のようなものが必要です。

IWorkspace workspace = Workspace.LoadSolution("MySolution.sln");
var originalSolution = workspace.CurrentSolution;
var project = originalSolution.GetProject(originalSolution.ProjectIds.First());
IDocument doc = project.AddDocument("index.html", "<html></html>");
workspace.ApplyChanges(originalSolution, doc.Project.Solution);

ただし、現時点では Roslyn がインストールされているマシンの近くにいないため、これを 100% 保証することはできません。

于 2012-09-11T12:32:36.467 に答える