Roslyn - 确定从构建配置中排除的项目

时间:2017-04-19 06:58:39

标签: c# msbuild roslyn-code-analysis

我试图弄清楚在相应的构建配置/平台设置中启用/禁用了哪个项目。我在哪里可以找到这个" 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();

我原本以为我不会被提供不属于所选配置/平台的项目,但是解决方案。无论构建设置如何,项目都会向我显示所有项目。

1 个答案:

答案 0 :(得分:0)

我不认为罗斯林现在确实拥有大部分信息(我不确定它是否曾经存在;但我希望它会这样)。我没有看到任何与配置相关的信息。例如,对于使用Roslyn API的项目。这似乎被委托给DTE接口。您可以在Roslyn项目中获得平台类型,因此从概念上讲,您只能获得适用于给定类型的构建的项目:

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

但是,像&#34; DEBUG&#34;配置似乎只能通过DTE获得 - 这不是很难得到的。 e.g。

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

从VS项目中,您可以获得ConfigurationManager