W projektach MSBuild „starej szkoły” - nadal używanych na przykład przez Windows Forms w VS2017 - pliki mogą być „zagnieżdżane” za pośrednictwem DependentUpon
elementu w pliku csproj.
Użyłem tego do grupowania testów jednostkowych w czasie Noda, np
<Compile Include="LocalDateTest.PeriodArithmetic.cs">
<DependentUpon>LocalDateTest.cs</DependentUpon>
</Compile>
Doprowadziło to do łatwych w nawigacji testów:
Świadomie „straciłem” tę funkcję podczas przechodzenia project.json
na .NET Core, ale miałem nadzieję, że powróci ona podczas konwersji do MSBuild. Wygląda jednak na to, że projekty MSBuild oparte na .NET Core SDK (element główny <Project Sdk="Microsoft.NET.Sdk">
) nie są traktowane w ten sam sposób w programie Visual Studio 2017, nawet jeśli ItemGroup
są dodawane ręcznie z tymi samymi elementami, co projekt „starej szkoły”.
Projekty ASP.NET Core otrzymują automatyczne zagnieżdżanie dla zminimalizowanych CSS i JavaScript, ale nie jest jasne, jak zastosować to do języka C # w projektach bibliotek .NET Core.
źródło
*.cs
jest już domyślnie uwzględniona, a zatem zawartość zagnieżdżonego elementu jest ignorowana.Microsoft.NET.Sdk.Web
nawet dla bibliotek klas. Teraz w ogóle nie muszę konfigurować zagnieżdżania.W programie Visual Studio 2019 mam projekt .NET Core 2.2
<Project Sdk="Microsoft.NET.Sdk">
, w którym chciałem mieć ładnie zagnieżdżone pliki appsettings.json / appsettings.Development.json, tak jak robią to automatycznie dla<Project Sdk="Microsoft.NET.Sdk.Web">
projektów.Oto, co musiałem dodać do .CSPROJ:
<ItemGroup> <Content Include="appsettings.json"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> <Content Include="appsettings.Development.json"> <DependentUpon>appsettings.json</DependentUpon> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> </ItemGroup>
Następnie musiałem zwolnić / ponownie załadować projekt, aby zmiana została uwzględniona w Eksploratorze rozwiązań. Zauważ, że ustawiłem również te pliki tak, aby zawsze były kopiowane do katalogu wyjściowego.
źródło
Jeśli chcesz użyć symboli wieloznacznych zamiast ręcznie tworzyć każdy wpis, dodanie tych wierszy do pliku .csproj oznacza, że wszystko, jak Foo.tests.cs, zostanie automatycznie zagnieżdżone w Foo.cs
Przetestowane i działające w VS2019 z .NET Core 3.1.0
<ItemGroup> <Compile Update="**\*.tests.cs"> <DependentUpon>$([System.String]::Copy(%(Filename)).Replace(".tests",".cs"))</DependentUpon> </Compile> </ItemGroup>
źródło
Jeśli używasz .netstandardx.x , nie możesz używać NestedIn . To nie działa.
Możesz to zrobić ręcznie w pliku .csproj
<ItemGroup><Compile Include="BaseClass">ChildClass.cs</Compile></ItemGroup>
źródło
Jeśli użyjesz tego samego prefiksu, pliki zostaną zagnieżdżone automatycznie.
Przykład:
źródło