Entwickeln Sie .NET unter Linux

(An English version of this articleisalsoavailable.)

Ich habe mehrere Maschinen, von denen eine Linux hat. Da es sich um eine Desktop-Maschine handelt, verwende ich sie häufig für die Entwicklung, möchte aber die Umgebung vorstellen.

Was kann ich tun?

.NET Core ist plattformübergreifend kompatibel, sodass Sie fast dieselbe Entwicklung wie Windows durchführen können.

Was du tun kannst

Das Folgende sind die Dinge, die ich bestätigt habe, dass es möglich ist.

Unmöglich (oder schwierig)

So erstellen Sie eine Umgebung

.NET Core .NET Core kann mit den meisten Hauptdistributionen verwendet werden, und verschiedene Pakete sind verfügbar. Ich möchte jedoch Shell Script empfehlen. Installation mit / dotnet / core / tools / dotnet-install-script).

Die Installation über Shell-Skripte erleichtert die Installation mehrerer Versionen der .NET Core-Laufzeit und -Bibliotheken.

Wenn Sie beispielsweise die LTS-Version installieren möchten, sieht dies folgendermaßen aus:

./dotnet-install.sh --channel LTS

Möglicherweise benötigen Sie zusätzliche Bibliotheken, die installiert werden müssen. Diejenige, die im Allgemeinen weniger häufig enthalten zu sein scheint, ist libicu.

Der Installationsort muss kein vom Benutzer beschreibbarer Ort sein. Zusätzliche Vorlagen, Tools usw. werden von jedem Benutzer gesteuert.

Entwicklungsumgebung

Visual Studio Code Wenn Sie eine Entwicklungsumgebung kostenlos vorbereiten möchten, werden die folgenden Kombinationen empfohlen.

Mit den oben genannten Informationen können Sie eine Umgebung erstellen, in der Sie mit der Entwicklung beginnen können.

