mirror of
https://github.com/GoodOlClint/PSProxmoxVE.git
synced 2026-08-09 05:49:24 +00:00
b8af36a7fc
The net9.0 DLL references System.Runtime 9.0.0.0 which is unavailable on GitHub runners where pwsh ships with .NET 8.x. Adding netstandard2.0 as a target produces a DLL compatible with any .NET version (PS 5.1 on .NET Framework through PS 7.x on .NET 8/9). - Add netstandard2.0 to TargetFrameworks in Core and module csproj - Update #if NET48 conditionals to include NETSTANDARD2_0 - Switch CI workflows from net9.0 to netstandard2.0 for Pester tests - Update _TestHelper.ps1 framework search order Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
60 lines
2.2 KiB
PowerShell
60 lines
2.2 KiB
PowerShell
<#
|
|
.SYNOPSIS
|
|
Shared module-loading helper for Pester tests.
|
|
Dot-source this file inside BeforeAll to import PSProxmoxVE reliably
|
|
in both local-dev and CI environments.
|
|
#>
|
|
|
|
# If the module is already loaded, nothing to do.
|
|
if (Get-Module -Name PSProxmoxVE) { return }
|
|
|
|
# Ensure DOTNET_ROOT doesn't override PS's bundled runtime (CI sets this
|
|
# via setup-dotnet and it can break binary module assembly resolution).
|
|
if ($env:DOTNET_ROOT) {
|
|
$env:DOTNET_ROOT = $null
|
|
$env:DOTNET_MULTILEVEL_LOOKUP = $null
|
|
}
|
|
|
|
# 1. Try importing by module name (works in CI where the module is
|
|
# installed to a PSModulePath location via dotnet publish + copy).
|
|
$available = Get-Module PSProxmoxVE -ListAvailable -ErrorAction SilentlyContinue
|
|
if ($available) {
|
|
Import-Module PSProxmoxVE -Force -ErrorAction Stop
|
|
return
|
|
}
|
|
|
|
# 2. Discover the module manifest (.psd1) from the local source tree.
|
|
# Loading via manifest ensures PS handles assembly resolution correctly.
|
|
# Prefer the framework that matches the running PowerShell edition.
|
|
$repoRoot = Resolve-Path (Join-Path $PSScriptRoot '../..')
|
|
$moduleRoot = Join-Path $repoRoot 'src/PSProxmoxVE'
|
|
|
|
if ($PSVersionTable.PSEdition -eq 'Core') {
|
|
$frameworks = @('netstandard2.0', 'net9.0', 'net48')
|
|
}
|
|
else {
|
|
$frameworks = @('net48', 'netstandard2.0', 'net9.0')
|
|
}
|
|
|
|
$searchPaths = foreach ($fw in $frameworks) {
|
|
# Publish output (has all dependencies co-located)
|
|
Join-Path $repoRoot "publish/$fw/PSProxmoxVE.psd1"
|
|
# Build output
|
|
Join-Path $moduleRoot "bin/Debug/$fw/PSProxmoxVE.psd1"
|
|
Join-Path $moduleRoot "bin/Release/$fw/PSProxmoxVE.psd1"
|
|
}
|
|
|
|
$moduleManifest = $searchPaths | Where-Object { Test-Path $_ } | Select-Object -First 1
|
|
|
|
if ($null -eq $moduleManifest) {
|
|
throw "PSProxmoxVE module not found. Build the project before running Pester tests."
|
|
}
|
|
|
|
# Remove files that cause .NET assembly resolution conflicts when loading
|
|
# a binary module inside PowerShell's own runtime.
|
|
$moduleDir = Split-Path $moduleManifest
|
|
Get-ChildItem $moduleDir -Filter '*.deps.json' -ErrorAction SilentlyContinue | Remove-Item -Force
|
|
Get-ChildItem $moduleDir -Filter '*.runtimeconfig.json' -ErrorAction SilentlyContinue | Remove-Item -Force
|
|
|
|
Import-Module $moduleManifest -Force -ErrorAction Stop
|