如何在 SSIS 中加载不在 GAC 中的 dll 文件



我试图在一个不在GAC中的SSIS项目中加载一个dll。我从这里执行以下代码

代码:

[Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute]
public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{
     static ScriptMain()
     {
         AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
     }
     static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
     {
         if (args.Name.Contains("ssisHelper"))
         {
             string path = @"c:temp";
             return System.Reflection.Assembly.LoadFile(System.IO.Path.Combine(path, "ssisHelper.dll"));
         }
         return null;
     }
}

这启用了dll的加载,但它一直给我以下错误,因为实体框架在dll中被引用。

无法加载文件或程序集"EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"或其依赖项之一。系统找不到指定的文件

所以我尝试设置dll的工作目录没有成功,因为dll没有入口点。因此,我有了将文件放在控制台应用程序中的想法。我创建了一个。exe文件,然后把它改成了。dll文件。现在理论上我有一个入口点,我可以在那里设置工作目录。

System.Environment.CurrentDirectory = @"PathToDll";

但是我仍然得到相同的错误。有人知道解决办法吗?

尝试为每个程序集名称添加else if子句:

static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
        {
            if (args.Name.Contains("ssisHelper"))
            {
            string path = @"c:temp";
            return System.Reflection.Assembly.LoadFile(System.IO.Path.Combine(path, "ssisHelper.dll"));
        }
        else if (args.Name.Contains("xxx"))
             {
            string path = @"c:temp";
            return System.Reflection.Assembly.LoadFile(System.IO.Path.Combine(path, "xxx.dll"));

        };    return null;

最新更新