【问题标题】:Roslyn - determine project excluded from build configurationRoslyn - 确定从构建配置中排除的项目
【发布时间】:2017-04-19 06:58:38
【问题描述】:

我正在尝试找出在相应的构建配置/平台设置中启用/禁用了哪个项目。请问在哪里可以找到这个“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();

我原以为不会向我提供不属于所选配置/平台的项目,但 solution.Projects 会向我展示所有这些项目,而不管构建设置。

【问题讨论】:

    标签: c# msbuild roslyn-code-analysis


    【解决方案1】:

    我认为 Roslyn 目前并没有真正掌握大部分信息(我不确定它是否会;但我希望它会)。例如,我没有看到与使用 Roslyn API 的项目的“配置”相关的任何内容。这似乎是委托给 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-04
      • 2012-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多