我有一个非常嵌套的存储库,有很多Visual项目。我需要找到所有的项目,其中有TargetFramework 3.5和Output Type 'console application'。
我发现控制台应用程序的csproj文件中有这样的内容:
<OutputType>Exe</OutputType>有窗口的应用程序有:
<OutputType>WinExe</OutputType>这允许我找到扩展名为csproj的所有文件,这些文件都编译到控制台应用程序中。
$csproj_ConsoleExes = gci -Recurse *.csproj | select-string "<OutputType>Exe</OutputType>"接下来我需要做的是:我只需要过滤那些目标框架3.5的项目。但是由于$csproj_ConsoleExes包含搜索结果,我不知道如何再次应用select-string。select-string只处理FileInfo类型的输入对象.
任何帮助都是非常感谢的。
发布于 2020-03-23 20:56:23
您可以利用Select-String接受多个搜索模式的能力,然后使用Group-Object确定两个模式匹配的所有文件:
Get-ChildItem -Recurse -Filter *.csproj |
Select-String -SimpleMatch '<OutputType>Exe</OutputType>',
'<TargetFramework>net35</TargetFramework>' |
Group-Object Path |
Where-Object Count -eq 2 |
ForEach-Object Name以上输出了所有*.csproj文件的全部路径,在这些文件中找到了这两种模式。
注意:
.csproj文件来说应该是正确的。发布于 2020-03-23 20:40:17
您可以将$csproj_ConsoleExes中的项转换为输入FileInfo,如下所示:
$csproj_Console_Items = $csproj_ConsoleExes| select Path | get-item上面的行首先获取每个项的路径,并将其转换为get- item,然后将其转换为FileInfo-对象。
然后您可以找到所有包含TargetFrameworkVersion的行。
$csproj_Console_TargetFrameworkVersion=$csproj_Console_Items | select-string "<TargetFrameworkVersion>"现在,您可以再次获得路径,并将其输送到 get -item,以获得一个新的FileInfo类型集合。
https://stackoverflow.com/questions/60821216
复制相似问题