Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

Wie füge ich im VSCode Referenzen auf System.Management hinzu?
Jaftali
myCSharp.de - Member



Dabei seit:
Beiträge: 23

Themenstarter:

Wie füge ich im VSCode Referenzen auf System.Management hinzu?

beantworten | zitieren | melden

Hallo,

Mein aktuelles Projekt heißt "VS_Code_Projekt", ich habe es in VS Code mit dem Befehl dotnet new console erzeugt Es weist die unten abgebildete Verzeichnisstruktur auf. Würde mir jemand kurz erklären, wie man in VS Code die Assembly/Referenz für System.Management hinzufügt?

VS_CODE_PROJEKT
.vscode
{} launch.json
{} tasks.json
bin\Debug netcoreapp3.1
obj
Debug\netcoreapp3.1
.NETCoreApp,Version=v3.1.AssemblyAttributes.cs
VS_Code_Projekt. Assemblylnfo.es
VS_Code_Projekt.Assemblylnfolnputs.cache
VS_Code_Projekt.assets.cache
VS_Code_Projekt.csproj.CoreCompilelnputs.cache
VS_Code_Projekt.csproj.FileListAbsolute.txt
VS_Code_Projekt.csprojAssemblyReference.cache
project.assets.json
project.nuget.cache
VS_Code_Projekt.csproj.nuget.dgspec.json
VS_Code_Projekt.csproj.nuget.g.props
VS_Code_Projekt.csproj.nuget.g.targets
Program.cs
VS_Code_Projekt.csproj

Danke und viele Grüße
Attachments
private Nachricht | Beiträge des Benutzers
Papst
myCSharp.de - Experte



Dabei seit:
Beiträge: 355
Herkunft: Kassel

beantworten | zitieren | melden

Du musst es als NuGet Paket Referenz hinzufügen.

Via

dotnet add package
es wird dann als Eintrag in deiner *.csproj hinzugefügt.
private Nachricht | Beiträge des Benutzers
Jaftali
myCSharp.de - Member



Dabei seit:
Beiträge: 23

Themenstarter:

beantworten | zitieren | melden

Danke für die schnelle Hilfe.

Der Konsolenbefehl:
dotnet add package System.Management --version 5.0.0

gibt bei mir folgende Fehlermeldungen aus:
Fehler
error: Das Paket "System.Management" wurde nicht gefunden. Es sind keine Pakete mit dieser ID in folgenden Quellen vorhanden: Microsoft Visual Studio Offline Packages
error: Das Paket "System.Management" ist mit all Frameworks im Projekt "C:\...\VS_Code_Projekt.csproj" nicht kompatibel.

Habe ich das richtig verstanden, dass der Interpreter nur die Offline-Quellen durchsucht?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Jaftali am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15705
Herkunft: BW

beantworten | zitieren | melden

NuGet hält bzw. baut einen lokalen Cache auf, um NuGet.org entsprechend zu entlasten und auch Pakete Offline verfügbar zu machen; Standardmäßig wird dazu ein Ordner im Benutzerverzeichnis angelegt.

Leg Dir, wie es die Dokumentation auch sagt, eine NuGet.config an, in der die Feeds gepflegt werden, die Du nutzen willst.
Die NuGet.Config muss dazu im Root-Verzeichnis sein.
<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <packageSources>
    <clear />
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
  </packageSources>

</configuration>

Dazu kann man auch direkt sagen, dass Du ganz weit weg von der Verzeichnisstruktur bist, die mit .NET empfohlen ist und das .NET Tooling an der Stelle auch verwendet / darauf orientiert ist.
.NET project structure

Ansonsten mal den Error genau lesen und den Hinweis beachten
Fehler
Das Paket "System.Management" ist mit all Frameworks im Projekt "C:\...\VS_Code_Projekt.csproj" nicht kompatibel.
private Nachricht | Beiträge des Benutzers
Jaftali
myCSharp.de - Member



Dabei seit:
Beiträge: 23

Themenstarter:

beantworten | zitieren | melden

Erstmal herzlichen Dank für deine wertvolle Antwort.

