Visual studio 2019 不会自动从 .csproj 文件创建文件夹结构

Visual studio 2019 not automatically creating folder structure from .csproj files

我注意到 Visual Studio 2017 和 Visual Studio 2019 之间的行为存在细微差别。当我使用 VS 2017 打开解决方案时,它会自动创建项目文件中提到的文件夹(例如<Folder Include="Data\">.csproj 文件中)。 Visual Studio 2019 年不会那样做。有没有办法在 Visual Studio 2019 中更改此行为,以便在这些文件夹不存在时也创建这些文件夹?

编辑: 我首先注意到这个问题是结合 TFVC 的。当其他人将空文件夹添加到他们的解决方案时,它会被添加到 .csproj 文件中,但在空文件夹中检查它时会被忽略。当我从 TFVC 获取该项目并使用 VS 2017 打开它时,文件夹会自动创建,但不会使用 VS 2019。

我希望创建这些文件夹,因为检查它们的人希望它们在那里。 TFVC 不能处理空文件夹,所以 VS 2017 解决了这个问题对我来说似乎很好。不幸的是,VS 2019 的行为似乎略有不同。

重现:

  1. 在 Visual Studio 2017 或 2019
  2. 中创建一个 c# Class 库(.NET 框架)版本 4.7.2 项目
  3. 关闭解决方案并编辑 .csproj 文件
  4. 添加一个包含不存在的文件夹的项目组。最终结果可能如下所示:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>81fa1651-0a21-4ed6-8626-763141ab67cf</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>TestDotNetFramework</RootNamespace>
    <AssemblyName>TestDotNetFramework</AssemblyName>
    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <Deterministic>true</Deterministic>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System"/>
    
    <Reference Include="System.Core"/>
    <Reference Include="System.Xml.Linq"/>
    <Reference Include="System.Data.DataSetExtensions"/>
    
    
    <Reference Include="Microsoft.CSharp"/>
    
    <Reference Include="System.Data"/>
    
    <Reference Include="System.Net.Http"/>
    
    <Reference Include="System.Xml"/>
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Class1.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
  </ItemGroup>
  <!-- I added these manually -->
  <ItemGroup>
    <Folder Include="TestFolder\" />
    <Folder Include="TestFolder2\Testing\" />
  </ItemGroup>
  
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
 </Project>
  1. 保存 .csproj 文件
  2. 用Visual Studio2017打开解决方案。你会看到你在ItemGroup中添加的文件夹是自动创建的。
  3. 删除这些文件夹并使用 Visual Studio 2019 打开解决方案。文件夹不会自动创建。

我想你可能误会了。在 VS2017 中,如果我创建一个新的 .NET Core 控制台应用程序项目,然后编辑项目文件以包含:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.2</TargetFramework>
  </PropertyGroup>
  
  <ItemGroup>
    <Folder Include="NonExistent" />
  </ItemGroup>

</Project>

然后解决方案资源管理器显示:

并且 Windows Explorer 显示:

这与 VS2019 中的行为相同。

我身边的情况我也遇到过。而且好像只有VS2017上的net framework项目才能实现。和 net core 项目,同样,VS2019 上的 net framework 无法通过 Folder Includecsproj 文件创建真实文件夹。

我无法解释I have reported it to our DC Forum。如果我没有详细描述问题,您可以投票或添加任何评论。

由于票证可能需要很长时间,作为解决方法,您可以在 VS2019 的 csproj 文件中使用这些:

<ItemGroup>
    <Folder Include="TestFolder"/>
</ItemGroup>
<Target Name="CreateAppDataFolder" BeforeTargets="PrepareForBuild">
    <MakeDir Directories="$(ProjectDir)TestFolder" />
</Target>