Могут ли файлы быть вложенными в 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.
Ответы
Ответ 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