Du hast geschrieben:
Zitat
"Dazu kann man auch direkt sagen, dass Du ganz weit weg von der Verzeichnisstruktur bist, die mit .NET empfohlen ist und das .NET Tooling an der Stelle auch verwendet / darauf orientiert"

Ich bin davon ausgegangen, dass mir der Konsolenbefehl
dotnet new console 
eine .NET-konforme Verzeichnisstruktur baut.

Welches Projekttemplate würde man denn verwenden?
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 10072

beantworten | zitieren | melden

Das ist schon die richtige Verzeichnisstruktur, nur du hast nichts im obj verzeichnis zu suchen, da ist nur "Zwischencode" drin.

Auch solltest Du dringend die Zusammenhänge verstehen.
Du hast Dotnet Core 3.1 installiert, versuchst aber ein Nuget paket für NET 5 zu installieren, das geht natürlich nicht.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15705
Herkunft: BW

beantworten | zitieren | melden

Zitat von Jaftali
Welches Projekttemplate würde man denn verwenden?

Aus Projektsicht ist alles richtig; aus Solutionsicht aber nicht.
Im Endeffekt fehlt dir letzteres, da eine NuGet.config in die Solution und nicht in das Projekt gehört.
Zitat von FZelle
Du hast Dotnet Core 3.1 installiert, versuchst aber ein Nuget paket für NET 5 zu installieren, das geht natürlich nicht.
Das dachte ich zunächst auch; aber ich sehe keine Dependency zu .NET 5.

Die Dependencies sind:
- .NETCoreApp 2.0
- .NETFramework 4.5
- .NETStandard 2.0

Konnte das Problem auch nicht nachstellen; ich kann problemlos System.Management 5.0.0 in mein 3.1 Testprojekt hinzufügen - sowohl in Visual Studio wie auch mit VSCode und der .NET CLI.
Zitat von CLI
C:\source\ConsoleApp1\ConsoleApp1> dotnet add package System.Management --version 5.0.0
Determining projects to restore...
Writing C:\Users\Ben\AppData\Local\Temp\tmpCD32.tmp
info : Adding PackageReference for package 'System.Management' into project 'C:\source\ConsoleApp1\ConsoleApp1\ConsoleApp1.csproj'.
info : Restoring packages for C:\source\ConsoleApp1\ConsoleApp1\ConsoleApp1.csproj...
info : Package 'System.Management' is compatible with all the specified frameworks in project 'C:\source\ConsoleApp1\ConsoleApp1\ConsoleApp1.csproj'.
info : PackageReference for package 'System.Management' version '5.0.0' added to file 'C:\source\ConsoleApp1\ConsoleApp1\ConsoleApp1.csproj'.
info : Committing restore...
info : Assets file has not changed. Skipping assets file writing. Path: C:\source\ConsoleApp1\ConsoleApp1\obj\project.assets.json
log : Restored C:\source\ConsoleApp1\ConsoleApp1\ConsoleApp1.csproj (in 65 ms).
C:\source\ConsoleApp1\ConsoleApp1>
private Nachricht | Beiträge des Benutzers
Jaftali
myCSharp.de - Member



Dabei seit:
Beiträge: 23

Themenstarter:

beantworten | zitieren | melden

@Abt nachdem ich auf deinen Rat hin die NuGet.config ergänzt habe, funktioniert es bei mir auch. Vielen Dank für die kompetente und schnelle Hilfe.

Vielleicht habt Ihr meine alten Threads verfolgt und könnt euch noch daran erinnern, dass ich mit meinen Schülern umsteigen möchte von SharpDevelop auf VS Code. Nun ist es so, dass auf den Arbeitsplatzrechnern der Schüler nicht immer eine Verbindung zum Internet verfügbar ist. Das ist z. B. dann der Fall, wenn eine Klausur geschrieben wird oder es Probleme mit dem Provider gibt. Deshalb dazu nochmal 'ne Ergänzungsfrage. Kann man ein Projekttemplate erstellen, das z. B. nur für eine Klassenarbeit verwendet werden soll und zum Lösen der Aufgabenstellungen alle Assemblies enthält?
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15705
Herkunft: BW

beantworten | zitieren | melden

