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


85

예를 들어 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 #에 적용하는 방법은 명확하지 않습니다.

답변:


104

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

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

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


2
좋아, 이건 이상해. 시도해 보았지만 작동하지 않았다고 확신합니다. 지금입니다. 아주, 아주 기괴합니다. 아- "포함"이 아니라 "업데이트"입니다.
Jon Skeet

1
Include vs Update가 차이를 만드는 이유를 정확히 모르겠습니다. 추가 정보를 제공하기 위해 툴링 담당자 중 한 명이 좋아할 것입니다.
Matthew King

1
@MatthewKing : 내 생각 엔*.cs 이미 기본적으로 포함되어 있기 때문에 중첩 된 요소 콘텐츠가 무시된다는 것입니다.
Jon Skeet

1
@JonSkeet, 예 ... 당신이 말했듯이 기괴하다고 말했듯이 ... 다른 프로젝트에서 한 번 더 시도했는데 효과가있었습니다. 테스트 클래스 뒤에 테스트 를 중첩하고 싶지만 수백 개의 파일에 대해 수동으로 수행하는 것은 미친 짓일 것입니다 ...이 확장명을 작성하더라도 프로젝트 파일이보기에 좋지 않습니다. 그래서 마침내 Microsoft.NET.Sdk.Web클래스 라이브러리에도 항상 사용하기로 결정했습니다 . 이제 중첩을 전혀 구성 할 필요가 없습니다.
Pavel Agarkov 2018

1
방금 이것을 테스트했으며 동일한 BuildAction 이름을 사용해야합니다. 예를 들어 파일 속성에 따라 'Compile'을 'Content'또는 'None'으로 바꾸십시오. 제 경우에는 '콘텐츠'였습니다
SM3RKY

10

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>

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


6

각 항목을 직접 만드는 대신 와일드 카드를 사용하려는 경우 이러한 줄을 .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>

2

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

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

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

-6

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

예:

AsemblyInfo.cs 
AsemblyInfo.local.cs

1
질문은 .NET Core에 관한 것이 었습니다. 의심을 명확히 할 수 있습니까?
Miguel Domingues

2
VS2017에서 사용해 보셨습니까? .NetFramework 4.7.1, Core 2.0 및 Standard 2.1이있는 솔루션이 지금 열려 있습니다. 각 유형의 프로젝트에서 Class.cs를 추가 한 다음 Class.local.cs를 추가해 보았습니다. 자동 중첩이 없습니다. 수동 중첩이 잘 작동합니다. VS2017 (15.7.4)
Andrew Steitz

비주얼 스튜디오 2017 15.9.3 : 같은 접두사를 가진 파일이 자동으로 솔루션 탐색기에서 중첩되고있다
brsfan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.