Importieren Sie ein binäres Powershell-Modul mit einer einfachen AbhängigkeitC#

Ein Treffpunkt für C#-Programmierer
Guest
 Importieren Sie ein binäres Powershell-Modul mit einer einfachen Abhängigkeit

Post by Guest »

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>

Code: Select all

Lib
enthält eine Klasse wie folgt:

Code: Select all

namespace Lib;

public static class Class1
{
public static string GetString()
{
return "FROM DEPENDENCY";
}

}

Code: Select all

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

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post