JetBrains Rider Wenn Sie bereit sind, Geld für Ihre Entwicklungsumgebung auszugeben, sollten Sie [JetBrains Rider] in Betracht ziehen (https://www.jetbrains.com/ja-jp/rider/). JetBrains ist auch Entwickler von ReSharper, einem Refactoring-Plug-In für Visual Studio, das erweiterte Codierungsunterstützung bietet. Daher kann es bequem entwickelt werden.

Rider hat Rider allein, Rider und ReSharper gebündelte Version und All Products Pack einschließlich aller IDE-Produkte. Weitere Informationen finden Sie auf der Kaufseite. (Ich persönlich abonniere das All Products Pack, da ich es möglicherweise auch in anderen Sprachen verwenden kann.) Die meisten JetBrains-IDEs sind nicht nur auf Rider beschränkt, sondern auch in anderen Umgebungen wie Windows. Da es verwendet werden kann, ist es auch nützlich, dass dieselbe IDE auf mehreren Betriebssystemen verwendet werden kann.

Die Paketverwaltung von NuGet kann auch grafisch erfolgen. Daher wird sie für diejenigen empfohlen, die viele Möglichkeiten haben, C # auszuführen.

Andere

Wenn Sie OmniSharp (auch in der obigen Erweiterung verwendet) verwenden, können Sie Language Server Protocol nach Belieben verwenden. Es ist auch möglich, mit einem Editor zu entwickeln. Diese Methode hängt vom Editor ab, daher werde ich sie hier weglassen.

Ich werde es sofort versuchen

Projekterstellung

Sobald Sie die Umgebung eingerichtet haben, können Sie mit der Entwicklung beginnen.

Verwenden Sie den Befehl dotnet, um ein Projekt zu erstellen.

dotnet new console -o myapp

Wenn Sie es ohne Argumente ausführen, werden die Vorlagen angezeigt, die Sie verwenden können:

dotnet new
Usage: new [options]

Options:
  -h, --help          Displays help for this command.
  -l, --list          Lists templates containing the specified name. If no name is specified, lists all templates.
  -n, --name          The name for the output being created. If no name is specified, the name of the current directory is used.
  -o, --output        Location to place the generated output.
  -i, --install       Installs a source or a template pack.
  -u, --uninstall     Uninstalls a source or a template pack.
  --nuget-source      Specifies a NuGet source to use during install.
  --type              Filters templates based on available types. Predefined values are "project", "item" or "other".
  --dry-run           Displays a summary of what would happen if the given command line were run if it would result in a template creation.
  --force             Forces content to be generated even if it would change existing files.
  -lang, --language   Filters templates based on language and specifies the language of the template to create.
  --update-check      Check the currently installed template packs for updates.
  --update-apply      Check the currently installed template packs for update, and install the updates.


Templates                                         Short Name               Language          Tags                                 
----------------------------------------------------------------------------------------------------------------------------------
Console Application                               console                  [C#], F#, VB      Common/Console                       
Class library                                     classlib                 [C#], F#, VB      Common/Library                       
WPF Application                                   wpf                      [C#]              Common/WPF                           
WPF Class library                                 wpflib                   [C#]              Common/WPF                           
WPF Custom Control Library                        wpfcustomcontrollib      [C#]              Common/WPF                           
WPF User Control Library                          wpfusercontrollib        [C#]              Common/WPF                           
Windows Forms (WinForms) Application              winforms                 [C#]              Common/WinForms                      
Windows Forms (WinForms) Class library            winformslib              [C#]              Common/WinForms                      
Worker Service                                    worker                   [C#]              Common/Worker/Web                    
Unit Test Project                                 mstest                   [C#], F#, VB      Test/MSTest                          
NUnit 3 Test Project                              nunit                    [C#], F#, VB      Test/NUnit                           
NUnit 3 Test Item                                 nunit-test               [C#], F#, VB      Test/NUnit                           
xUnit Test Project                                xunit                    [C#], F#, VB      Test/xUnit                           
Razor Component                                   razorcomponent           [C#]              Web/ASP.NET                          
Razor Page                                        page                     [C#]              Web/ASP.NET                          
MVC ViewImports                                   viewimports              [C#]              Web/ASP.NET                          
MVC ViewStart                                     viewstart                [C#]              Web/ASP.NET                          
Blazor Server App                                 blazorserver             [C#]              Web/Blazor                           
Blazor WebAssembly App                            blazorwasm               [C#]              Web/Blazor/WebAssembly               
ASP.NET Core Empty                                web                      [C#], F#          Web/Empty                            
ASP.NET Core Web App (Model-View-Controller)      mvc                      [C#], F#          Web/MVC                              
ASP.NET Core Web App                              webapp                   [C#]              Web/MVC/Razor Pages                  
ASP.NET Core with Angular                         angular                  [C#]              Web/MVC/SPA                          
ASP.NET Core with React.js                        react                    [C#]              Web/MVC/SPA                          
ASP.NET Core with React.js and Redux              reactredux               [C#]              Web/MVC/SPA                          
Razor Class Library                               razorclasslib            [C#]              Web/Razor/Library/Razor Class Library
ASP.NET Core Web API                              webapi                   [C#], F#          Web/WebAPI                           
ASP.NET Core gRPC Service                         grpc                     [C#]              Web/gRPC                             
dotnet gitignore file                             gitignore                                  Config                               
global.json file                                  globaljson                                 Config                               
NuGet Config                                      nugetconfig                                Config                               
Dotnet local tool manifest file                   tool-manifest                              Config                               
Web Config                                        webconfig                                  Config                               
Solution File                                     sln                                        Solution                             
Protocol Buffer File                              proto                                      Web/gRPC      

Sie können die fehlende Vorlage online herunterladen und installieren.

dotnet install hoge

Dadurch wird der Kesselplattencode für Ihre Konsolenanwendung im myapp-Verzeichnis generiert, sodass Sie den Editor öffnen und mit der Entwicklung beginnen können. (Visual Studio Code erfordert eine Netzumgebung, da die erforderlichen Komponenten und das Herunterladen des C # -Plug-Ins beim ersten Start erfolgen und es beim nächsten Mal etwas dauern kann.)

Wenn Sie Rider verwenden, können Sie ein Projekt in einem speziellen Dialogfeld erstellen.

riderproject.png

Einige Vorlagen werden nicht unterstützt. In diesem Fall müssen Sie ein Projekt über die Befehlszeile erstellen.

.NET Core-Tools

Mit dem Befehl dotnet können Sie Projekte in Form von [.NET Core Tools] erstellen und betreiben (https://docs.microsoft.com/ja-jp/dotnet/core/tools/global-tools). Sie können auch verschiedene Tools installieren.

Beispielsweise kann PowerShell auch als Teil von .NET installiert werden. In diesem Fall:

dotnet tool install -g powershell

Dies gilt auch, wenn Sie andere ML.NET-Tools installieren möchten.

dotnet tool install -g mlnet

debuggen

Es ist auch möglich, mit Visual Studio-Code zu debuggen, und dies kann wie ein normales Visual Studio erfolgen. vscode.png

Es kann jedoch etwas gewöhnungsbedürftig sein, da die Einstellungen wie launch.json </ code> neu geschrieben werden müssen. Ein Beispiel ist unten gezeigt.

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": ".NET Core Launch (console)",
            "type": "coreclr",
            "request": "launch",
            "WARNING01": "*********************************************************************************",
            "WARNING02": "The C# extension was unable to automatically decode projects in the current",
            "WARNING03": "workspace to create a runnable launch.json file. A template launch.json file has",
            "WARNING04": "been created as a placeholder.",
            "WARNING05": "",
            "WARNING06": "If OmniSharp is currently unable to load your project, you can attempt to resolve",
            "WARNING07": "this by restoring any missing project dependencies (example: run 'dotnet restore')",
            "WARNING08": "and by fixing any reported errors from building the projects in your workspace.",
            "WARNING09": "If this allows OmniSharp to now load your project then --",
            "WARNING10": "  * Delete this file",
            "WARNING11": "  * Open the Visual Studio Code command palette (View->Command Palette)",
            "WARNING12": "  * run the command: '.NET: Generate Assets for Build and Debug'.",
            "WARNING13": "",
            "WARNING14": "If your project requires a more complex launch configuration, you may wish to delete",
            "WARNING15": "this configuration and pick a different template using the 'Add Configuration...'",
            "WARNING16": "button at the bottom of this file.",
            "WARNING17": "*********************************************************************************",
            "preLaunchTask": "build",
            "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/myapp.dll",
            "args": [],
            "cwd": "${workspaceFolder}",
            "console": "internalConsole",
            "stopAtEntry": false
        },
        {
            "name": ".NET Core Attach",
            "type": "coreclr",
            "request": "attach",
            "processId": "${command:pickProcess}"
        }
    ]
}

Die Einstellungsdatei selbst hat eine Funktion, die automatisch generiert wird. Sie müssen jedoch den Plattformnamen ( netcoreapp3.1 </ code>) und den Anwendungsnamen ( myapp.dll </ code>) selbst festlegen.

Bei der Verwendung von Rider ist dies recht einfach, da viele Teile automatisch eingestellt werden. rider.png

Schließlich

Vor dem Aufkommen von .NET Core gab es Mono usw., aber .NET hatte immer noch einen starken Charakter als Windows-Umgebung, aber nach dem Aufkommen von .NET Core ist es möglich, sowohl unter Linux als auch unter Tools zu entwickeln. Es ist gekommen zu sein.

Es kann Situationen geben, in denen es praktisch ist, unter Linux entwickeln zu können, insbesondere wenn das Bereitstellungsziel Linux ist. In einem solchen Fall halte ich es für einen großen Vorteil, auch unter Linux eine Entwicklungsumgebung erstellen zu können.

Recommended Posts