【问题标题】:Updating the Visual Studio projects' configuration for each project in Visual studio solution file更新 Visual Studio 解决方案文件中每个项目的 Visual Studio 项目配置
【发布时间】:2017-04-23 23:22:01
【问题描述】:

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

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

我希望能够自动执行此操作,而不是使用配置管理器并为所有可能的平台选项(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"

有足够的空间来完善这个脚本。会检查的。

【问题讨论】:

  • 替代方法是通过 Microsoft.Build.BuildEngine 编辑文件,参见例如stackoverflow.com/questions/7887538/…
  • @stijn - 在您给出的线程中讨论的答案现在已过时。我找到了另一个线程 [stackoverflow.com/questions/707107/…,其中有一个使用 VS 2015 的 Microsoft.Build.Construction.SolutionFile.Parse() 方法的新方法的答案。MSBuild 路径是 C:\Program Files (x86)\参考程序集\Microsoft\MSBuild\v14.0\Microsoft.Build.dll
  • 我不确定它是否真的过时了?请注意,它用于更改 projects,您链接到的问题是关于 solutions。虽然对于您的情况,您可能需要两者。

标签: visual-studio msbuild configuration-files configurationmanager


【解决方案1】:

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

请添加一个名为 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();
}

【讨论】:

  • @Baskar,这个问题呢?你能从 Cole 的回复中得到有用的信息吗?如果对你有帮助,记得把它标记为答案:)祝你有美好的一天!
  • @JackZhai-MSFT - 我希望能够只更新 sln 文件而不加载相应的项目。这可能吗?基本上我正在寻找配置管理器的 API。在 Visual Studio 中,我们可以打开配置管理器并更新 sln 配置的项目配置。如果我有 15 个项目和超过 5 或 6 个 sln 配置(如 Dev、Test、Prod、UAT 等),则此选项很乏味。寻找一种能够直接使用 API for Configuration Manager 更新 sln 文件的方法。使用正则表达式我可以直接更新 sln。但我比较依赖 API。
  • 您可以编写自定义目标文件,并将目标文件导入您的所有项目文件。更多信息请参考:stackoverflow.com/questions/2293249/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-25
  • 2020-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多