Projektstruktur
Ett C#-projekt består av ett antal textfiler. Några av dem innehåller själva C#-koden; andra innehåller information om hur den koden ska köras, vilken version av C# som ska användas och så vidare.
Oftast brukar C#-projektet också ingå i en solution – ett slags samling av ett eller flera projekt. När ett nytt projekt skapas genom C# Toolbox-tillägget så skapas både en solution, ett projekt i denna solution, och en första C#-fil i projektet.
Mappstruktur

Mappen som skapas av C# Dev Kit har följande struktur:
.vscode
Mapp med projektet
obj
bin
csproj-fil
cs-filer
sln-fil
.vscode är en mapp som Vidual Studio Code skapar för att hålla reda på sina egna inställningar – till exempel när filer för körning och debuggning skapas, eller när man sedan ändrar i de filerna (internalConsole --> externalTerminal).
Mapp med projektet – en mapp som får projektets namn och innehåller alla filer som hör till själva C#-projektet.
obj-mappen innehåller "mellanfiler" – filer som dotnet/C# skapar som ett mellanled mellan källkoden och de färdiga körbara filerna. Den kan tas bort, men kommer då att återskapas nästa gång projektet körs eller debuggas.
bin-mappen innehåller de körbara filer som dotnet/C# skapar utifrån källkoden. Det är filerna i den här mappen som är själva "programmet", och som man kan distribuera till andra människor och datorer.
csproj-filen innehåller information om C#-projektet.
cs-filerna innehåller själva C#-källkoden.
sln-filen är den fil som innehåller information om den solution som skapats.
C#-projekt (csproj)
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>En csproj-fil är en XML-fil med information om C#-projektet. Varje bit information kallas för en property.
Properties
Properties som är ifyllda från början:
OutputType – vilken sorts fil projektet ska kompileras till. Här: en exe-fil (körbar fil i windows).
TargetFramework – vilken version av dotnet / C# som ska användas. I exemplet är det dotnet 6.
ImplicitUsings – huruvida man vill använda implicita usings.
Nullable – Dotnet 6 introducerar "nullable reference types", något som mestadels märks i att man får varningar vid vanliga strings… Enklaste lösningen att hantera detta är att helt enkelt stänga av Nullable genom att kommentera bort raden eller ändra "enable" till "disable".
Man kan också lägga till fler properties, till exempel:
<PublishSingleFile>true</PublishSingleFile>
<PublishTrimmed>true</PublishTrimmed>Dessa två gör så att när man kompilerar projektet så samlas allt man behöver i en enda exe-fil, och så att den filen bara innehåller det som absolut behövs för att köra programmet.
PropertyGroup
I en csproj används <PropertyGroup>-element för att klumpa ihop egenskaper (properties).
ItemGroup
ItemGroup-element används för att gruppera properties som beskriver filer eller grupper av filer som ska inkluderas i projektet. Till exempel externa bibliotek som lagts till via nuget och Resursfiler.
<ItemGroup>
<PackageReference Include="Raylib-cs" Version="4.5.0.4" />
</ItemGroup>
<ItemGroup>
<Content Include="*.png" CopyToOutputDirectory="Always"/>
</ItemGroup>Dotnet-solutions (sln)
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30114.105
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DemoProject", "DemoProject\DemoProject.csproj", "{FE320B4D-B077-4D3C-BBF4-306ADAA15842}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{FE320B4D-B077-4D3C-BBF4-306ADAA15842}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FE320B4D-B077-4D3C-BBF4-306ADAA15842}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FE320B4D-B077-4D3C-BBF4-306ADAA15842}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FE320B4D-B077-4D3C-BBF4-306ADAA15842}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobalSLN-filen innehåller en hel del information, där det viktigaste för oss är vilka projekt som ingår. I exemplet ingår ett enda projekt – "DemoProject".
Last updated
Was this helpful?