Ich habe eine Lösung mit zwei Projekten mithilfe der dotnet-CLI wie folgt erstellt:
Code: Select all
PS> dotnet new classlib --output Lib
PS> dotnet new psmodule --output PsModule
PS> dotnet new sln
PS> dotnet sln add Lib
PS> dotnet sln add PsModule
In Visual Studio 2022 habe ich Folgendes getan:
- öffnete die Lösung und fügte einen Verweis auf Lib hinzu< /code> in PsModule.
hat das Zielframework im PsModule CSPROJ von netstandard2.0 auf net9.0< geändert /li>
enthält eine Klasse wie folgt:
Code: Select all
namespace Lib;
public static class Class1
{
public static string GetString()
{
return "FROM DEPENDENCY";
}
}
enthält eine Definition für ein Powershell-Cmdlet ohne Parameter und ruft einfach die statische Methode aus Lib auf und schreibt sie in die Ausgabe:
Code: Select all
using System;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
using Lib;
namespace PsModule
{
[Cmdlet(VerbsDiagnostic.Test,"SampleCmdlet")]
public class TestSampleCmdletCommand : PSCmdlet
{
// This method will be called for each input received from the pipeline to this cmdlet; if no input is received, this method is not called
protected override void ProcessRecord()
{
WriteObject(Class1.GetString());
}
}
}
Die Lösung wurde ohne Fehler erstellt, also ging ich dann in das bin-Verzeichnis für PsModule und fügte ein Modulmanifest hinzu:
Code: Select all
PS>New-ModuleManifest PsModule.psd1
Im Modulmanifest habe ich die folgenden Änderungen vorgenommen:
Code: Select all
@{
// ...
RootModule = 'PsModule.dll'
RequiredAssemblies = @(
"Lib.dll"
)
CmdletsToExport = @(
"Test-SampleCmdlet"
)
//..
}
Dann habe ich versucht, mein Modul in Powershell zu importieren, wobei das bin-Verzeichnis wie folgt mein aktuelles Arbeitsverzeichnis war
Code: Select all
PS> import-module .\PsModule.psd1
PS> test-sampleCmdlet
Leider verursacht die Ausführung des Cmdlets den folgenden Fehler:
Test-SampleCmdlet: Datei oder Assembly konnte nicht geladen werden ' System.Runtime, Version=9.0.0.0, Kultur=neutral, PublicKeyToken=b03f5f7f11d50a3a'. Das System kann die angegebene Datei nicht finden.
Was läuft hier schief und wie kann ich es beheben?
BEARBEITEN
Ich konnte es zum Laufen bringen, indem ich alle Projekte auf .NET 8 heruntergestuft habe. Ich bin mir nicht sicher, warum es mit .NET 9 nicht funktioniert. Wenn jemand eine Antwort geben kann Eine gute Erklärung dafür, warum es mit .NET 9 nicht funktioniert, wäre das sei großartig.
Ich habe eine Lösung mit zwei Projekten mithilfe der dotnet-CLI wie folgt erstellt:
[code]PS> dotnet new classlib --output Lib
PS> dotnet new psmodule --output PsModule
PS> dotnet new sln
PS> dotnet sln add Lib
PS> dotnet sln add PsModule
[/code]
In Visual Studio 2022 habe ich Folgendes getan:
[list]
[*]öffnete die Lösung und fügte einen Verweis auf Lib hinzu< /code> in PsModule.
hat das Zielframework im PsModule CSPROJ von netstandard2.0 auf net9.0< geändert /li>
[/list]
[code]Lib[/code] enthält eine Klasse wie folgt:
[code]namespace Lib;
public static class Class1
{
public static string GetString()
{
return "FROM DEPENDENCY";
}
}
[/code]
[code]PsModule[/code] enthält eine Definition für ein Powershell-Cmdlet ohne Parameter und ruft einfach die statische Methode aus Lib auf und schreibt sie in die Ausgabe:
[code]using System;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
using Lib;
namespace PsModule
{
[Cmdlet(VerbsDiagnostic.Test,"SampleCmdlet")]
public class TestSampleCmdletCommand : PSCmdlet
{
// This method will be called for each input received from the pipeline to this cmdlet; if no input is received, this method is not called
protected override void ProcessRecord()
{
WriteObject(Class1.GetString());
}
}
}
[/code]
Die Lösung wurde ohne Fehler erstellt, also ging ich dann in das bin-Verzeichnis für PsModule und fügte ein Modulmanifest hinzu:
[code]PS>New-ModuleManifest PsModule.psd1
[/code]
Im Modulmanifest habe ich die folgenden Änderungen vorgenommen:
[code]@{
// ...
RootModule = 'PsModule.dll'
RequiredAssemblies = @(
"Lib.dll"
)
CmdletsToExport = @(
"Test-SampleCmdlet"
)
//..
}
[/code]
Dann habe ich versucht, mein Modul in Powershell zu importieren, wobei das bin-Verzeichnis wie folgt mein aktuelles Arbeitsverzeichnis war
[code]PS> import-module .\PsModule.psd1
PS> test-sampleCmdlet
[/code]
Leider verursacht die Ausführung des Cmdlets den folgenden Fehler:
Test-SampleCmdlet: Datei oder Assembly konnte nicht geladen werden ' System.Runtime, Version=9.0.0.0, Kultur=neutral, PublicKeyToken=b03f5f7f11d50a3a'. Das System kann die angegebene Datei nicht finden.
Was läuft hier schief und wie kann ich es beheben?
BEARBEITEN
Ich konnte es zum Laufen bringen, indem ich alle Projekte auf .NET 8 heruntergestuft habe. Ich bin mir nicht sicher, warum es mit .NET 9 nicht funktioniert. Wenn jemand eine Antwort geben kann Eine gute Erklärung dafür, warum es mit .NET 9 nicht funktioniert, wäre das sei großartig.