2016-07-29 71 views
2

我在我的项目中使用nuget中的roslyn版本1.3.2。首先,我试图用这些代码格式化我的代码:如何在roslyn中使用Formatter.Format(SyntaxNode,Workspace)?

​​

和执行MSBuildWorkspace.Create()时,它抛出IOException:

无法加载文件或程序集“Microsoft.Build,版本= 14.0.0.0, Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其 依赖项之一。该系统找不到指定的文件。

然后我试图从安装的NuGet作为编译工具这个问题说:MSBuildWorkspace.Create() throws exception

我也得到很多的错误,所以我将其卸载并删除其所有文件。但是当我尝试调用MSBuildWorkspace.Create()时,它不会抛出IOException。我不知道这是如何工作的。

不幸的是,在我调用Formatter.Format后,即使没有异常或警告或错误,SyntaxNode仍然不会被格式化。

还有一件事,我可以在独立的控制台应用程序中轻松地格式化一些代码,而无需构建工具或IOException。他们使用相同的代码。为什么这与我的项目不兼容?

那么使用它的正确方法是什么,使用BuildTools nuget包时更好?

回答

1

工作空间需要实际包含语法根(在项目中)。你不能只传递一个空的工作区。

除非实际上要加载csprojsln,否则根本不需要MSBuild;您可以创建一个AdHocWorkspace,添加一个项目,添加您的语法树并对其进行格式化。

+0

感谢您的信息,我会在我上班时尝试, –

+0

It works.Thanks alot! –

相关问题