如何在解决方案名称中使用通配符(* .sln)调用msbuild?

3

我有一些在文件夹中的解决方案文件(*.sln)。如何在不显式指定解决方案名称的情况下为每个解决方案调用msbuild?通常的语法是:

msbuild <solution-name>.sln /P:Configuration=<Debug,Release>

我尝试了这个命令,但显然不支持:

msbuild *.sln /P:Configuration=<Debug,Release>

有没有办法在不知道解决方案名称的情况下执行msbuild?
2个回答

3
使用for循环遍历在命令行中使用dir *.sln的结果:
for %i in ( dir *.sln ) do ( msbuild %i /p:Configuration=Debug )

或者使用msbuild文件来完成相同的任务。最终,这可能会更加有趣,因为它允许更多的微调和自动化。例如,下面显示的代码自动构建调试和发布版本,并可扩展为更多版本。还可以传递要扫描解决方案的目录,默认情况下选择包含msbuild文件的目录。使用命令行或批处理文件实现这些功能要困难得多且不美观。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">

  <PropertyGroup>
    <!-- directory where the solution files are -->
    <SlnDir Condition="'$(SlnDir)' == ''">$(MSBuildThisFileDirectory)</SlnDir>
  </PropertyGroup>

  <ItemGroup>
    <!-- list solution files -->
    <ProjectFiles Include="$(SlnDir)\*.sln"/>
    <!-- list configurations to build -->
    <Configurations Include="Debug;Release"/>
  </ItemGroup>

  <Target Name="Build">
    <MSBuild Projects="@(ProjectFiles)" Targets="Cli" Properties="Configuration=%(Configurations.Identity)"/>
  </Target>

</Project>

对于我的需求,从 MSBuild 配置行中删除“Targets="Cli"”就可以解决问题了。 - johng

1
如果使用 Powershell-Core,则
Get-ChildItem -Recurse *.sln | ForEach-Object $_ { msbuild $_ }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接