Ответ 1
Вам нужно добавить пакет Microsoft.CodeAnalysis
как для проекта библиотеки классов, так и для проекта ссылки.
Я создал проект библиотеки классов и сделал некоторую обработку, а также использовал 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 локально и добавить необходимые ссылки. Они есть, но ошибка возникает.
Неужели это ошибка, которая не была исправлена в прошлом году?
Что еще мне делать?
Вам нужно добавить пакет Microsoft.CodeAnalysis
как для проекта библиотеки классов, так и для проекта ссылки.
Скорее всего, потому, что вы не ссылаетесь на Microsoft.CodeAnalysis.CSharp.Workspaces
в своем коде, т.е. вы никогда не используете тип или метод в этой DLL, поэтому MSBuild считает, что он не нужен (см., например, этот вопрос).
Итак, что вы можете сделать, например, добавьте следующую строку в проект библиотеки классов:
var _ = typeof(Microsoft.CodeAnalysis.CSharp.Formatting.CSharpFormattingOptions);
Затем MSBuild должен скопировать Microsoft.CodeAnalysis.CSharp.Workspaces.dll
, и все должно быть хорошо. Не нужно ссылаться на пакеты NuGet из всех других проектов.