Laden...

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

Erstellt von Jaftali vor 3 Jahren Letzter Beitrag vor 3 Jahren 967 Views
J
Jaftali Themenstarter:in
28 Beiträge seit 2020
vor 3 Jahren
Wie füge ich im VSCode Referenzen auf System.Management hinzu?

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

P
441 Beiträge seit 2014
vor 3 Jahren

Du musst es als NuGet Paket Referenz hinzufügen.

Via

dotnet add package

es wird dann als Eintrag in deiner *.csproj hinzugefügt.

J
Jaftali Themenstarter:in
28 Beiträge seit 2020
vor 3 Jahren

Danke für die schnelle Hilfe.

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

gibt bei mir folgende Fehlermeldungen aus:

Fehlermeldung:
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?

16.807 Beiträge seit 2008
vor 3 Jahren

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> Fehlermeldung:

Das Paket "System.Management" ist mit all Frameworks im Projekt "C:...\VS_Code_Projekt.csproj" nicht kompatibel.

J
Jaftali Themenstarter:in
28 Beiträge seit 2020
vor 3 Jahren

Erstmal herzlichen Dank für deine wertvolle Antwort.

Du hast geschrieben:

"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?

F
10.010 Beiträge seit 2004
vor 3 Jahren

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.

16.807 Beiträge seit 2008
vor 3 Jahren

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.

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.

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>

J
Jaftali Themenstarter:in
28 Beiträge seit 2020
vor 3 Jahren

@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?

16.807 Beiträge seit 2008
vor 3 Jahren

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.

J
Jaftali Themenstarter:in
28 Beiträge seit 2020
vor 3 Jahren

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?

16.807 Beiträge seit 2008
vor 3 Jahren

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.

D
152 Beiträge seit 2013
vor 3 Jahren

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.

J
Jaftali Themenstarter:in
28 Beiträge seit 2020
vor 3 Jahren

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?

P
441 Beiträge seit 2014
vor 3 Jahren

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)

16.807 Beiträge seit 2008
vor 3 Jahren

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).

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.