C# 如何在Powershell中使用MSBuild库以编程方式确定活动解决方案生成配置

C# 如何在Powershell中使用MSBuild库以编程方式确定活动解决方案生成配置,c#,visual-studio-2015,msbuild,C#,Visual Studio 2015,Msbuild,我正在编写一个Powershell脚本,用于从特定C解决方案中的所有exe/dll项目中检索自定义元数据 我的工作集中在使用Microsoft.MSBuild程序集构造和评估命名空间来解析解决方案文件,并迭代项目以检索元数据。这一切都很好 下一个愿望是只关注那些属于解决方案活动构建/平台配置一部分的项目——那些在Visual Studio configuration manager中选中了构建位的项目 虽然我能够收集项目生成配置属性列表,但我很难找到解决方案文件存储活动解决方案生成和活动平台配置

我正在编写一个Powershell脚本,用于从特定C解决方案中的所有exe/dll项目中检索自定义元数据

我的工作集中在使用Microsoft.MSBuild程序集构造和评估命名空间来解析解决方案文件,并迭代项目以检索元数据。这一切都很好

下一个愿望是只关注那些属于解决方案活动构建/平台配置一部分的项目——那些在Visual Studio configuration manager中选中了构建位的项目

虽然我能够收集项目生成配置属性列表,但我很难找到解决方案文件存储活动解决方案生成和活动平台配置所选值的方式

此外,我还查看了MSBuild库的源代码,它似乎使用了项目和解决方案配置之间的表达式匹配,例如:.Debug-Build | Any CPU.ActiveCfg=Debug | Any CPU


有人能告诉我应该如何确定解决方案或项目的活动构建/平台配置吗

来自@stign的反馈让我的思维朝着正确的方向发展。有点罗嗦,但它能满足我的需要

脚本伪代码如下所示:

Add-Type -Path "C:\Program Files (x86)\Reference Assemblies\Microsoft\MSBuild\v14.0\Microsoft.Build.dll"

$slnFile = [Microsoft.Build.Construction.SolutionFile]::Parse("<path_to_solution>")

$slnFile.ProjectsInOrder | Where-Object { $_.ProjectType -eq "KnownToBeMSBuildFormat" } | % {

$outValue = $null
$found = $_.ProjectConfigurations.TryGetValue("Debug|Any CPU", [ref]$outValue)

    if($found)
    {
        if($outValue.IncludeInBuild) # This bit is set by the MS code when parsing the project configurations with ...Build.0
        {
          #Do stuff here
        }
    }
 } #End collection iterate

请注意,作为构建验证过程的一部分,此脚本最终将在TFS中运行。我还想知道EnvDTE是否是另一个选项。我认为像platform/config for VS这样的易失性设置存储在解决方案的.suo文件中。这些通常不在源代码管理中,因为它们是特定于用户/机器的,所以我想知道您将如何处理它们?无论如何,这些文件都是二进制文件,并且与msbuild没有真正的关联,因为它们仅由VS使用。EnvDTE很可能是一种解决方法。@stign,您的观点很好。我试图做的最终将通过TFS后期构建运行,因此构建服务器提供配置参数。这就是我的愚蠢!谢谢你的检查。我很高兴知道你解决了这个问题,请标记它的答案,这将有利于其他社区谁有类似的问题。