Подтвердить что ты не робот

Могут ли файлы быть вложенными в VS2017 Solution Explorer для .NET Core (nonASP.NET Core)?

В проектах "старой школы" MSBuild - как все еще используется Windows Forms в VS2017, например, файлы могут быть "вложены" через элемент DependentUpon в файле csproj.

Я использовал это, чтобы сгруппировать модульные тесты вместе в Noda Time, например.

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

Это привело к легкоходным испытаниям:

Вложенные тесты

Я сознательно "потерял" эту функцию при переходе на project.json для .NET Core, но надеялся, что он вернется при конвертации в MSBuild. Тем не менее, похоже, что проекты MSBuild, основанные на .NET Core SDK (корневой элемент <Project Sdk="Microsoft.NET.Sdk">), не получают одинакового обращения в Visual Studio 2017, даже если ItemGroup добавляется вручную с теми же элементами, что и "старые школьный" проект.

Проекты ASP.NET Core получают автоматическую вложенность для мини-CSS и Javascript, но неясно, как применить это к С# в проектах библиотеки .NET Core.

4b9b3361

Ответ 1

У меня он работает в одном из моих проектов Microsoft.NET.Sdk -style, используя что-то похожее на следующее:

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

Трюк здесь заключается в использовании Update вместо Include. Это связано с тем, что неявные элементы поступают из файла реквизита, который импортируется перед основным проектом. Дополнительный Include не будет влиять на уже включенные файлы, но их можно изменить с помощью Update.

Ответ 2

Если вы используете .netstandardx.x, вы не можете использовать NestedIn. Это не работает.

Вы можете сделать это вручную в вашем .csproj

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

Ответ 3

В Visual Studio 2019 у меня есть проект .NET Core 2.2 <Project Sdk="Microsoft.NET.Sdk"> в котором я хотел красиво вложенные файлы appsettings.json/appsettings.Development.json, как они это делают автоматически для <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>

После этого мне пришлось выгрузить/перезагрузить проект, чтобы изменения вступили в силу в обозревателе решений. Обратите внимание, что я также установил, чтобы эти файлы всегда копировались в выходной каталог.

Ответ 4

Если вы используете тот же префикс, он автоматически вложит файлы.

Пример:

AsemblyInfo.cs 
AsemblyInfo.local.cs