mirror of
https://github.com/GoodOlClint/PSProxmoxVE.git
synced 2026-07-26 07:58:14 +00:00
fix(build): add netstandard2.0 target to eliminate System.Runtime version mismatch
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>
This commit is contained in:
@@ -178,10 +178,10 @@ jobs:
|
||||
# ── Build and test ─────────────────────────────────────────────────
|
||||
|
||||
- name: Build module
|
||||
run: dotnet publish src/PSProxmoxVE/PSProxmoxVE.csproj --configuration Release --framework net9.0 --output ./publish/net9.0
|
||||
run: dotnet publish src/PSProxmoxVE/PSProxmoxVE.csproj --configuration Release --framework netstandard2.0 --output ./publish/netstandard2.0
|
||||
|
||||
- name: Clean publish output for PS module loading
|
||||
run: rm -f ./publish/net9.0/*.deps.json ./publish/net9.0/*.runtimeconfig.json
|
||||
run: rm -f ./publish/netstandard2.0/*.deps.json
|
||||
|
||||
- name: Install Pester 5
|
||||
shell: pwsh
|
||||
@@ -192,7 +192,7 @@ jobs:
|
||||
run: |
|
||||
$modulePath = "$HOME/.local/share/powershell/Modules/PSProxmoxVE"
|
||||
New-Item -ItemType Directory -Path $modulePath -Force | Out-Null
|
||||
Copy-Item -Path ./publish/net9.0/* -Destination $modulePath -Recurse -Force
|
||||
Copy-Item -Path ./publish/netstandard2.0/* -Destination $modulePath -Recurse -Force
|
||||
|
||||
- name: Create test ISO
|
||||
shell: bash
|
||||
@@ -201,8 +201,6 @@ jobs:
|
||||
- name: Run integration tests
|
||||
shell: pwsh
|
||||
env:
|
||||
DOTNET_ROOT: ''
|
||||
DOTNET_MULTILEVEL_LOOKUP: ''
|
||||
PVETEST_HOST: ${{ steps.target.outputs.host }}
|
||||
PVETEST_PORT: ${{ steps.target.outputs.port }}
|
||||
PVETEST_APITOKEN: ${{ steps.target.outputs.token }}
|
||||
|
||||
@@ -18,9 +18,9 @@ jobs:
|
||||
- os: windows-latest
|
||||
framework: net48
|
||||
- os: windows-latest
|
||||
framework: net9.0
|
||||
framework: netstandard2.0
|
||||
- os: ubuntu-latest
|
||||
framework: net9.0
|
||||
framework: netstandard2.0
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
@@ -58,17 +58,17 @@ jobs:
|
||||
shell: powershell
|
||||
- os: windows-latest
|
||||
ps_version: '7.5'
|
||||
framework: net9.0
|
||||
framework: netstandard2.0
|
||||
artifact_os: windows-latest
|
||||
shell: pwsh
|
||||
- os: ubuntu-latest
|
||||
ps_version: '7.5'
|
||||
framework: net9.0
|
||||
framework: netstandard2.0
|
||||
artifact_os: ubuntu-latest
|
||||
shell: pwsh
|
||||
- os: macos-latest
|
||||
ps_version: '7.5'
|
||||
framework: net9.0
|
||||
framework: netstandard2.0
|
||||
artifact_os: ubuntu-latest
|
||||
shell: pwsh
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ using Newtonsoft.Json.Linq;
|
||||
using PSProxmoxVE.Core.Authentication;
|
||||
using PSProxmoxVE.Core.Exceptions;
|
||||
|
||||
#if NET48
|
||||
#if NET48 || NETSTANDARD2_0
|
||||
using System.Net.Security;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
#endif
|
||||
@@ -35,7 +35,7 @@ namespace PSProxmoxVE.Core.Client
|
||||
_session = session ?? throw new ArgumentNullException(nameof(session));
|
||||
_baseUrl = session.BaseUrl;
|
||||
|
||||
#if NET48
|
||||
#if NET48 || NETSTANDARD2_0
|
||||
var handler = new HttpClientHandler();
|
||||
if (session.SkipCertificateCheck)
|
||||
{
|
||||
@@ -75,7 +75,7 @@ namespace PSProxmoxVE.Core.Client
|
||||
_session = null;
|
||||
_baseUrl = $"https://{hostname}:{port}";
|
||||
|
||||
#if NET48
|
||||
#if NET48 || NETSTANDARD2_0
|
||||
var handler = new HttpClientHandler();
|
||||
if (skipCertificateCheck)
|
||||
{
|
||||
@@ -286,7 +286,7 @@ namespace PSProxmoxVE.Core.Client
|
||||
}
|
||||
finally
|
||||
{
|
||||
#if NET48
|
||||
#if NET48 || NETSTANDARD2_0
|
||||
fileStream.Dispose();
|
||||
#else
|
||||
await fileStream.DisposeAsync().ConfigureAwait(false);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>net9.0;net48</TargetFrameworks>
|
||||
<TargetFrameworks>netstandard2.0;net9.0;net48</TargetFrameworks>
|
||||
<LangVersion>10.0</LangVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<RootNamespace>PSProxmoxVE.Core</RootNamespace>
|
||||
@@ -16,6 +16,11 @@
|
||||
</AssemblyAttribute>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="System.Text.Json" Version="8.0.5" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(TargetFramework)' == 'net48'">
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="System.Text.Json" Version="8.0.5" />
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>net9.0;net48</TargetFrameworks>
|
||||
<TargetFrameworks>netstandard2.0;net9.0;net48</TargetFrameworks>
|
||||
<LangVersion>10.0</LangVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<RootNamespace>PSProxmoxVE</RootNamespace>
|
||||
@@ -14,7 +14,7 @@
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(TargetFramework)' == 'net48'">
|
||||
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0' Or '$(TargetFramework)' == 'net48'">
|
||||
<PackageReference Include="PowerShellStandard.Library" Version="5.1.1" PrivateAssets="all" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@@ -30,10 +30,10 @@ $repoRoot = Resolve-Path (Join-Path $PSScriptRoot '../..')
|
||||
$moduleRoot = Join-Path $repoRoot 'src/PSProxmoxVE'
|
||||
|
||||
if ($PSVersionTable.PSEdition -eq 'Core') {
|
||||
$frameworks = @('net9.0', 'net48')
|
||||
$frameworks = @('netstandard2.0', 'net9.0', 'net48')
|
||||
}
|
||||
else {
|
||||
$frameworks = @('net48', 'net9.0')
|
||||
$frameworks = @('net48', 'netstandard2.0', 'net9.0')
|
||||
}
|
||||
|
||||
$searchPaths = foreach ($fw in $frameworks) {
|
||||
|
||||
Reference in New Issue
Block a user