Roslyn бросает язык "C#" не поддерживается

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

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

это пакеты NuGet:

enter image description here

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

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

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

"язык' C# ' не является поддерживаемый."

   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)

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

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

что еще я должен делать?

2 ответов


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

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

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

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


вы должны добавить Microsoft.CodeAnalysis как проект библиотеки классов и ссылка на проект как хорошо.