Hvad er CSPROJ-filformatet?
Filer med filtypen .csproj er C#-projektfiler, der hører til kategorien udviklerfiler.
Hvad indeholder .csproj-filer?
Indholdet af .csproj-filer inkluderer build-indstillinger for projekter skrevet i C#. De genereres af Microsoft Visual Studio eller .NET SDK-kommandolinjeværktøjer, når et nyt projekt oprettes. Følgende oplysninger kan findes i .csproj-filer:
- projektnavn og outputtype (eksekverbar fil eller klassebibliotek),
- referencer til projektfiler, NuGet-pakkeafhængigheder (
<PackageReference>) og andre projektreferencer, - kompileringsparametre og målramme (f.eks.
net9.0ellernet48), - assembly-metadata såsom versionsnumre og forfatteroplysninger.
Indholdet af .csproj-filer er skrevet med XML-markup. Moderne projekter bruger det kompakte SDK-style-format, introduceret med .NET Core og Visual Studio 2017, som starter med <Project Sdk="Microsoft.NET.Sdk"> og typisk kun er få linjer langt - kilde- .cs-filer opsamles automatisk via implicit globbing. Ældre legacy-projekter (før 2017) bruger et mere omfattende format med en eksplicit xmlns="http://schemas.microsoft.com/developer/msbuild/2003" navnerumsdeklaration og lister hver enkelt kildefil individuelt.
Hvad bruges .csproj-filer til?
Med .csproj-filer kan man gemme alle build-parametre for ofte meget komplekse projekter - som kan bestå af flere hundrede kildefiler og eksterne afhængigheder - i et enkelt dokument. Build-motoren MSBuild (eller CLI-kommandoen dotnet build) læser .csproj for at kompilere projektet. Oplysninger i .csproj-filer sikrer også ensartet adfærd på tværs af forskellige maskiner og CI-miljøer, hvilket eliminerer behovet for at angive kompileringsparametre hver gang. Et eller flere .csproj-projekter grupperes sammen af en solution-fil (.sln eller den nyere .slnx).
Bemærk, at selve .csproj ikke indeholder nogen kildekode - al C#-kode ligger i de separate .cs-filer, den refererer til.
Kan jeg åbne .csproj-filer?
.csproj-filer genereres automatisk efter valg af muligheden for at oprette et nyt projekt. Da de er skrevet med XML, er selv den enkleste teksteditor som Notesblok tilstrækkelig til at se eller redigere dem. Det er dog værd at huske på, at XML-syntaks kan være utilgivende - uden en klar nødvendighed frarådes ændringer af .csproj-filer. Overilede ændringer i deres indhold kan føre til uoverensstemmelser mellem projektelementer, hvilket resulterer i problemer med at åbne projektet i Visual Studio eller andre udviklingsværktøjer.
Sikkerhed og tryghed
RISIKO: MEDIUMSelve .csproj-filen er almindelig XML og ufarlig at læse. Den reelle risiko er, hvad der sker, når du BYGGER eller RESTORER den: et C#-projekt kan køre MSBuild-targets, pre/post-build-scripts, NuGet-pakke-restore (som kan køre installationsscripts), kildegeneratorer og den kompilerede kode ved debug/kørsel - så åbning af et projekt, man ikke har tillid til, og tryk på Build/Run kan eksekvere vilkårlig kode. Visual Studio viser en tillidsprompt for downloadede projekter af netop denne grund. Undersøg en ukendt .csproj-fils targets, pakkereferencer og scripts før build, og byg ikke kode, du ikke har tillid til.
Formatdetaljer
kort fortaltProgrammer der åbner CSPROJ-filer
Tekniske detaljer
dyb specifikation| Filstruktur | XML med et <Project> rodelement, der indeholder <PropertyGroup>, <ItemGroup> og valgfrit <Target> underelementer |
| Projektformat-varianter | SDK-style (siden .NET Core / VS 2017): kompakt, bruger Sdk-attribut og implicit *.cs globbing. Legacy full-framework: omfattende, lister hver kildefil eksplicit, xmlns 2003-skema |
| Sdk-attribut | <Project Sdk="Microsoft.NET.Sdk"> starter ethvert moderne SDK-style-projekt; varianter inkluderer Microsoft.NET.Sdk.Web (ASP.NET Core) og Microsoft.NET.Sdk.Worker |
| Deklaration af målramme | <TargetFramework> element specificerer kompileringsmålet (f.eks. net9.0, net48, netstandard2.0); <TargetFrameworks> (semikolon-separeret) muliggør multi-targeting i én fil |
| NuGet-afhængighedsdeklaration | <PackageReference Include="PackageName" Version="x.y.z" /> elementer inde i en <ItemGroup>; erstatter den ældre packages.config-metode |
| Projekt-til-projekt referencer | <ProjectReference Include="../Other/Other.csproj" /> elementer; MSBuild løser build-rækkefølge og afhængighedsgraf automatisk |
| Inkludering af kildefiler (SDK-style) | Implicit - alle *.cs-filer under projektmappen kompileres automatisk uden eksplicitte <Compile> indtastninger |
| Outputtyper | Exe (konsolapplikation), WinExe (Windows GUI), Library (klassebibliotek eller NuGet-pakke); indstilles via <OutputType> egenskaben |
| Build-motor | MSBuild - aktiveres direkte eller via dotnet build, dotnet run og dotnet publish fra .NET SDK CLI |
| Tekstkodning | UTF-8 almindelig tekst; ingen binær signatur eller magic bytes; BOM er valgfri og udelades i de fleste moderne værktøjer |
| Typisk filstørrelse | Under 1 KB for SDK-style-projekter; op til ~50 KB for store legacy full-framework-projekter med mange eksplicitte filindtastninger |
| MIME-type | application/xml (accepteres også som text/xml eller text/plain) |
| Ledsagefil | .csproj.user gemmer brugerdefinerede, maskinlokale IDE-indstillinger (f.eks. debug-startargumenter) og bør ikke inkluderes i versionsstyring |
| Solution-gruppering | Et eller flere .csproj-projekter kombineres i en .sln eller den nyere .slnx solution-fil til IDE og multi-projekt CLI-builds |
| Modsvarende projektformater | .vbproj (Visual Basic .NET) og .fsproj (F#) bruger det samme MSBuild XML-skema og kan eksistere i samme solution |
| Udgivet | 2002 (Visual Studio .NET / .NET Framework 1.0) |
| Seneste version | SDK-style project format (since .NET Core / VS 2017, 2017); current with .NET 9 (2024) |
| Åben standard | Ja · royaltyfri |
| Specifikation | learn.microsoft.com |
CSPROJ-konverteringer
Fællesskabets Q&A
spurgt af brugereIngen spørgsmål endnu - vær den første til at spørge om CSPROJ-filer.