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