Wat is het CSPROJ-bestandsformaat?
Bestanden met de extensie .csproj zijn C# project-bestanden die behoren tot de categorie ontwikkelaarsbestanden.
Wat bevatten .csproj-bestanden?
De inhoud van .csproj-bestanden omvat build-instellingen voor projecten geschreven in C#. Ze worden gegenereerd door Microsoft Visual Studio of de .NET SDK opdrachtregelprogramma's wanneer een nieuw project wordt gemaakt. De volgende informatie is te vinden in .csproj-bestanden:
- projectnaam en uitvoertype (executable of class library),
- verwijzingen naar projectbestanden, NuGet-pakketafhankelijkheden (
<PackageReference>) en andere projectreferenties, - compilatieparameters en doelframework (bijv.
net9.0ofnet48), - assembly-metadata zoals versienummers en auteurinformatie.
De inhoud van .csproj-bestanden is geschreven met XML-opmaak. Moderne projecten gebruiken het compacte SDK-stijl formaat, geïntroduceerd met .NET Core en Visual Studio 2017, dat opent met <Project Sdk="Microsoft.NET.Sdk"> en meestal slechts enkele regels lang is - bron .cs-bestanden worden automatisch opgepikt via impliciete globbing. Oudere legacy-projecten (van vóór 2017) gebruiken een uitgebreider formaat met een expliciete xmlns="http://schemas.microsoft.com/developer/msbuild/2003" namespace-declaratie en vermelden elk bronbestand afzonderlijk.
Waarvoor worden .csproj-bestanden gebruikt?
Met .csproj-bestanden kan men alle build-parameters van vaak zeer complexe projecten - die uit honderden bronbestanden en externe afhankelijkheden kunnen bestaan - in één document opslaan. De build-engine MSBuild (of het dotnet build CLI-commando) leest de .csproj om het project te compileren. Informatie in .csproj-bestanden zorgt ook voor consistent gedrag op verschillende machines en in CI-omgevingen, waardoor het niet nodig is om telkens compilatieparameters op te geven. Een of meer .csproj-projecten worden gegroepeerd door een solution-bestand (.sln of het nieuwere .slnx).
Let op: de .csproj zelf bevat geen broncode - alle C#-code bevindt zich in de afzonderlijke .cs-bestanden waarnaar wordt verwezen.
Kan ik .csproj-bestanden openen?
.csproj-bestanden worden automatisch gegenereerd na het selecteren van de optie om een nieuw project aan te maken. Omdat ze met XML zijn geschreven, volstaat zelfs de eenvoudigste tekstverwerker zoals Notepad voor het bekijken of bewerken ervan. Het is echter goed om te onthouden dat XML-syntaxis onvergefelijk kan zijn - zonder duidelijke noodzaak worden wijzigingen in .csproj-bestanden afgeraden. Onbezonnen wijzigingen in de inhoud kunnen leiden tot inconsistenties tussen projectelementen, wat resulteert in problemen bij het openen van het project in Visual Studio of andere ontwikkeltools.
Beveiliging & veiligheid
RISICO: MEDIUMHet .csproj-bestand zelf is platte XML en onschadelijk om te lezen. Het echte risico is wat er gebeurt wanneer u het BOUWT of HERSTELT: een C#-project kan MSBuild-targets uitvoeren, pre/post-build scripts, NuGet-pakketherstel (dat installatiescripts kan uitvoeren), brongeneratoren en de gecompileerde code bij debuggen/uitvoeren - dus het openen van een niet-vertrouwd project en op Build/Run drukken kan willekeurige code uitvoeren. Visual Studio toont om precies deze reden een vertrouwensprompt voor gedownloade projecten. Inspecteer de targets, pakketreferenties en scripts van een onbekende .csproj voordat u deze bouwt, en bouw geen code die u niet vertrouwt.
Formaatdetails
in een notendopProgramma's die CSPROJ-bestanden openen
Technische details
diepe specificaties| Bestandsstructuur | XML met een <Project> root-element dat <PropertyGroup>, <ItemGroup> en optioneel <Target> sub-elementen bevat |
| Projectformaat varianten | SDK-stijl (sinds .NET Core / VS 2017): compact, gebruikt Sdk-attribuut en impliciete *.cs globbing. Legacy full-framework: uitgebreid, vermeldt elk bronbestand expliciet, xmlns 2003 schema |
| SDK-attribuut | <Project Sdk="Microsoft.NET.Sdk"> opent elk modern SDK-stijl project; varianten zijn onder meer Microsoft.NET.Sdk.Web (ASP.NET Core) en Microsoft.NET.Sdk.Worker |
| Doelframework declaratie | <TargetFramework> element specificeert het compilatiedoel (bijv. net9.0, net48, netstandard2.0); <TargetFrameworks> (gescheiden door puntkomma's) maakt multi-targeting in één bestand mogelijk |
| NuGet afhankelijkheid declaratie | <PackageReference Include="PackageName" Version="x.y.z" /> elementen binnen een <ItemGroup>; vervangt de oudere packages.config aanpak |
| Project-naar-project referenties | <ProjectReference Include="../Other/Other.csproj" /> elementen; MSBuild bepaalt automatisch de build-volgorde en afhankelijkheidsgrafiek |
| Bronbestand inclusie (SDK-stijl) | Impliciet - alle *.cs-bestanden onder de projectmap worden automatisch gecompileerd zonder expliciete <Compile> vermeldingen |
| Uitvoertypes | Exe (console-applicatie), WinExe (Windows GUI), Library (class library of NuGet-pakket); ingesteld via de <OutputType> eigenschap |
| Build-engine | MSBuild - direct aangeroepen of via dotnet build, dotnet run, en dotnet publish vanuit de .NET SDK CLI |
| Tekstcodering | UTF-8 platte tekst; geen binaire handtekening of magic bytes; BOM is optioneel en wordt in de meeste moderne tools weggelaten |
| Typische bestandsgrootte | Minder dan 1 KB voor SDK-stijl projecten; tot ~50 KB for grote legacy full-framework projecten met veel expliciete bestandsvermeldingen |
| MIME-type | application/xml (ook geaccepteerd als text/xml of text/plain) |
| Bijbehorend bestand | .csproj.user slaat per gebruiker, machine-lokale IDE-instellingen op (bijv. debug launch argumenten) en mag niet worden opgenomen in versiebeheer |
| Solution groepering | Een of meer .csproj-projecten worden gecombineerd in een .sln of het nieuwere .slnx solution-bestand voor IDE en multi-project CLI builds |
| Tegenhangende projectformaten | .vbproj (Visual Basic .NET) en .fsproj (F#) gebruiken hetzelfde MSBuild XML-schema en kunnen naast elkaar bestaan in dezelfde solution |
| Uitgebracht | 2002 (Visual Studio .NET / .NET Framework 1.0) |
| Laatste versie | SDK-style project format (since .NET Core / VS 2017, 2017); current with .NET 9 (2024) |
| Open standaard | Ja · royaltyvrij |
| Specificatie | learn.microsoft.com |
CSPROJ conversies
Community V&A
gevraagd door gebruikersNog geen vragen - wees de eerste om iets te vragen over CSPROJ-bestanden.