В проектах 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, но неясно, как применить это к C # в проектах библиотеки .NET Core.
источник
*.cs
он уже включен по умолчанию, и поэтому содержимое вложенных элементов игнорируется.Microsoft.NET.Sdk.Web
даже для библиотек классов. Теперь мне вообще не нужно настраивать вложение.В 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>
После этого мне пришлось выгрузить / перезагрузить проект, чтобы изменения вступили в силу в обозревателе решений. Обратите внимание, что я также установил, что эти файлы всегда копируются в выходной каталог.
источник
Если вы хотите использовать подстановочные знаки вместо того, чтобы вручную создавать каждую запись, добавление этих строк в ваш файл .csproj означает, что что-нибудь вроде Foo.tests.cs автоматически будет вложено в Foo.cs
Протестировано и работает в VS2019 с .NET Core 3.1.0
<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>
источник
Если вы используете тот же префикс, он автоматически вложит файлы.
Пример:
источник