Vad är filformatet CSPROJ?
Filer med filtillägget .csproj är C#-projektfiler som tillhör kategorin utvecklarfiler.
Vad innehåller .csproj-filer?
Innehållet i .csproj-filer inkluderar bygginställningar för projekt skrivna i C#. De genereras av Microsoft Visual Studio eller .NET SDK-kommandoradsverktyg när ett nytt projekt skapas. Följande information kan hittas i .csproj-filer:
- projektnamn och utdatatyp (körbar fil eller klassbibliotek),
- referenser till projektfiler, NuGet-paketberoenden (
<PackageReference>) och andra projektreferenser, - kompilationsparametrar och målramverk (t.ex.
net9.0ellernet48), - metadata för assembly såsom versionsnummer och författarinformation.
Innehållet i .csproj-filer är skrivet med XML-markup. Moderna projekt använder det kompakta SDK-formatet, som introducerades med .NET Core och Visual Studio 2017, vilket inleds med <Project Sdk="Microsoft.NET.Sdk"> och är vanligtvis bara några rader långt - källfiler av typen .cs-filer plockas upp automatiskt via implicit globbing. Äldre legacy-projekt (före 2017) använder ett mer utförligt format med en explicit xmlns="http://schemas.microsoft.com/developer/msbuild/2003" namnrymdsdeklaration och listar varje källfil individuellt.
Vad används .csproj-filer till?
Med .csproj-filer kan man lagra alla byggparametrar för ofta mycket komplexa projekt - som kan bestå av flera hundra källfiler och externa beroenden - i ett enda dokument. Byggmotorn MSBuild (eller CLI-kommandot dotnet build) läser .csproj för att kompilera projektet. Information i .csproj-filer säkerställer också ett konsekvent beteende mellan olika maskiner och CI-miljöer, vilket eliminerar behovet av att ange kompilationsparametrar varje gång. Ett eller flera .csproj-projekt grupperas tillsammans av en lösningsfil (.sln eller den nyare .slnx).
Notera att själva .csproj-filen inte innehåller någon källkod - all C#-kod finns i de separata .cs-filerna som den refererar till.
Kan jag öppna .csproj-filer?
.csproj-filer genereras automatiskt efter att ha valt alternativet att skapa ett nytt projekt. Eftersom de är skrivna med XML räcker även den enklaste textredigerare som Notepad för att visa eller redigera dem. Det är dock värt att komma ihåg att XML-syntax kan vara oförlåtande - utan en tydlig nödvändighet avråds modifieringar av .csproj-filer. Oförsiktiga ändringar i deras innehåll kan leda till inkonsekvenser bland projektelement, vilket resulterar i problem med att öppna projektet i Visual Studio eller andra utvecklingsverktyg.
Säkerhet & trygghet
RISK: MEDIUMSjälva .csproj-filen är vanlig XML och ofarlig att läsa. Den verkliga risken är vad som händer när du BYGGER eller ÅTERSTÄLLER (RESTORE) den: ett C#-projekt kan köra MSBuild-targets, skript före/efter bygge, NuGet-paketåterställning (som kan köra installationsskript), källkodsgeneratorer och den kompilerade koden vid felsökning/körning - så att öppna ett okänt projekt och trycka på Build/Run kan exekvera godtycklig kod. Visual Studio visar en förtroendefråga för nedladdade projekt av just denna anledning. Granska en obekant .csproj-fils targets, paketreferenser och skript innan du bygger, och bygg inte kod som du inte litar på.
Formatdetaljer
i ett nötskalProgram som öppnar CSPROJ-filer
Tekniska detaljer
djup specifikation| Filstruktur | XML med ett <Project>-rotelement som innehåller <PropertyGroup>, <ItemGroup> och valfria <Target>-underelement |
| Varianter av projektformat | SDK-style (sedan .NET Core / VS 2017): kompakt, använder Sdk-attribut och implicit *.cs-globbing. Legacy full-framework: utförlig, listar varje källfil explicit, xmlns 2003-schema |
| Sdk-attribut | <Project Sdk="Microsoft.NET.Sdk"> inleder varje modernt SDK-style-projekt; varianter inkluderar Microsoft.NET.Sdk.Web (ASP.NET Core) och Microsoft.NET.Sdk.Worker |
| Deklaration av målramverk | <TargetFramework>-elementet specificerar målet för kompilering (t.ex. net9.0, net48, netstandard2.0); <TargetFrameworks> (semikolonseparerade) möjliggör flera mål i en fil |
| Deklaration av NuGet-beroenden | <PackageReference Include="PackageName" Version="x.y.z" />-element inuti en <ItemGroup>; ersätter det äldre tillvägagångssättet med packages.config |
| Referenser mellan projekt | <ProjectReference Include="../Other/Other.csproj" />-element; MSBuild löser byggordning och beroendegraf automatiskt |
| Inkludering av källfiler (SDK-style) | Implicit - alla *.cs-filer under projektkatalogen kompileras automatiskt utan explicita <Compile>-poster |
| Utdatatyper | Exe (konsolapplikation), WinExe (Windows GUI), Library (klassbibliotek eller NuGet-paket); ställs in via egenskapen <OutputType> |
| Byggmotor | MSBuild - anropas direkt eller via dotnet build, dotnet run och dotnet publish från .NET SDK CLI |
| Textkodning | UTF-8 vanlig text; ingen binär signatur eller magic bytes; BOM är valfritt och utelämnas i de flesta moderna verktyg |
| Typisk filstorlek | Under 1 KB för SDK-style-projekt; upp till ~50 KB för stora legacy full-framework-projekt med många explicita filposter |
| MIME-typ | application/xml (accepteras även som text/xml eller text/plain) |
| Följefil | .csproj.user lagrar användarspecifika, lokala IDE-inställningar (t.ex. argument för felsökningsstart) och bör inte checkas in i versionshantering |
| Lösningsgruppering | Ett eller flera .csproj-projekt kombineras i en .sln eller den nyare .slnx-lösningsfilen för IDE- och flerprojekt-CLI-byggen |
| Motsvarande projektformat | .vbproj (Visual Basic .NET) och .fsproj (F#) använder samma MSBuild XML-schema och kan samexistera i samma lösning |
| Släppt | 2002 (Visual Studio .NET / .NET Framework 1.0) |
| Senaste version | SDK-style project format (since .NET Core / VS 2017, 2017); current with .NET 9 (2024) |
| Öppen standard | Ja · royaltyfri |
| Specifikation | learn.microsoft.com |
CSPROJ-konverteringar
Frågor & svar
frågat av användareInga frågor än - bli den första att fråga om CSPROJ-filer.