我有一个包含多个项目的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"
有足够的空间来修饰这个脚本。会检查一下。
答案 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();
}