Gå til indholdet

Løsning og projekt

En C# løsning (solution på engelsk – løsning på dansk er en lidt skidt oversættelse) består typisk af et eller flere projekter, og et enkelt projekt kan være en konsol-applikation (ligesom du oprettede i forrige afsnit), en web-applikation, en Windows-applikation, mobil-applikation og meget andet.

Information til undervisere

Vis kursisten indholdet i en .sln-fil og en .csproj fil. Skab eventuelt et simpelt eksempel med en løsning bestående af en konsol app og et klassebibliotek

En løsning er repræsenteret af en .sln-fil, og du kan finde en visuel repræsentation i Solution Explorer-vinduet. Der kan kun være én løsning ad gangen i VS/VSC, men du må gerne have flere udviklingsmiljøer åbne på samme tid.

Tip

Hvis du arbejder med VSC, er der ikke nødvendigvis en .sln-fil, der repræsenterer en løsning. Men den kan tilføjes med kommandoen ”dotnet new sln”.

Hvert projekt kan være opdelt i flere filer, som kompileren vil sørge for at kompilere sammen. Et projekt er repræsenteret af en .csproj-fil, og består typisk af en eller flere .cs-filer med kode samt eventuelle konfigurationsfiler. Der kan være mange projekter under hver løsning.

Et projekt kan have en filstruktur som følger:

c:\temp\MinTest
    MinTest.sln
    \MinTest
        MinTest.csproj
        Program.cs

Hvis du åbner .sln-filen eller csproj-filen i Notepad, vil du kunne se, at det er filer VS bruger til at holde styr på løsning og tilhørende projekter. Du vil sjældent tosse rundt i disse filer, men nu ved du, hvad de består af.

Du må gerne have mange cs-filer (kodefiler) i et projekt, og du kan organisere disse, som du ønsker i mapper. Typisk vil du have en .cs-fil til hver typedefinition, og dermed ende med mange filer, men du kan også vælge at have flere typer i samme fil – kompilereren er ligeglad.

Eksempel

For at se en konkret løsning med projekter kan du gøre følgende

  • åbn en terminal og naviger til en temp-mappe c:\temp eksempelvis
  • opret en ny mappe MinApp og naviger til den
  • opret en konsol app med dotnet new console -n MinApp.Console
  • opret et klasse bibliotek med dotnet new classlib -n MinApp.ClassLibrary
  • opret en sln-fil med dotnet new sln -n MinApp
  • tilføj MinApp.Console til sln-fil med dotnet sln .\MinApp.sln add .\MinApp.Console\MinApp.Console.csproj
  • tilføj MinApp.ClassLibrary til sln-fil med dotnet sln .\MinApp.sln add .\MinApp.ClassLibrary\MinApp.ClassLibrary.csproj
  • prøv en dir for at se fil strukturen
  • åbn sln-filen for at se indholdet
  • gå til MinApp.Console med cd .\MinApp.Console\
  • skab en reference fra MinApp.Console til MinApp.ClassLibrary med dotnet add reference ..\MinApp.ClassLibrary\MinApp.ClassLibrary.csproj
  • ret class1.cs i .\MinApp.ClassLibrary til
namespace MinApp.ClassLibrary;
public class Class1
{
    public static string Test()
    {
        return "Test";
    }
}
  • ret program.cs i .\MinApp.Console til
Console.WriteLine("Hello, World!");
Console.WriteLine(MinApp.ClassLibrary.Class1.Test());
  • naviger til ./MinApp.Console og kør applikation med dotnet run
  • det skulle gerne resultere i
Hello, World!
Test
  • som beviser at de to projekter er bundet sammen

Det er et kort eksempel på en løsning med to projekter. Det kan naturligvis også gøres i VS eller Rider, men mange gange er det faktisk nemmere og hurtigere at gøre fra en terminal.