如何使用dotnet sln将所有项目添加到单个解决方案中?

ast*_*tef 2 .net c# projects-and-solutions solution dotnet-cli

下面的例子,从这里我想执行

dotnet sln AllProjects.sln add **/*.csproj
Run Code Online (Sandbox Code Playgroud)

但是我得到这个错误:

找不到项目或目录**/*.csproj

看起来通配符不起作用。我究竟做错了什么?

小智 29

对于 Windows,打开 PowerShell 并运行以下命令将所有项目添加到解决方案文件中:

 dotnet sln add (ls -r **/*.csproj)
Run Code Online (Sandbox Code Playgroud)

  • 运行上述命令会引发错误: _syntax error close Outstanding token `('_,因为 _ls_ 之前缺少 '$'。正确的语法是: _dotnet sln add $(ls -r **/*.csproj)_ 其中正在研究(Git 和 Linux)bash。 (2认同)

ast*_*tef 5

我错过了这句话:

在基于Unix / Linux的终端上支持通配模式

我的Windows PowerShell解决方案如下所示:

$projects = Get-ChildItem -Recurse | Where-Object { $_.Name -match '^.+\.(csproj|vbproj)$' }

$uniqueProjects = $projects | Group-Object -Property Name | Where Count -EQ 1 | select -ExpandProperty Group | % { $_.FullName }

Invoke-Expression -Command "dotnet new sln -n AllProjects"

$uniqueProjects | % { Invoke-Expression -Command "dotnet sln AllProjects.sln add ""$_""" }
Run Code Online (Sandbox Code Playgroud)


Gor*_*man 5

在 Windows 上,您还可以使用以下命令将子目录中的所有项目递归添加到预先存在的解决方案文件中:

FOR /R %i IN (*.csproj) DO dotnet sln add "%i"
Run Code Online (Sandbox Code Playgroud)

或者,如果您需要经常(重新)创建解决方案文件,那么您可以创建一个包含以下内容的批处理文件,然后在需要时运行它:

dotnet new sln 
FOR /R %%i IN (*.csproj) DO dotnet sln add "%%i"
Run Code Online (Sandbox Code Playgroud)

请注意,在批处理文件中尝试执行此操作时需要额外的 %。