我在使用4.5 Framework的2012 SSIS包脚本任务中有以下c#代码:
[Microsoft.sqlServer.Dts.Tasks.ScripTask.SSISScriptTaskEntryPointAttribute]
Public partial class ScriptMain
{
static ScriptMain()
{
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomai_AssemblyResolveForDLL);
}
Static System.Reflection.Assembly CurrentDomain_AssemblyResolveForDLL(object sender, ResolveEventArgs args)
{
If (args.Name.Contains("NameofMydll"))
{
string path = @"c:\Temp\";
return System.Reflection.Assembly.LoadFile(System.IO.Path.Combine(path, "NameofMydll.dll"));
}
}
return null;
}
此代码的目的是在运行时加载SSIS脚本任务中使用的.dll文件。代码的工作方式就像所描述的那样here.路径是硬编码的,它可以正常工作。
我遇到的问题是我需要动态设置路径的值,以便我可以在没有硬编码值的情况下将代码从服务器提升到服务器。由于该功能是静态的,我不知道该怎么做。
这里的代码行:
MyVariable = (string)Dts.Variables.["MyVariable"].value;
...接收MyVariable
声明为全局公共字符串变量的值(只要不在上面的代码中,这就可以正常工作)。但是使用“MyVariable”代替@"c:\Temp\"
是我得到Cannot access non static field
...错误。
将声明更改为public static string
允许它编译,但在运行时抛出错误。
Exception has been thrown by the target of invocation.
在调用下面的代码行之前,通过函数分配值:
AppDomain.CurentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolveForDLL)
对函数的调用是Main()
中的第一行代码,上面的代码行是第2行。
我需要做的就是从变量中分配路径的值。任何帮助将不胜感激。
答案 0 :(得分:0)
更改为NameExtractor
或通过它的位置BreathTestExtractorMethods