如何在GAC中加载SSIS中的dll文件
本文关键字:SSIS 中的 dll 文件 加载 GAC | 更新日期: 2023-09-27 18:14:10
我试图在一个不在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;