我在我的项目中使用nuget的roslyn 1.3.2版。首先,我尝试使用这些代码来格式化我的代码:
var root = CSharpSyntaxTree.ParseText("filepath").GetRoot();
var workspace=MSBuildWorkspace.Create();
node=Formatter.Format(root,workspace);
执行MSBuildWorkspace.Create()时抛出IOException:
无法加载文件或程序集' Microsoft.Build,Version = 14.0.0.0, Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其中一个 依赖。系统找不到指定的文件。
然后我尝试从Nuget安装BuildTools,因为这个问题说:MSBuildWorkspace.Create() throws exception
我收到很多错误,所以我将其卸载并删除所有文件。但是当我尝试调用MSBuildWorkspace.Create()时,它不会抛出IOException。我不知道它是如何工作的。
不幸的是,即使没有异常或警告或错误,在调用Formatter.Format之后,SyntaxNode仍然无法格式化。
还有一点,我可以轻松地在没有buildtools或IOException的独立控制台应用程序中格式化一些代码。他们使用相同的代码。为什么这与我的项目不相容?
那么使用它的正确方法是什么,更好的不使用BuildTools nuget包?
答案 0 :(得分:1)
工作空间需要实际包含语法根(在项目中)。你不能只是传递一个空的工作区。
除非您确实要加载csproj
或sln
,否则根本不需要MSBuild;您可以创建AdHocWorkspace
,添加项目,添加语法树,然后格式化。