Как получить рабочее пространство из VisualStudioWorkspace?

1

Я пытаюсь получить Workspace из visual studio, чтобы использовать его с roslyn.

Я нашел некоторые темы об этом, как этот: Как получить ссылку на объект Workspace из Roslyn из IVsSolution?

Я написал точно такой же код:

var componentModel = (IComponentModel)Microsoft.VisualStudio.Shell.Package.GetGlobalService(typeof(SComponentModel));
var workspace = componentModel.GetService<Microsoft.VisualStudio.LanguageServices.VisualStudioWorkspace>();

Но я получаю эту ошибку...

"Экспорт не найден, что соответствует ограничению: ContractName Microsoft.CodeAnalysis.Workspace RequiredTypeIdentity Microsoft.CodeAnalysis.Workspace"

Я не совсем понимаю, в чем проблема.

Теги:
roslyn

2 ответа

0
Лучший ответ

Похоже, что языковые службы Roslyn не работают в экспериментальной версии Visual Studio. Вы должны скачать предварительный просмотр отсюда: http://msdn.microsoft.com/en-us/vstudio/roslyn.aspx

Это включает в себя программу под названием "Установить Roslyn Preview в Roslyn Experimental Hive", которую вы должны запустить.

В VSPackage, который вы используете, должны быть аргументы командной строки "/rootSuffix Roslyn". Вы можете установить это, щелкнув правой кнопкой мыши проект в обозревателе решений, щелкнув свойства и перейдя на "Отладка".

Наконец, вы должны включить дополнительное свойство в XML файл.csproj:

<VSSDKTargetPlatformRegRootSuffix>Roslyn</VSSDKTargetPlatformRegRootSuffix>

В моем предыдущем вопросе есть объяснение: присоедините VsPackage к Roslyn Instance

  • 0
    Я сделал все по ссылке, но я получаю новую ошибку. Невозможно привести базовое экспортированное значение типа «Microsoft.VisualStudio.LanguageServices.RoslynVisualStudioWorkspace (ContractName =" Microsoft.VisualStudio.LanguageServices.VisualStudioWorkspace ")» для типа «Microsoft.VisualStudio.LanguageSacedioWV.Windows.Services.Vu. Я не очень понимаю ..
  • 0
    Это странная ошибка, и она больше связана с MEF, чем с Roslyn. Они упоминают подобную проблему здесь: stackoverflow.com/a/14320296/300908
Показать ещё 2 комментария
0

Задача решена.

Моя проблема возникла из-за конфликта между сборкой.

В моем проекте была сборка Roslyn версии 0.7.0, но во время теста, в Runtime, это была версия Roslyn 0.6.0.

Итак, в Visual Studio/rootSuffix Roslyn с <VSSDKTargetPlatformRegRootSuffix>Roslyn</VSSDKTargetPlatformRegRootSuffix> в каждом проекте с использованием Roslyn. Все в порядке.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню