[msbuild] .NET Core (비 ASP.NET Core) 프로젝트 용 VS2017 솔루션 탐색기에서 파일을 중첩 할 수 있습니까?

예를 들어 VS2017의 Windows Forms에서 여전히 사용되는 “오래된 학교”MSBuild 프로젝트에서 파일은 DependentUponcsproj 파일 의 항목을 통해 “중첩”될 수 있습니다 .

나는 이것을 Noda Time에서 함께 단위 테스트를 그룹화하는 데 사용했습니다.

<Compile Include="LocalDateTest.PeriodArithmetic.cs">
  <DependentUpon>LocalDateTest.cs</DependentUpon>
</Compile>

이로 인해 쉽게 탐색 할 수있는 테스트가 이루어졌습니다.

중첩 테스트

project.json.NET Core로 이동할 때 고의로이 기능을 “잃어 버렸지 만” MSBuild로 변환 할 때 반환되기를 바랐습니다. 그러나 .NET Core SDK (root element <Project Sdk="Microsoft.NET.Sdk">)를 기반으로하는 MSBuild 프로젝트 ItemGroup는 “old school”프로젝트와 동일한 요소를 사용하여 수동으로 추가 된 경우에도 Visual Studio 2017에서 동일한 처리를받지 못하는 것처럼 보입니다 .

ASP.NET Core 프로젝트는 축소 된 CSS 및 Javascript에 대한 자동 중첩을 수신하지만이를 .NET Core 라이브러리 프로젝트의 C #에 적용하는 방법은 명확하지 않습니다.



답변

Microsoft.NET.Sdk다음과 유사한 것을 사용하여 내 스타일의 프로젝트 중 하나에서 작업하고 있습니다 .

<ItemGroup>
  <Compile Update="LocalDateTest.*.cs">
    <DependentUpon>LocalDateTest.cs</DependentUpon>
  </Compile>
</ItemGroup>

여기서 트릭 UpdateInclude. 이는 암시 적 항목이 기본 프로젝트 이전에 가져온 props 파일에서 가져 오기 때문입니다. 추가 항목 Include은 이미 포함 된 파일에 영향을주지 않지만을 사용하여 수정할 수 있습니다 Update.


답변

Visual Studio 2019에는 <Project Sdk="Microsoft.NET.Sdk">프로젝트에서 자동으로 수행하는 것처럼 멋지게 중첩 된 appsettings.json / appsettings.Development.json 파일 이 필요한 .NET Core 2.2 프로젝트가 <Project Sdk="Microsoft.NET.Sdk.Web">있습니다.

.CSPROJ에 추가해야하는 내용은 다음과 같습니다.

  <ItemGroup>
    <Content Include="appsettings.json">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
    <Content Include="appsettings.Development.json">
      <DependentUpon>appsettings.json</DependentUpon>
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
  </ItemGroup>

그 후 솔루션 탐색기에서 변경 사항을 적용하려면 프로젝트를 언로드 / 다시로드해야했습니다. 또한 이러한 파일이 항상 출력 디렉토리에 복사되도록 설정했습니다.


답변

각 항목을 직접 만드는 대신 와일드 카드를 사용하려는 경우 이러한 줄을 .csproj 파일에 추가하면 Foo.tests.cs 와 같은 항목이 자동으로 Foo.cs 아래에 중첩됩니다 .

.NET Core 3.1.0을 사용하여 VS2019에서 테스트 및 작업

  <ItemGroup>
    <Compile Update="**\*.tests.cs">
      <DependentUpon>$([System.String]::Copy(%(Filename)).Replace(".tests",".cs"))</DependentUpon>
    </Compile>
  </ItemGroup>


답변

당신이 사용하는 경우 .netstandardx.x 당신은 사용할 수 없습니다 NestedIn을 . 작동하지 않습니다.

.csproj에서 수동으로 수행 할 수 있습니다.

<ItemGroup><Compile Include="BaseClass">ChildClass.cs</Compile></ItemGroup>


답변

동일한 접두사를 사용하면 파일이 자동으로 중첩됩니다.

예:

AsemblyInfo.cs
AsemblyInfo.local.cs


답변