Co to jest format pliku CSPROJ?
Pliki z rozszerzeniem .csproj to pliki projektów C# należące do kategorii plików programistycznych.
Co zawierają pliki .csproj?
Zawartość plików .csproj obejmuje ustawienia budowania dla projektów napisanych w języku C#. Są one generowane przez Microsoft Visual Studio lub narzędzia wiersza poleceń .NET SDK podczas tworzenia nowego projektu. W plikach .csproj można znaleźć następujące informacje:
- nazwa projektu i typ wyjściowy (aplikacja wykonywalna lub biblioteka klas),
- odwołania do plików projektu, zależności pakietów NuGet (
<PackageReference>) oraz inne odniesienia do projektów, - parametry kompilacji i docelowy framework (np.
net9.0lubnet48), - metadane zestawu (assembly), takie jak numery wersji i informacje o autorze.
Zawartość plików .csproj jest zapisana przy użyciu znacznika XML. Nowoczesne projekty używają kompaktowego formatu SDK-style, wprowadzonego wraz z .NET Core i Visual Studio 2017, który zaczyna się od <Project Sdk="Microsoft.NET.Sdk"> i zazwyczaj ma tylko kilka linii długości - źródłowe pliki .cs są wykrywane automatycznie poprzez mechanizm globbing. Starsze, spuściznowe projekty (sprzed 2017 roku) używają bardziej rozbudowanego formatu z jawną deklaracją przestrzeni nazw xmlns="http://schemas.microsoft.com/developer/msbuild/2003" i wymieniają każdy plik źródłowy z osobna.
Do czego służą pliki .csproj?
Dzięki plikom .csproj można przechowywać wszystkie parametry budowania często bardzo złożonych projektów - które mogą składać się z kilkuset plików źródłowych i zewnętrznych zależności - w jednym dokumencie. Silnik budowania MSBuild (lub polecenie CLI dotnet build) odczytuje .csproj, aby skompilować projekt. Informacje w plikach .csproj zapewniają również spójne zachowanie na różnych maszynach i w środowiskach CI, eliminując potrzebę podawania parametrów kompilacji za każdym razem. Jeden lub więcej projektów .csproj jest grupowanych razem przez plik rozwiązania (.sln lub nowszy .slnx).
Należy pamiętać, że sam .csproj nie zawiera kodu źródłowego - cały kod C# znajduje się w oddzielnych plikach .cs, do których się on odwołuje.
Czy mogę otworzyć pliki .csproj?
Pliki .csproj są generowane automatycznie po wybraniu opcji utworzenia nowego projektu. Ponieważ są one napisane w formacie XML, nawet najprostszy edytor tekstu, taki jak Notatnik, wystarczy do ich przeglądania lub edycji. Warto jednak pamiętać, że składnia XML bywa bezlitosna - bez wyraźnej potrzeby odradza się modyfikowanie plików .csproj. Pochopne zmiany w ich zawartości mogą prowadzić do niespójności między elementami projektu, co skutkuje problemami z otwarciem projektu w Visual Studio lub innych narzędziach programistycznych.
Bezpieczeństwo
RYZYKO: MEDIUMSam plik .csproj jest zwykłym tekstem XML i jest bezpieczny do odczytu. Prawdziwe ryzyko wiąże się z tym, co dzieje się podczas jego BUDOWANIA (BUILD) lub PRZYWRACANIA (RESTORE): projekt C# może uruchamiać zadania MSBuild, skrypty przed i po budowaniu, przywracanie pakietów NuGet (które mogą wykonywać skrypty instalacyjne), generatory kodu oraz skompilowany kod podczas debugowania/uruchamiania - więc otwarcie niezaufanego projektu i naciśnięcie „Build” lub „Run” może spowodować wykonanie dowolnego kodu. Visual Studio wyświetla monit o zaufanie dla pobranych projektów właśnie z tego powodu. Przed budowaniem sprawdź cele (targets), referencje pakietów i skrypty w nieznanym pliku .csproj i nie buduj kodu, któremu nie ufasz.
Szczegóły formatu
w pigułceProgramy otwierające pliki CSPROJ
Szczegóły techniczne
specyfikacja| Struktura pliku | XML z elementem głównym <Project> zawierającym elementy podrzędne <PropertyGroup>, <ItemGroup> i opcjonalnie <Target> |
| Warianty formatu projektu | SDK-style (od .NET Core / VS 2017): kompaktowy, używa atrybutu Sdk i niejawnego dopasowywania plików *.cs. Legacy full-framework: rozbudowany, jawnie wymienia każdy plik źródłowy, schemat xmlns 2003 |
| Atrybut SDK | <Project Sdk="Microsoft.NET.Sdk"> otwiera każdy nowoczesny projekt SDK-style; warianty obejmują Microsoft.NET.Sdk.Web (ASP.NET Core) i Microsoft.NET.Sdk.Worker |
| Deklaracja docelowego frameworka | Element <TargetFramework> określa cel kompilacji (np. net9.0, net48, netstandard2.0); <TargetFrameworks> (rozdzielone średnikami) umożliwia celowanie w wiele platform w jednym pliku |
| Deklaracja zależności NuGet | Elementy <PackageReference Include="NazwaPakietu" Version="x.y.z" /> wewnątrz <ItemGroup>; zastępuje starsze podejście packages.config |
| Referencje między projektami | Elementy <ProjectReference Include="../Inny/Inny.csproj" />; MSBuild automatycznie rozwiązuje kolejność budowania i graf zależności |
| Dołączanie plików źródłowych (SDK-style) | Niejawne - wszystkie pliki *.cs w katalogu projektu są kompilowane automatycznie bez jawnych wpisów <Compile> |
| Typy wyjściowe | Exe (aplikacja konsolowa), WinExe (Windows GUI), Library (biblioteka klas lub pakiet NuGet); ustawiane przez właściwość <OutputType> |
| Silnik budowania | MSBuild - wywoływany bezpośrednio lub poprzez dotnet build, dotnet run i dotnet publish z poziomu CLI .NET SDK |
| Kodowanie tekstu | Zwykły tekst UTF-8; brak sygnatury binarnej lub magicznych bajtów; BOM jest opcjonalny i pomijany w większości nowoczesnych narzędzi |
| Typowy rozmiar pliku | Poniżej 1 KB dla projektów SDK-style; do ok. 50 KB dla dużych projektów legacy z wieloma jawnymi wpisami plików |
| Typ MIME | application/xml (akceptowane również jako text/xml lub text/plain) |
| Plik towarzyszący | .csproj.user przechowuje lokalne ustawienia IDE dla użytkownika (np. argumenty uruchamiania debugowania) i nie powinien być przesyłany do systemu kontroli wersji |
| Grupowanie w rozwiązania | Jeden lub więcej projektów .csproj jest łączonych w plik rozwiązania .sln lub nowszy .slnx dla IDE i budowania wieloprojektowego w CLI |
| Odpowiedniki formatów projektów | .vbproj (Visual Basic .NET) i .fsproj (F#) używają tego samego schematu XML MSBuild i mogą współistnieć w tym samym rozwiązaniu |
| Wydano | 2002 (Visual Studio .NET / .NET Framework 1.0) |
| Najnowsza wersja | SDK-style project format (since .NET Core / VS 2017, 2017); current with .NET 9 (2024) |
| Otwarty standard | Tak · bezpłatny (royalty-free) |
| Specyfikacja | learn.microsoft.com |
Konwersje CSPROJ
Pytania i odpowiedzi społeczności
pytania użytkownikówBrak pytań - bądź pierwszą osobą, która zapyta o pliki CSPROJ.