Hva er CSPROJ-filformatet?
Filer med filendelsen .csproj er C#-prosjektfiler som tilhører kategorien utviklerfiler.
Hva inneholder .csproj-filer?
Innholdet i .csproj-filer inkluderer byggeinnstillinger for prosjekter skrevet i C#. De genereres av Microsoft Visual Studio eller .NET SDK-kommandolinjeverktøy når et nytt prosjekt opprettes. Følgende informasjon finnes i .csproj-filer:
- prosjektnavn og utdatatype (kjørbar fil eller klassebibliotek),
- referanser til prosjektfiler, NuGet-pakkemarginer (
<PackageReference>) og andre prosjektreferanser, - kompileringsparametere og målrammeverk (f.eks.
net9.0ellernet48), - metadata for assembly, som versjonsnumre og forfatterinformasjon.
Innholdet i .csproj-filer er skrevet med XML-markering. Moderne prosjekter bruker det kompakte SDK-stil-formatet, introdusert med .NET Core og Visual Studio 2017, som starter med <Project Sdk="Microsoft.NET.Sdk"> og er vanligvis bare noen få linjer lang - kilde- .cs-filer plukkes opp automatisk via implisitt globbing. Eldre arv-prosjekter (før 2017) bruker et mer omfattende format med en eksplisitt xmlns="http://schemas.microsoft.com/developer/msbuild/2003" navneromsdeklarasjon og lister hver kildefil individuelt.
Hva brukes .csproj-filer til?
Med .csproj-filer kan man lagre alle byggeparametere for ofte svært komplekse prosjekter - som kan bestå av flere hundre kildefiler og eksterne avhengigheter - i ett enkelt dokument. Byggemotoren MSBuild (eller CLI-kommandoen dotnet build) leser .csproj for å kompilere prosjektet. Informasjon i .csproj-filer sikrer også konsistent oppførsel på tvers av ulike maskiner og CI-miljøer, noe som eliminerer behovet for å oppgi kompileringsparametere hver gang. Ett eller flere .csproj-prosjekter grupperes sammen av en løsningsfil (.sln eller den nyere .slnx).
Merk at selve .csproj ikke inneholder kildekode - all C#-kode ligger i de separate .cs-filene den refererer til.
Kan jeg åpne .csproj-filer?
.csproj-filer genereres automatisk etter at du har valgt alternativet for å opprette et nytt prosjekt. Fordi de er skrevet med XML, er selv den enkleste tekstbehandler som Notepad tilstrekkelig for å vise eller redigere dem. Det er imidlertid verdt å huske at XML-syntaks kan være utilgivende - uten en klar nødvendighet frarådes endringer i .csproj-filer. Forhastede endringer i innholdet kan føre til inkonsistens mellom prosjektelementer, noe som resulterer i problemer med å åpne prosjektet i Visual Studio eller andre utviklingsverktøy.
Sikkerhet og trygghet
RISIKO: MEDIUMSelve .csproj-filen er ren XML og ufarlig å lese. Den reelle risikoen er hva som skjer når du BYGGER eller GJENOPPRETTER (restore) den: et C#-prosjekt kan kjøre MSBuild-targets, skript før/etter bygging, NuGet-pakkegjenoppretting (som kan kjøre installasjonsskript), kildegeneratorer og den kompilerte koden ved feilsøking/kjøring - så å åpne et upålitelig prosjekt og trykke Build/Run kan kjøre vilkårlig kode. Visual Studio viser en tillitsadvarsel for nedlastede prosjekter nettopp av denne grunn. Inspiser en ukjent .csproj sine targets, pakkereferanser og skript før bygging, og ikke bygg kode du ikke stoler på.
Formatdetaljer
i et nøtteskallProgrammer som åpner CSPROJ-filer
Tekniske detaljer
dyp spesifikasjon| Filstruktur | XML med et <Project> rotelement som inneholder <PropertyGroup>, <ItemGroup>, og valgfritt <Target> underelementer |
| Prosjektformat-varianter | SDK-stil (siden .NET Core / VS 2017): kompakt, bruker Sdk-attributt og implisitt *.cs globbing. Arv full-framework: omfattende, lister hver kildefil eksplisitt, xmlns 2003-skjema |
| Sdk-attributt | <Project Sdk="Microsoft.NET.Sdk"> starter alle moderne SDK-stil-prosjekter; varianter inkluderer Microsoft.NET.Sdk.Web (ASP.NET Core) og Microsoft.NET.Sdk.Worker |
| Deklarasjon av målrammeverk | <TargetFramework>-elementet spesifiserer kompileringsmålet (f.eks. net9.0, net48, netstandard2.0); <TargetFrameworks> (semikolon-separert) muliggjør flere mål i én fil |
| NuGet-avhengighetsdeklarasjon | <PackageReference Include="PackageName" Version="x.y.z" /> elementer inne i en <ItemGroup>; erstatter den eldre packages.config-metoden |
| Prosjekt-til-prosjekt-referanser | <ProjectReference Include="../Other/Other.csproj" /> elementer; MSBuild løser byggerekkefølge og avhengighetsgraf automatisk |
| Inkludering av kildefiler (SDK-stil) | Implisitt - alle *.cs-filer under prosjektmappen kompileres automatisk uten eksplisitte <Compile>-oppføringer |
| Utdatatyper | Exe (konsollapplikasjon), WinExe (Windows GUI), Library (klassebibliotek eller NuGet-pakke); settes via <OutputType>-egenskapen |
| Byggemotor | MSBuild - kalles direkte eller via dotnet build, dotnet run, og dotnet publish fra .NET SDK CLI |
| Tekstkoding | UTF-8 ren tekst; ingen binær signatur eller magic bytes; BOM er valgfritt og utelatt i de fleste moderne verktøy |
| Typisk filstørrelse | Under 1 KB for SDK-stil-prosjekter; opptil ~50 KB for store arv-prosjekter med mange eksplisitte filoppføringer |
| MIME-type | application/xml (også akseptert som text/xml eller text/plain) |
| Ledsagerfil | .csproj.user lagrer bruker- og maskinspesifikke IDE-innstillinger (f.eks. argumenter for feilsøking) og bør ikke sjekkes inn i versjonskontroll |
| Løsningsgruppering | Ett eller flere .csproj-prosjekter kombineres i en .sln eller den nyere .slnx-løsningsfilen for IDE og bygging av flere prosjekter via CLI |
| Tilsvarende prosjektformater | .vbproj (Visual Basic .NET) og .fsproj (F#) bruker samme MSBuild XML-skjema og kan eksistere i samme løsning |
| Utgitt | 2002 (Visual Studio .NET / .NET Framework 1.0) |
| Siste versjon | SDK-style project format (since .NET Core / VS 2017, 2017); current with .NET 9 (2024) |
| Åpen standard | Ja · royalty-fri |
| Spesifikasjon | learn.microsoft.com |
CSPROJ-konverteringer
Spørsmål og svar fra fellesskapet
spurt av brukereIngen spørsmål ennå - vær den første til å spørre om CSPROJ-filer.