2015-01-17 1 views
6

Это должно добавить документ.Roslyn AddDocument к проекту и сохранить это изменение в реальном файле решения

public static void AddDoc() 
    { 
     var msBuild = MSBuildWorkspace.Create(); 

     var sln = msBuild.OpenSolutionAsync 
      (@"D:\PanNiebieski\Documents\Visual Studio 14\Projects\WebApplication1" 
      + @"\WebApplication1.sln").Result; 

     foreach (var p in sln.Projects) 
     { 
      p.AddDocument(Guid.NewGuid().ToString() + ".txt", "test"); 

      var ok = msBuild.TryApplyChanges(sln); 

      Console.WriteLine(p.Name + ":" + ok); 
     } 

     Console.ReadKey(); 
    } 

Метод «TryApplyChanges» возвращает true, чтобы документ был добавлен. Затем, когда я проверяю решение, ничего подобного не существует. У меня такая же проблема с добавлением ссылок на проект.

Вопрос в том, как я могу сохранить изменения, как добавление документа в настоящий проект. Я что-то упускаю. Многие вопросы в StackOverflow о добавлении ссылок на проект говорят, что это просто не работает. Не работает ли метод «AddDocument»?

Этот метод говорит, что это действие поддерживается. Я запутался.

enter image description here

+1

Что произойдет, если вы добавите файл .cs? Глядя на http://source.roslyn.codeplex.com/#Microsoft.CodeAnalysis.Workspaces.Desktop/Workspace/MSBuild/MSBuildWorkspace.cs,1285b31dd95f5004, я вижу там некоторые материалы расширения. (Также этот код изменился с момента предварительного просмотра VS2015) –

+0

Не работает после обновления пакетов с бета1 до бета2. Расширение файла «cs» ничего не делало. – user2932893

ответ

8

вся рабочая область & синтаксис API, Рослин непреложны.

p.AddDocument создает новый Project и Solution (который возвращается в Project собственности возвращенного Document), который вы не обращая внимания.

+0

Спасибо. Если я смогу создать фрагмент, основанный на вашем ответе, тогда вы выиграете. – user2932893

5

Это нужно сделать вещь:

IWorkspace workspace = Workspace.LoadSolution(@"..\RoslynTest.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); 

Источник: http://www.wenda.io/questions/982766/roslyn-add-a-document-to-a-project.html

UPDATE: не применимо больше.

+0

Это было также полезно. То, что вы можете получить из нового объекта проекта Document и нового решения, было не столь очевидным. – user2932893

+3

Обратите внимание, что этот ответ, и ссылка в ответе использует не используемые ранее интерфейсы 'IWorkspace' и' IDocument', а не используемые в настоящее время 'Workspace' и' Document' –