获取列表
.csproj
在目录和子目录中
D:\repos\M\Test
1.
PS D:\repos\M\Test> ls -r -filter "*.csproj" | select Directory, Name
样本输出
Directory Name
--------- ----
D:\repos\M\Test\M.Common M.Common.csproj
D:\repos\M\Test\M.Mocks M.Mocks.csproj
D:\repos\M\Test\M.StateMachines M.StateMachines.csproj
获取包含匹配行的文件列表
<ProjectReference\s*Include="([^"]+)"
在目录和子目录中
2.
PS D:\repos\M\Test> ls | sls '<ProjectReference\s*Include="([^"]+)"' | ForEach-Object {New-Object PSObject -Property @{Project=$_.Filename; DirectDep=$_.Matches.Groups[1].Value}}
样本输出
Project DirectDeps
------- ----------
dirs.proj D:\repos\M\Test\M.Common
dirs.proj D:\repos\M\Test\M.Mocks.csproj
dirs.proj D:\repos\M\Test\M.StateMachines.csproj
M.Common.csproj D:\repos\S\Common\Common.csproj
M.Common.csproj D:\repos\Q\Contracts\Contracts.csproj
M.Mocks.csproj D:\repos\S\Controller\Controller.csproj
M.StateMachines.csproj D:\repos\M\Common\Common.csproj
M.StateMachines.csproj D:\repos\T\Auth\Auth.csproj
问题
Q1:如何将[1]的输出馈送到[2],以将[2]的搜索限制为
.csproj
文件(即排除
dirs.proj
)得到以下输出
Project DirectDeps
------- ----------
M.Common.csproj D:\repos\S\Common\Common.csproj
M.Common.csproj D:\repos\Q\Contracts\Contracts.csproj
M.Mocks.csproj D:\repos\S\Controller\Controller.csproj
M.StateMachines.csproj D:\repos\M\Common\Common.csproj
M.StateMachines.csproj D:\repos\T\Auth\Auth.csproj
问题2:那么我如何获取[2]的输出,并按项目/文件名对其进行分组呢?获得以下输出(或类似输出)
M.Common.csproj, D:\repos\S\Common\Common.csproj, D:\repos\Q\Contracts\Contracts.csproj
M.Mocks.csproj, D:\repos\S\Controller\Controller.csproj
M.StateMachines.csproj, D:\repos\M\Common\Common.csproj, D:\repos\T\Auth\Auth.csproj
尝试
Q1尝试次数
-
ls -r -filter "*.csproj" | ForEach-Object {"$_.Directory\$_.Name"}
-
ls -r -filter "*.csrpoj" | select Path
-
答案:
ls -r -filter "*.csproj" | [2]
Q2尝试次数
-
ls | sls '<ProjectReference\s*Include="([^"]+)"' | ForEach-Object {New-Object PSObject -Property @{Project=$_.Filename; DirectDep=$_.Matches.Groups[1].Value}} | group Project
-
ls | sls '<ProjectReference\s*Include="([^"]+)"' | ForEach-Object {New-Object PSObject -Property @{Project=$_.Filename; DirectDep=$_.Matches.Groups[1].Value}} | group Project | select Name, Group
-
ls | sls '<ProjectReference\s*Include="([^"]+)"' | ForEach-Object {New-Object PSObject -Property @{Project=$_.Filename; DirectDep=$_.Matches.Groups[1].Value}} | group Project | select Name, Group.DirectDep
3中的第二个输出最接近我要找的输出
Name Group
---- -----
dirs.proj {@{Project=dirs.proj; DirectDep=...M.Common.csproj}, {Project=dirs.proj; DirectDep=...M.Mocks.csproj}, {Project=dirs.proj; DirectDep=...M.StateMachines.csproj}
M.Common.csproj {@{Project=M.Common.csproj; DirectDep=...Common.csproj}, {Project=M.Common.csproj; DirectDep=...Contracts.csproj}}
M.Mocks.csproj {@{Project=M.Mocks.csproj; DirectDep=...Controller.csproj}
M.StateMachines.csproj {@{Project=M.StateMachines.csproj; DirectDep=...Common.csproj}, {Project=M.StateMachines.csproj; DirectDep=...Auth.csproj}}