You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell Core 7.2 模块程序集加载冲突问题咨询

问题背景

运行环境为PowerShell 7.2.4,涉及两个自定义PowerShell Core模块:Net6PowerShellModule与NetstandardPowerShellModule,两个模块的项目文件、代码、清单文件如下:

Net6PowerShellModule 相关文件

  • Net6PowerShellModule.csproj:
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
  </PropertyGroup>

  <ItemGroup>
    <None Remove="Net6PowerShellModule.psd1" />
  </ItemGroup>

  <ItemGroup>
    <Content Include="Net6PowerShellModule.psd1">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="6.0.0" />
    <PackageReference Include="System.Management.Automation" Version="7.2.4" />
  </ItemGroup>
</Project>
  • Test-Net6Cmdlet.cs:
using System.Management.Automation;

namespace Net6PowerShellModule
{
    [Cmdlet("Test", "Net6Cmdlet")]
    public class TestNet6Cmdlet : PSCmdlet
    {
        protected override void ProcessRecord()
        {
            var type = typeof(Microsoft.Extensions.DependencyInjection.IServiceCollection);

            WriteObject("Net6 Cmdlet Run.");
        }
    }
}
  • Net6PowerShellModule.psd1:
@{
    RootModule = 'Net6PowerShellModule.dll'
    ModuleVersion = '0.0.1'
    GUID = '8c1bd929-32bd-44c3-af6b-d9dd261e34f3'
    CmdletsToExport = 'Test-Net6Cmdlet'
}

NetstandardPowerShellModule 相关文件

  • NetstandardPowerShellModule.csproj:
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
  </PropertyGroup>

  <ItemGroup>
    <None Remove="NetstandardPowerShellModule.psd1" />
  </ItemGroup>

  <ItemGroup>
    <Content Include="NetstandardPowerShellModule.psd1">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="2.2.0" />
    <PackageReference Include="System.Management.Automation" Version="6.1.2" />
  </ItemGroup>
</Project>
  • Test-NetstandardCmdlet.cs:
using System.Management.Automation;

namespace NetstandardPowerShellModule
{
    [Cmdlet("Test", "NetstandardCmdlet")]
    public class TestNetstandardCmdlet : PSCmdlet
    {
        protected override void ProcessRecord()
        {
            var type = typeof(Microsoft.Extensions.DependencyInjection.IServiceCollection);

            WriteObject("Netstandard 2.0 Cmdlet Run.");
        }
    }
}
  • NetstandardPowerShellModule.psd1:
@{
    RootModule = 'NetstandardPowerShellModule.dll'
    ModuleVersion = '0.0.1'
    GUID = 'eef615d0-aecf-4e89-8f4c-53174f8c99d6'
    CmdletsToExport = 'Test-NetstandardCmdlet'
}
测试场景与结果

针对两个模块共执行两组测试:

  • 第一组测试流程:

    • 导入Net6PowerShellModule
    • 导入NetstandardPowerShellModule
    • 执行Test-Net6Cmdlet
    • 执行Test-NetstandardCmdlet

    测试结果:所有命令正常运行,进程中仅加载了6.0.0版本的Microsoft.Extensions.DependencyInjection.Abstractions程序集。

  • 第二组测试流程:

    • 导入Net6PowerShellModule
    • 导入NetstandardPowerShellModule
    • 执行Test-NetstandardCmdlet
    • 执行Test-Net6Cmdlet

    测试结果:执行Test-Net6Cmdlet时抛出错误:

    Test-Net6Cmdlet: Could not load file or assembly 'Microsoft.Extensions.DependencyInjection.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. Could not find or load a specific file. (0x80131621)

疑问点

根据Stack Overflow相关技术解答,PowerShell (Core) 7+环境下后续尝试加载不同版本的同名程序集时,本应直接抛出语句终止错误:Assembly with same name is already loaded.,但第一组测试并未触发该错误且可正常运行,该行为与文档描述不符。

若在两个模块的psd1清单文件中都添加RequiredAssemblies = @('Microsoft.Extensions.DependencyInjection.Abstractions.dll')配置,则无论模块加载顺序、命令执行顺序如何,都会触发预期的“同名程序集已加载”错误。

目前已查阅官方PowerShell依赖冲突解决文档、Assembly Load Contexts相关官方技术博客、Stack Overflow相关问答,仍无法解释上述场景的加载行为差异,也无法明确在psd1清单中声明RequiredAssemblies与仅在代码中引用依赖这两种方式的程序集加载逻辑区别。


内容的提问来源于stack exchange,提问作者semptra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 09:57:27