Dazu müsstest Du einen lokalen NuGet Cache aufbauen, zB auf einem extra Share oder Server.
Anders keine Chance, weil moderne Paket-orienterte Ökosysteme wie Java, .NET, JavaScript-Welt alle externe Ressourcen benötigen.
private Nachricht | Beiträge des Benutzers
Jaftali
myCSharp.de - Member



Dabei seit:
Beiträge: 23

Themenstarter:

beantworten | zitieren | melden

Zitat
Dazu müsstest Du einen lokalen NuGet Cache aufbauen, zB auf einem extra Share oder Server.

Okay. Alternativ könnte ich den Schülern aber eine vorkonfigurierte Solution mit allen wichtigen Assemblies bereitstellen, die bereits einen Build-Prozess durchlaufen hat?
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15705
Herkunft: BW

beantworten | zitieren | melden

So funktioniert halt das Ökosystem nicht (mehr). Assembly-Handling (aka DLL Hell) ist ja genau das, was man nicht mehr will und es deswegen Paket Manager gibt.
Musst Du entscheiden, wie Du das den Schülern qualitativ beibringen magst.
private Nachricht | Beiträge des Benutzers
david.m
myCSharp.de - Member



Dabei seit:
Beiträge: 113

beantworten | zitieren | melden

Im Netzwerk einen eigenen NuGet Server z.B. mit BaGet bereitstellen oder einen lokalen Feed lokal oder einen Share einrichten.
Und die Quelle mit dotnet nuget add source hizufügen.
private Nachricht | Beiträge des Benutzers
Jaftali
myCSharp.de - Member



Dabei seit:
Beiträge: 23

Themenstarter:

beantworten | zitieren | melden

Vielen Dank für eure Einschätzungen. Hättet ihr vielleicht noch einen Praxis-Tipp für mich. Weiter oben wurde davon gesprochen, dass es im .NET-Core-Umfeld so eine Art recommended Verzeichnissstruktur gibt (Stichwort: Standard Directory Layout).

Bei Maven sieht die Sache so aus, wie sie hier beschrieben wird.

Meine Frage: Gibt es neben dem hier genannten Link eine solche Übersicht über das komplette Standard Directory Layout für das .NET-Core-Umfeld auch von offizieller Seite und welcher ist der beste Weg, um ein solches anzulegen. Fügt ihr die Konfigurationsdateien und Folder jedes Mal neu per Hand hinzu, habt ihr ein eigenes Template für bestimmte Zwecke erstellt oder bedient man sich einer Art öffentlichem Template-Repo?
private Nachricht | Beiträge des Benutzers
Papst
myCSharp.de - Experte



Dabei seit:
Beiträge: 355
Herkunft: Kassel

beantworten | zitieren | melden

Du könntest dir ein solches Template selber erstellen und als NuGet Paket bereitstellen.

Die dotnet CLI bietet solche Templates ja an. (Stichwort dotnet new -i)
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15705
Herkunft: BW

beantworten | zitieren | melden

Zitat von Jaftali
auch von offizieller Seite und welcher ist der beste Weg, um ein solches anzulegen.
Was ist für Dich die "offizielle Seite"?

Microsoft macht hier bewusst keine fixen Regeln (aka Gesetze), sondern lässt hier die Community entscheiden, welcher Weg gegangen wird. Wie es auch in anderen Open Source Ökosystemen der Fall ist.
Und die Breite der Community hat am Ende die verlinkte Struktur erarbeitet.

Wenn es Dir aber hilft: david fowler - dem das gist aus dem Link "gehört" - ist sowas wie ein "Chef Architekt" bei Microsoft für .NET (und der Erfinder von SignalR).
Zitat von Jaftali
Fügt ihr die Konfigurationsdateien und Folder jedes Mal neu per Hand hinzu, habt ihr ein eigenes Template für bestimmte Zwecke erstellt oder bedient man sich einer Art öffentlichem Template-Repo?

Nen Template wie es Papst beschrieben hat sowie einfach eine einmal angelegte Ordnerstruktur, die ich dann von Hand kopiere.
private Nachricht | Beiträge des Benutzers