如何在解决方案名称 (*.sln) 上使用通配符调用 msbuild?
How to call msbuild with wildcard on solution name (*.sln)?
我的文件夹中有一些解决方案文件 (*.sln)。如何在不明确指定解决方案名称的情况下为每个调用 msbuild
?通常的语法是:
msbuild <solution-name>.sln /P:Configuration=<Debug,Release>
我试过这个命令,但显然不支持:
msbuild *.sln /P:Configuration=<Debug,Release>
是否可以在不知道解决方案名称的情况下执行 msbuild?
在命令行中使用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>
如果使用 Powershell-Core 那么
Get-ChildItem -Recurse *.sln | ForEach-Object $_ { msbuild $_ }
我的文件夹中有一些解决方案文件 (*.sln)。如何在不明确指定解决方案名称的情况下为每个调用 msbuild
?通常的语法是:
msbuild <solution-name>.sln /P:Configuration=<Debug,Release>
我试过这个命令,但显然不支持:
msbuild *.sln /P:Configuration=<Debug,Release>
是否可以在不知道解决方案名称的情况下执行 msbuild?
在命令行中使用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>
如果使用 Powershell-Core 那么
Get-ChildItem -Recurse *.sln | ForEach-Object $_ { msbuild $_ }