2016-07-29 4 views
2

내 프로젝트에서 roslyn 버전 1.3.2를 사용하고 있습니다. 우선 내 코드 포맷하려면 다음 코드를 사용하려고 :roslyn에서 Formatter.Format (구문 노드, 작업 영역)을 사용하는 방법?

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

을 그리고 MSBuildWorkspace.Create()를 실행할 때 IOException가 슬로우 :

파일이나 어셈블리를로드 할 수 없습니다 'Microsoft.Build, 버전 = 14.0.0.0, 문화 = 중립, PublicKeyToken = b03f5f7f11d50a3a '또는 종속성 중 하나입니다. 시스템이 지정된 파일을 찾을 수 없습니다. MSBuildWorkspace.Create() throws exception

은 내가 오류를 많이 얻을, 그래서 그것을 제거하고 모든 파일을 제거 :이 질문에 말했듯이

은 그 때 나는 Nuget에서 BuildTools를 설치했습니다. 하지만 MSBuildWorkspace.Create()를 호출하려고하면 IOException이 발생하지 않습니다. 나는 그것이 어떻게 작동하는지 전혀 모른다.

예외 나 경고 또는 오류가 전혀 없더라도 Formatter.Format을 호출 한 후에도 SyntaxNode가 여전히 형식화되지 않습니다.

한 가지 더, 저는 buildtools 또는 IOException없이 독립 실행 형 콘솔 응용 프로그램에서 일부 코드의 서식을 쉽게 지정할 수 있습니다. 그들은 같은 코드를 사용하고 있습니다. 이것이 내 프로젝트와 호환되지 않는 이유는 무엇입니까?

BuildTools 누 겟 패키지를 사용하면 올바른 방법을 사용할 수 있습니다.

답변

1

작업 공간에는 실제로 프로젝트에서 루트 구문을 포함해야합니다. 빈 작업 영역을 전달할 수는 없습니다.

실제로 csproj 또는 sln을로드하지 않으려면 MSBuild가 전혀 필요하지 않습니다. AdHocWorkspace을 만들고, 프로젝트를 추가하고, 구문 트리를 추가하고, 서식을 지정할 수 있습니다.

+0

정보를 제공해 주셔서 감사 드리며 일할 때 시도해 보겠습니다. –

+0

작품입니다. 고맙습니다. –