In "alten" MSBuild-Projekten - wie sie beispielsweise von Windows Forms in VS2017 noch verwendet werden - können Dateien über ein DependentUpon
Element in der csproj-Datei "verschachtelt" werden .
Ich habe dies verwendet, um Unit-Tests in Noda Time zu gruppieren, z
<Compile Include="LocalDateTest.PeriodArithmetic.cs">
<DependentUpon>LocalDateTest.cs</DependentUpon>
</Compile>
Das führte zu leicht navigierbaren Tests:
Ich habe diese Funktion wissentlich "verloren", als ich zu project.json
.NET Core gewechselt bin , hatte aber gehofft, dass sie bei der Konvertierung in MSBuild zurückkehren würde. Es sieht jedoch so aus, als würden MSBuild-Projekte, die auf dem .NET Core SDK (Root-Element <Project Sdk="Microsoft.NET.Sdk">
) basieren, in Visual Studio 2017 nicht die gleiche Behandlung erhalten, selbst wenn ein ItemGroup
Projekt manuell mit denselben Elementen wie das "Old School" -Projekt hinzugefügt wird.
ASP.NET Core-Projekte erhalten eine automatische Verschachtelung für minimiertes CSS und Javascript. Es ist jedoch nicht klar, wie dies auf C # in .NET Core-Bibliotheksprojekten angewendet werden soll.
quelle
*.cs
standardmäßig bereits enthalten ist und der Inhalt verschachtelter Elemente daher ignoriert wird.Microsoft.NET.Sdk.Web
auch für Klassenbibliotheken zu verwenden. Jetzt muss ich die Verschachtelung überhaupt nicht mehr konfigurieren.In Visual Studio 2019 habe ich ein .NET Core 2.2-
<Project Sdk="Microsoft.NET.Sdk">
Projekt, in dem ich die schön verschachtelten Dateien appsettings.json / appsettings.Development.json haben wollte, genau wie sie es automatisch für<Project Sdk="Microsoft.NET.Sdk.Web">
Projekte tun .Folgendes musste ich dem .CSPROJ hinzufügen:
<ItemGroup> <Content Include="appsettings.json"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> <Content Include="appsettings.Development.json"> <DependentUpon>appsettings.json</DependentUpon> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> </ItemGroup>
Danach musste ich das Projekt entladen / neu laden, damit die Änderung im Projektmappen-Explorer wirksam wurde. Beachten Sie, dass ich diese Dateien auch so eingestellt habe, dass sie immer in das Ausgabeverzeichnis kopiert werden.
quelle
Wenn Sie einen Platzhalter verwenden möchten, anstatt jeden Eintrag von Hand zu erstellen , bedeutet das Hinzufügen dieser Zeilen zu Ihrer .csproj- Datei, dass alles wie Foo.tests.cs automatisch unter Foo.cs verschachtelt wird
Getestet und in VS2019 mit .NET Core 3.1.0
<ItemGroup> <Compile Update="**\*.tests.cs"> <DependentUpon>$([System.String]::Copy(%(Filename)).Replace(".tests",".cs"))</DependentUpon> </Compile> </ItemGroup>
quelle
Wenn Sie mit .netstandardx.x können Sie nicht verwenden NestedIn . Es funktioniert nicht.
Sie können dies manuell in Ihrer .csproj tun
<ItemGroup><Compile Include="BaseClass">ChildClass.cs</Compile></ItemGroup>
quelle
Wenn Sie dasselbe Präfix verwenden, werden Dateien automatisch verschachtelt.
Beispiel:
quelle