在Visual Studio解决方案文件中更新每个项目的Visual Studio项目配置

时间:2016-12-08 16:24:45

标签: visual-studio msbuild configuration-files configurationmanager

我有一个包含多个项目的visual studio解决方案文件。

对于给定的解决方案配置,例如Dev,很少有项目使用Debug配置。我希望所有项目都使用Dev配置来进行Dev解决方案配置。

我希望能够自动执行此操作,而不是使用Configuration Manager并更新每个项目的所有可能平台选项(x64,任何CPU,混合平台)的配置。使用Configuration Manager为所有项目的所有解决方案配置更新此内容非常繁琐。

因为我有超过5个解决方案配置,解决方案中有20多个项目。

在记事本++中编辑解决方案文件会对我有所帮助。我还没试过。但这是唯一的方法吗?

更新

我已经起草了一个简单的PS脚本,使用Powershell来更新sln文件,实现单个sln配置。但也在寻找替代方法。

$content = Get-Content "E:\SlnFolder\SolutionFile.sln" | ForEach-Object {

$line = $_

if ($line -match "(^\s*{[a-zA-Z0-9]+-[a-zA-Z0-9]+-[a-zA-Z0-9]+-[a-zA-Z0-9]+-[a-zA-Z0-9]+}.Dev\|[a-zA-Z0-9\.\s]+ = )([a-zA-Z\s]+)")
{

$line -replace "(^\s*{[a-zA-Z0-9]+-[a-zA-Z0-9]+-[a-zA-Z0-9]+-[a-zA-Z0-9]+-[a-zA-Z0-9]+}.Dev\|[a-zA-Z0-9\.\s]+ = )([a-zA-Z\s]+)",'$1Dev'

}
else
{
$line
}

} | Set-Content -Path "E:\SlnFolder\SolutionFile_Updated.sln"

有足够的空间来修饰这个脚本。会检查一下。

1 个答案:

答案 0 :(得分:0)

是的,您可以使用SolutionFile.Parse方法检索所有项目AbsolutePath,您可以使用Microsoft.Build.Evaluation.Project类来设置相关的Property。像这样:

请添加名为Microsoft.Build的扩展名引用

string solutionPath = @"D:\Project\Msbuild\App1\App1.sln";
var solutionFile = SolutionFile.Parse(solutionPath);
foreach (var item in solutionFile.ProjectsInOrder)
{
var project = ProjectCollection.GlobalProjectCollection.LoadProject(item.AbsolutePath);
project.SetGlobalProperty("Configuration", "Debug");
project.Build();
}