首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查找编译到.NET 3.5控制台应用程序的所有VS-项目

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

Stack Overflow用户
提问于 2020-03-23 20:40:17
回答 2查看 42关注 0票数 1

我有一个非常嵌套的存储库,有很多Visual项目。我需要找到所有的项目,其中有TargetFramework 3.5Output Type 'console application'

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

代码语言:javascript
运行
复制
<OutputType>Exe</OutputType>

有窗口的应用程序有:

代码语言:javascript
运行
复制
<OutputType>WinExe</OutputType>

这允许我找到扩展名为csproj的所有文件,这些文件都编译到控制台应用程序中。

代码语言:javascript
运行
复制
$csproj_ConsoleExes = gci -Recurse *.csproj | select-string "<OutputType>Exe</OutputType>"

接下来我需要做的是:我只需要过滤那些目标框架3.5的项目。但是由于$csproj_ConsoleExes包含搜索结果,我不知道如何再次应用select-stringselect-string只处理FileInfo类型的输入对象.

任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-23 20:56:23

您可以利用Select-String接受多个搜索模式的能力,然后使用Group-Object确定两个模式匹配的所有文件:

代码语言:javascript
运行
复制
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文件来说应该是正确的。

  • 参见this answer,以解决无法作出这种假设的情况。
票数 1
EN

Stack Overflow用户

发布于 2020-03-23 20:40:17

您可以将$csproj_ConsoleExes中的项转换为输入FileInfo,如下所示:

代码语言:javascript
运行
复制
$csproj_Console_Items = $csproj_ConsoleExes| select Path | get-item

上面的行首先获取每个项的路径,并将其转换为get- item,然后将其转换为FileInfo-对象。

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

代码语言:javascript
运行
复制
$csproj_Console_TargetFrameworkVersion=$csproj_Console_Items | select-string "<TargetFrameworkVersion>"

现在,您可以再次获得路径,并将其输送到 get -item,以获得一个新的FileInfo类型集合。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60821216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档