Roslyn — определить проект, исключенный из конфигурации сборки

Я пытаюсь выяснить, какой проект включен/отключен в соответствующей конфигурации сборки/настройке платформы. Где я могу найти эту информацию «project.BuildsInCurrentConfiguration», пожалуйста?

var properties = new Dictionary<string, string>
{
   { "Configuration", "Debug" },
   { "Platform", "x86"}
};

MSBuildWorkspace workspace = MSBuildWorkspace.Create(properties);
workspace.LoadMetadataForReferencedProjects = true;
Solution solution = workspace.OpenSolutionAsync("someSolution.sln").Result;
foreach (Project project in solution.Projects)
            Console.Out.WriteLine($"{project.OutputFilePath} is enabled in this build setup: {project.BuildsInCurrentConfiguration}");
workspace.CloseSolution();

Я бы подумал, что мне не будут предлагать проекты, которые не являются частью выбранной конфигурации/платформы, но решение. Проекты показывают мне их все независимо от настройки сборки.


person Jan Hyka    schedule 19.04.2017    source источник


Ответы (1)


Я не думаю, что Рослин действительно владеет большей частью этой информации прямо сейчас (я не уверен, что она когда-либо будет; но я надеюсь, что она будет). Например, я не вижу ничего, связанного с «конфигурацией» проекта с API-интерфейсами Roslyn. Похоже, что это делегировано интерфейсам DTE. Вы можете получить тип платформы в проекте Roslyn, поэтому концептуально вы можете получить только те проекты, которые применимы к данному типу сборки:

var rolsynProjects = solution.Projects
    .Where(p => p.CompilationOptions.Platform == Platform.X86);

но такие вещи, как конфигурация «DEBUG», похоже, доступны только через DTE, что не так уж сложно получить. например

 var project = DTE.Solution.Projects
    .Where(p=>p.FullName == rolsynProjects.First().FilePath).FirstOrDefault();

И из этого проекта VS вы можете получить его ConfigurationManager

person Peter Ritchie    schedule 20.04.2017