为什么 Visual Studio 隐藏了无代码 C# 项目中的某些文件夹?

Why Visual Studio hides certain folders in a codeless C# project?

Visual Studio版本

Microsoft Visual Studio 企业版 2022(64 位) 版本 17.0.4

描述

我这里有一个非常简单的自定义SDK风格项目(https://github.com/MarkKharitonov/HiddenFolders):

C:.
│   .gitignore
│   Directory.Build.props
│   Directory.Build.targets
│   LegacyFrontEnd.sln
│
└───Approvals
    │   Approvals.csproj
    │
    ├───Content
    │       approvals_icons.png
    │
    ├───Scripts
    │       Approvals.ts
    │
    └───StaticViews
            Approvals.html

我的问题是 VS 解决方案资源管理器不显示 Scripts 文件夹:

构建代码很简单,但它取代了 SDK 的标准构建目标:

Directory.Build.props

<Project>
  <PropertyGroup>
    <EnableDefaultItems>False</EnableDefaultItems>
    <GenerateAssemblyInfo>False</GenerateAssemblyInfo>
  </PropertyGroup>
  <ItemGroup>
    <TypeScriptCompile Include="Scripts\**\*.ts" />
    <Stylus Include="Stylus\**\*.styl" />
    <Content Include="Content\**\*.*" />
    <Content Include="StaticViews\**\*.*" />
  </ItemGroup>
</Project>

Directory.Build.targets

<Project>
  <Target Name="Build" />
  <Target Name="Clean" />
  <Target Name="Rebuild" DependsOnTargets="Clean;Build" />

  <Target Name="CompileTypeScript" BeforeTargets="Build">
    <MakeDir Directories="$(MSBuildProjectDirectory)\_jsCompiled"/>
    <Touch Files="$(MSBuildProjectDirectory)\_jsCompiled\Approvals.js" AlwaysCreate="true" />
  </Target>
</Project>

.\Approvals\Approvals.csproj

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net472</TargetFramework>
    <OutputPath>bin</OutputPath>
  </PropertyGroup>
</Project>

很简单。

为什么 VS 解决方案资源管理器不显示 Scripts 文件夹?

P.S.

也张贴在这里 - https://github.com/dotnet/project-system/issues/7941

项目在解决方案资源管理器中的可见性由项目的可见元数据控制。

你可以

<ItemDefinitionGroup>
    <Foo>
        <Visible>false</Visible>  
    </Foo>
</ItemDefinitionGroup>

从解决方案资源管理器中隐藏所有 Foo 项,您可以包含元数据以控制可见性:

<Stylus Include="Stylus\**\*.styl">
    <Visible>false</Visible>
</Stylus>

或使用更新更新现有项目以添加、设置或删除元数据:

<Stylus Update="Stylus\**\*.styl">
    <Visible>false</Visible>
</Stylus>

MSBuild 项目产生许多不同类型的项目。它不会在解决方案资源管理器中显示所有这些项目。它只显示某些类型。

TypeScriptCompile 项目未显示在树中。如果你想在树中看到它们,你有两个选择。

  1. 将它们别名为显示的不同类型,例如 None。您必须在添加所有源项目后执行此操作:

    <ItemGroup>
       <None Include="@(TypeScriptCompile)" />
    </ItemGroup>
    
  2. 告诉 VS TypeScriptCompile 项将被视为项目项:

    <ItemGroup>
        <AvailableItemName Include="TypeScriptCompile" />
    </ItemGroup>