2016-07-29 3 views
2

Я использую roslyn версии 1.3.2 от nuget в моем проекте. Сначала я пытался использовать эти коды для форматирования мой код:Как использовать Formatter.Format (SyntaxNode, Workspace) в roslyn?

var root = CSharpSyntaxTree.ParseText("filepath").GetRoot(); 
var workspace=MSBuildWorkspace.Create(); 
node=Formatter.Format(root,workspace); 

И бросить IOException при выполнении MSBuildWorkspace.Create():

Не удалось загрузить файл или сборку «Microsoft.Build, Version = 14.0.0.0, Культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a 'или одна из ее зависимостей . Система не может найти указанный файл.

Затем я попытался установить с NuGet инструмент сборки, как этот вопрос сказал: MSBuildWorkspace.Create() throws exception

И я получаю много ошибок, поэтому я удалить его и удалить все файлы. Но когда я пытаюсь вызвать MSBuildWorkspace.Create(), он не будет генерировать исключение IOException. Я понятия не имею, как это работает.

К сожалению, SyntaxNode по-прежнему не будет отформатирован после вызова Formatter.Format, даже если исключений или предупреждений или ошибок вообще нет.

Еще одна вещь: я могу легко форматировать некоторый код в автономном консольном приложении без buildtools или IOException. Они используют одни и те же коды. Почему это несовместимо с моим проектом?

Итак, как правильно использовать это, лучше с пакетом сборки BuildTools nuget?

ответ

1

Рабочее пространство должно содержать корень синтаксиса (в проекте). Вы не можете просто передать пустое рабочее пространство.

Если вы действительно не хотите загружать csproj или sln, вам не нужен MSBuild; вы можете создать AdHocWorkspace, добавить проект, добавить дерево синтаксиса и форматировать его.

+0

Спасибо за информацию, и я попробую, когда я пойду на работу, –

+0

Это работает. Спасибо большое! –