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

SSIS 2017中.NET Standard 2.0类库依赖项无法调用的解决咨询

解决SSIS 2017中无法访问.NET Standard类库依赖项的问题

方案一:将所有依赖项合并为单个DLL

完全可以把类库及其所有依赖项打包成一个独立的DLL,以此规避SSIS加载依赖时的路径问题,具体实现有两种方式:

1. 使用ILMerge工具

  • 确保你的类库和所有依赖项都是强签名的(若要放入GAC则必须满足此条件)
  • 安装ILMerge后执行以下命令:
    ilmerge /out:TestName.Merged.dll TestName.dll Dependency1.dll Dependency2.dll Dependency3.dll Dependency4.dll /targetplatform:v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319 /wildcards
    
    注意:替换命令中的依赖项文件名,/targetplatform指定为SSIS 2017对应的.NET Framework版本(4.7.2),同时排除系统自带的程序集(如System.*类库),避免合并冲突。
  • 将合并后的TestName.Merged.dll放入GAC或SSIS执行目录即可。

2. 通过Visual Studio项目配置自动合并

  • 在类库项目的.csproj文件中添加以下MSBuild配置:
    <PropertyGroup>
      <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
    </PropertyGroup>
    <Target Name="MergeAssemblies" AfterTargets="Build">
      <Exec Command="ilmerge /out:$(OutputPath)\TestName.Merged.dll $(OutputPath)\TestName.dll $(OutputPath)\*.dll /targetplatform:v4, C:\Windows\Microsoft.NET\Framework\v4.0.30319 /exclude:System.*,Microsoft.*" />
    </Target>
    
    配置完成后,每次编译项目时会自动合并输出目录下的所有依赖DLL(排除系统程序集),生成合并后的文件。

方案二:不合并DLL,手动关联依赖项

若不想合并DLL,可通过以下方式让SSIS正常加载依赖项:

  • 将依赖DLL放入SSIS执行目录:把所有依赖项(Dependency1.dll、Dependency2.dll等)复制到SSIS包的默认执行路径,通常为C:\Program Files\Microsoft SQL Server\140\DTS\Binn(SSIS 2017对应SQL Server 140版本);若部署到SQL Server集成服务目录,需将依赖DLL放到对应执行节点的目录中。
  • 将依赖项注册到GAC:确保所有依赖DLL均为强签名,使用gacutil /i Dependency1.dll命令逐个将依赖项注册到全局程序集缓存,SSIS即可通过GAC找到这些依赖。
  • 使用程序集解析事件:在类库代码中添加AssemblyResolve事件处理,当SSIS找不到依赖时手动从指定路径加载:
    static TestName()
    {
        AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
        {
            string assemblyPath = @"C:\YourDependencyPath\" + new AssemblyName(args.Name).Name + ".dll";
            if (File.Exists(assemblyPath))
            {
                return Assembly.LoadFrom(assemblyPath);
            }
            return null;
        };
    }
    
    此方式需提前确定依赖DLL的固定存放路径。

注意事项

  • SSIS 2017基于.NET Framework 4.7.2,需确保所有依赖项均兼容该版本,避免出现兼容性问题。
  • 所有要放入GAC的程序集必须是强签名的,若依赖项无强签名,需重新签名这些依赖,或选择合并方案规避。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:46:02