SSIS脚本任务将现有文件添加到项目中作为链接导致无法找到二进制文件

时间:2017-05-14 14:01:19

标签: c# ssis script-task

我认为这很简单,但我猜不是。 这是正在发生的事情。 我创建了一个新包并向其添加了一个脚本任务。 我打开脚本任务并编辑脚本(C#2010)。 在解决方案资源管理器中,我右键单击项目名称(ST_xxxxxx)。 我选择" 添加 - >现有项"。 在文件资源管理器中,我导航到我的文档文件夹并选择(而不是双击)我的" test.cs"这只是一个空洞的课程。在文件资源管理器窗口的右下角,在“添加”按钮旁边,单击向下箭头并选择" 添加为链接"。为了测试,我选择" Build-> Build ST_xxxxx"。建立成功。 我保存,然后关闭脚本任务VS编辑器。然后我在脚本任务编辑器窗口中单击“确定”。 A"脚本错误"窗口出现。 "包中包含的脚本有编译错误"。 如果我保存它,任务上的错误说"找不到脚本的二进制代码"

任何想法如何解决这个问题?

我可以通过相同的过程并选择"添加"而不是"添加为链接"它工作正常。但是这会创建文件的副本,并且必须手动更新。我想链接到我使用的常见cs文件,而不必更新它们。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

找到解决方案。只需将dll放入dev环境和生产服务器可访问的共享库即可。然后在Main(入口点)函数之前(或之后)将此代码添加到脚本任务中。然后添加相同的dll作为项目的引用。像魅力一样。

静态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 \&#34 ;;              return System.Reflection.Assembly.LoadFile(System.IO.Path.Combine(path," ssisHelper.dll"));          }          return null;      }

https://blogs.msdn.microsoft.com/dbrowne/2014/06/25/how-to-load-an-assembly-in-a-ssis-script-task-that-isnt-in-the-gac/