Directory.Build.props für gemeinsame Projekteinstellungen
- Matt
In jedem neuen Projekt tippt man wieder <TargetFramework>net10.0</TargetFramework>, <Nullable>enable</Nullable> und <ImplicitUsings>enable</ImplicitUsings>. Bei zehn Projekten in einer Solution driften die Werte irgendwann auseinander, meistens weil ein neues Testprojekt per Vorlage entstanden ist und die alten Einstellungen fehlen.
Eine Directory.Build.props im Solution-Root löst das. MSBuild sucht beim Laden jeder .csproj automatisch vom Projektordner aus aufwärts nach dieser Datei und importiert sie, ohne dass man sie irgendwo referenzieren muss. Was drinsteht, gilt für alle Projekte darunter:
<Project>
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
</Project>
Der Haken: MSBuild nimmt nur die erste gefundene Datei. Verschachtelte Directory.Build.props in Unterordnern werden nicht automatisch zusammengeführt, dafür braucht es einen expliziten Import mit GetPathOfFileAbove im inneren Ordner. Und weil die Datei früh importiert wird, kann jedes einzelne Projekt die Werte in seiner eigenen .csproj wieder überschreiben – praktisch für die eine Ausnahme, tückisch wenn man es vergisst und sich wundert, warum eine Einstellung nicht greift.
Für Paketversionen gibt es das Pendant Directory.Packages.props.