2012-09-11 5 views
8

Tôi đang chạy roslyn CtP2 thángRoslyn Thêm một tài liệu vào một dự án

Tôi đang cố gắng để thêm một tập tin html mới cho một dự án

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); 

Điều này dẫn đến không có thay đổi được bằng văn bản. Tôi đang cố gắng tải tệp html mới xuất hiện trong VS

+0

Hầu hết các đối tượng trong Roslyn đều không thay đổi, vì vậy tôi nghĩ bạn cần sử dụng dự án được trả về bởi 'AddDocument()'. Nhưng tôi không chắc chắn làm thế nào để làm điều đó, mà không cần loại bỏ các dự án cũ và sau đó thêm một mới trở lại. – svick

Trả lời

6

Có hai vấn đề ở đây:

  1. Roslyn ISolution, IProject, và IDocument đối tượng là không thay đổi, vì vậy để thấy các thay đổi bạn sẽ cần phải tạo ra một mới ISolution với những thay đổi, sau đó gọi Workspace.ApplyChanges().
  2. Trong Roslyn, IDocument đối tượng chỉ được tạo cho các tệp được chuyển tới trình biên dịch. Một cách khác để nói rằng đây là một phần của CompileItemGroup trong tệp dự án. Đối với các tệp khác (bao gồm tệp html), bạn nên sử dụng giao diện Visual Studio bình thường như IVsSolution.
4

Không gian làm việc không thay đổi. Điều đó có nghĩa là bất kỳ phương pháp nào có vẻ như sẽ chuyển sang trạng thái sửa đổi không gian làm việc thay vào đó sẽ trả về một phiên bản mới mới với những thay đổi được áp dụng.

Vì vậy, bạn muốn một cái gì đó như:

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); 

Tuy nhiên, tôi không ở gần máy với Roslyn cài đặt vào lúc này, vì vậy tôi không thể đảm bảo 100% này.

+3

Nó không phải là không gian làm việc không thay đổi, mà chỉ là về mọi thứ khác. Không gian làm việc tự biến đổi, kích hoạt các sự kiện khi nó thay đổi. Các đối tượng giải pháp, dự án và tài liệu là không thay đổi và chúng tồn tại trong một hệ thống phân cấp. Khi bạn thay đổi một dự án bằng cách thêm một tài liệu, bạn sẽ nhận được một cá thể dự án mới, đó là một thành viên của một cá thể giải pháp mới. Bạn cần sử dụng cá thể giải pháp mới khi bạn áp dụng các thay đổi trở lại không gian làm việc hoặc bạn sẽ không thấy các thay đổi trong không gian làm việc. –