2017-02-22 25 views
13

Pracowałem nad rozszerzeniem kodu VS, które wykorzystuje interfejs użytkownika przestrzeni roboczej Roslyn do załadowania projektu, w momencie, w którym rozszerzenie obsługuje stary format project.json .NET Core poprzez typ ProjectJsonWorkspace w pakiet Microsoft.DotNet.ProjectModel.Workspaces.Przestrzeń robocza Roslyn dla nowego formatu .csproj .NET Core

Po opublikowaniu nowych zmian narzędzi chcę obsługiwać nowy format kompilacji .csproj, ale nie można znaleźć odpowiedniego obszaru roboczego zgodnego ze standardem .NET Standard.

Rozumiem, że ponieważ używa MSBuild, będę musiał użyć pakietu MSBuild (Microsoft.CodeAnalysis.MSBuild), jednak obecnie nie obsługuje on standardu .NET.

Jakie jest najlepsze rozwiązanie, jeśli takie istnieje, lub czy będę musiał rozważyć stworzenie własnej implementacji przestrzeni roboczej?

Odpowiedz

7

Rozmawiając z różnymi ludźmi wydaje się, że nie ma standardowego NET kompatybilny MS Budowanie przestrzeni roboczej, co może być postrzegane przez tę odpowiedź poniżej do following GitHub issue:

Nie zrobiliśmy pracę, aby MSBuildWorkspace działa poprawnie z nową platformą MSBuild. W międzyczasie możesz spojrzeć na to, co omnisharp ma wypełnić w swoim obszarze roboczym.

Wygląda więc na to, że w momencie pisania tego tekstu, jeśli chce się dotrzeć do obszaru roboczego MSBuild w projekcie zgodnym z normą .NET wtedy trzeba zbudować swój własny obszar roboczy używając Roslyn za obszar roboczy API, to jest dokładnie to, w jaki sposób OmniSharp to robi.

Update (16/10/2017):

Podczas MSBuildWorkspace nie nadal wspierać .NET Standard, znajduje się biblioteka nazywa Buildalyzer który działa na różnych platformach i wygeneruje AdhocWorkspace dla ciebie, co pozwala osiągnąć ten sam cel.

using Buildalyzer.Workspaces; 
// ... 

AnalyzerManager manager = new AnalyzerManager(); 
ProjectAnalyzer analyzer = 
manager.GetProject(@"C:\MyCode\MyProject.csproj"); 
AdhocWorkspace workspace = analyzer.GetWorkspace(); 

Ta sama biblioteka pozwoli również na odwołanie się do pliku rozwiązania.

+0

Uważam, że kod jest następujący: https://github.com/OmniSharp/omnisharp-roslyn/blob/a4dced28f5f3b38d806134e89a6896c9d8075997/src/OmniSharp.DotNet/DotNetWorkspace.cs. –

Powiązane problemy