查找所有编译到.NET 3.5控制台应用程序的VS项目



我有一个嵌套很深的存储库,里面有很多Visual Studio项目。我需要找到所有具有TargetFramework 3.5输出类型"控制台应用程序">的项目。

我发现控制台应用程序的csproj文件中有这样的内容:

<OutputType>Exe</OutputType>

有窗口的应用程序有这样的功能:

<OutputType>WinExe</OutputType>

这使我能够找到所有扩展名为csproj的文件,这些文件可编译为控制台应用程序。

$csproj_ConsoleExes = gci -Recurse *.csproj | select-string "<OutputType>Exe</OutputType>"

接下来我需要做的是:我只需要筛选那些具有目标框架3.5的项目。但是由于$csproj_ConsoleExes包含搜索结果,我不知道如何再次应用选择字符串选择字符串仅适用于FileInfo类型的输入对象。

感谢您的帮助。

您可以利用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文件应该是正确的。

  • 请参阅此答案,以获得无法做出此假设的情况下的解决方案。

您可以将$csproj_ConsoleExes中的项目转为键入FileInfo,方法如下:

$csproj_Console_Items = $csproj_ConsoleExes| select Path | get-item

上面的行首先获取每个项的路径,并通过管道将其发送到getitem,然后将其转换为FileInfo对象。

然后,您可以找到包含TargetFrameworkVersion的所有行

$csproj_Console_TargetFrameworkVersion=$csproj_Console_Items | select-string "<TargetFrameworkVersion>"

现在,您可以再次获取路径,并通过管道将其发送到getitem以获取FileInfo类型的新集合。

相关内容

  • 没有找到相关文章

最新更新