Рослин бросает Язык "С#" не поддерживается

Я создал проект библиотеки классов и сделал некоторую обработку, а также использовал Roslyn для генерации кода.

Я использую библиотеку в приложении WPF GUI в качестве ссылки.

Это пакеты NuGet:

введите описание изображения здесь

Build не показывает ошибки, однако, когда я использую следующий код:

private static void GetGenerator()
{
  workspace = new AdhocWorkspace();
  generator = SyntaxGenerator.GetGenerator(workspace, LanguageNames.CSharp);
}

Я получаю исключение:

"Язык 'С#' не поддерживается.

   at: Microsoft.CodeAnalysis.Host.HostWorkspaceServices.GetLanguageServices(String languageName)
   at: Microsoft.CodeAnalysis.Host.Mef.MefWorkspaceServices.GetLanguageServices(String languageName)
   at: Microsoft.CodeAnalysis.Editing.SyntaxGenerator.GetGenerator(Workspace workspace, String language)

В соответствии с this и this, мне нужно скопировать файлы CodeAnalysis локально и добавить необходимые ссылки. Они есть, но ошибка возникает.

Неужели это ошибка, которая не была исправлена ​​в прошлом году?

Что еще мне делать?

Ответ 1

Вам нужно добавить пакет Microsoft.CodeAnalysis как для проекта библиотеки классов, так и для проекта ссылки.

Ответ 2

Скорее всего, потому, что вы не ссылаетесь на Microsoft.CodeAnalysis.CSharp.Workspaces в своем коде, т.е. вы никогда не используете тип или метод в этой DLL, поэтому MSBuild считает, что он не нужен (см., например, этот вопрос).

Итак, что вы можете сделать, например, добавьте следующую строку в проект библиотеки классов:

var _ = typeof(Microsoft.CodeAnalysis.CSharp.Formatting.CSharpFormattingOptions);

Затем MSBuild должен скопировать Microsoft.CodeAnalysis.CSharp.Workspaces.dll, и все должно быть хорошо. Не нужно ссылаться на пакеты NuGet из всех других проектов.