Roslyn: Как получить ссылку на Workspace из загруженного в настоящее время решения?

Я пытаюсь получить ссылку на текущее загруженное рабочее пространство без успеха. В соответствии с документацией (часть жирным шрифтом) я должен иметь возможность получить ссылку на нее.

API-интерфейсы Workspace находятся в пространстве имен Roslyn.Services и они доступны, если вы включите следующую директиву:

с использованием Roslyn.Services;

Рабочее пространство, которое вы используете, обычно будет предоставляться напрямую хостом (например, Visual Studio IDE). Однако вы можете работать с рабочей областью вне среды хоста, создавая собственный экземпляр IWorkspace.

Вы можете создать рабочую область, загрузив файл решения.

Рабочая область IWorkspace = Workspace.LoadSolution(@ "HelloWorld.sln" ); Решение ISolution = рабочая область. CurrentSolution;

Я пробовал следовать в unit test, но рабочее пространство равно null.

  IWorkspace workspace = Workspace.PrimaryWorkspace;

  ISolution solution = workspace.CurrentSolution;

Я не хочу загружать решение, я хочу работать в текущем загруженном решении. Как это делается? Я использую Visual Studio 2012.

Edit:

Пробовал использовать switch/rootSuffx Roslyn, как было предложено в ответ, и VS выдает ошибку, что это недопустимый ключ. Изменено это /rootSuffix Roslyn, а VS запускается, но рабочее пространство по-прежнему равно null.

Ответы

Ответ 1

Как описано Dustin Campbell в его ответе здесь: Как работать с Workspace.PrimaryWorkspace.CurrentSolution внутри VSPackage

Основное рабочее пространство внутри Visual Studio заполняется только тогда, когда включены службы языка Roslyn С# и Visual Basic.

Чтобы включить службы языков Roslyn, вам необходимо запустить VS со следующей командой:

devenv.exe /rootSuffix Roslyn