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

使用Import-Module指定程序集路径及SharePoint程序集加载异常求助

问题解答

一、使用Import-Module时指定程序集路径的方法

你可以通过以下几种方式明确指定要加载的模块/程序集路径:

  • 直接传入完整路径:如果知道模块或dll的绝对路径,直接把路径作为参数传给Import-Module即可:
    Import-Module "C:\YourPath\YourModule.psm1"
    # 或者针对dll文件
    Import-Module "C:\YourPath\Solution.dll"
    
  • 使用-FullyQualifiedName参数:当需要更精确地指定程序集(比如包含版本、公钥令牌等信息)时,可以用这个参数:
    Import-Module -FullyQualifiedName @{
        Path = "C:\YourPath\Solution.dll"
        ModuleVersion = "1.0.0.0"
    }
    
  • 相对路径加载:如果脚本和程序集在同一目录下,可以用相对路径,比如:
    Import-Module ".\Solution.dll"
    
  • 通过-ModulePath参数指定搜索路径:如果你的模块在某个自定义目录下,可以先指定搜索路径再加载模块名:
    Import-Module -ModulePath "C:\YourCustomModuleDir" -Name "Solution"
    

二、解决程序集加载异常的问题

你遇到的无法加载类型'Microsoft.Online.SharePoint.TenantManagement.SPOConditionalAccessPolicyType'异常,核心原因是环境中存在旧版本的Microsoft.Online.SharePoint.Client.Tenant.dll,导致CLR加载了旧版本而非你的Solution.dll依赖的新版本。这里有几个可行的解决办法:

1. 先手动加载正确版本的程序集

在调用Solution.dll里的方法之前,先通过Add-Type强制加载指定路径的新版本程序集:

# 先加载新版本的Microsoft.Online.SharePoint.Client.Tenant.dll
Add-Type -Path "C:\YourCorrectPath\Microsoft.Online.SharePoint.Client.Tenant.dll"
# 再加载你的Solution.dll
Import-Module "C:\YourPath\Solution.dll"

这样CLR会优先使用你手动加载的新版本,避免拾取旧版本。

2. 私有部署依赖程序集

把Solution.dll和它依赖的新版本Microsoft.Online.SharePoint.Client.Tenant.dll放在同一个目录下,并且确保这个目录里没有旧版本的dll。当CLR加载Solution.dll时,会优先从同一目录查找依赖,而不是去GAC或系统路径找旧版本。

3. 检查并清理环境中的旧版本

  • 检查全局程序集缓存(GAC):打开命令提示符,运行gacutil /l Microsoft.Online.SharePoint.Client.Tenant,如果有旧版本存在,可以用gacutil /u Microsoft.Online.SharePoint.Client.Tenant, Version=旧版本号移除(需要管理员权限)。
  • 检查PowerShell模块路径:运行$env:PSModulePath查看所有模块搜索路径,看看有没有目录里存在旧版本的Microsoft.Online.SharePoint.Client.Tenant.dll,如果有,替换成新版本或者移除该目录的引用。

4. 使用程序集绑定重定向(适用于.NET项目)

如果你的Solution.dll是通过.NET项目编译的,可以在项目的app.config(或web.config)中添加绑定重定向配置,强制CLR使用指定版本的程序集:

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Online.SharePoint.Client.Tenant"
                          publicKeyToken="71e9bce111e9429c"
                          culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-16.0.0.0"
                         newVersion="16.0.0.0" /> <!-- 替换成你需要的新版本号 -->
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

编译时这个配置会嵌入到Solution.dll的清单中,运行时CLR会按照配置加载指定版本。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:25:20