我正在编写一个Powershell脚本,该脚本从特定C#解决方案中的所有exe/dll项目中检索自定义元数据。
我的工作集中在使用Microsoft.MSBuild程序集(构建和评估名称空间)来解析解决方案文件并迭代项目以检索元数据。这一切都很好。
下一个愿望是只关注那些属于解决方案Active Build/Platform配置的项目--那些在Visual配置管理器中选中了Build位的项目。
虽然我能够收集项目构建配置属性的列表,但我很难找到解决方案文件如何存储活动解决方案构建和Active Platform配置所选值。
此外,我还审查了MSBuild库的源代码,它似乎使用字符串在项目和解决方案配置之间使用表达式匹配,例如:.Debug -Build CPU.ActiveCfg =Debug。
有人能说明我应该如何确定解决方案或项目的主动构建/平台配置吗?
发布于 2017-01-19 23:30:50
来自@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 iteratehttps://stackoverflow.com/questions/41747700
复制相似问题