无法为脚本组件

时间:2018-04-17 19:37:31

标签: c# ssis biml script-component

我正在尝试使用BIML< ScriptComponentProject>创建一个简单的流程。标签,但它对我不起作用!

  • 如果我手动创建数据流,那么它可以正常工作!

    • 我的数据流有:SRC> SCRIPT-COMPONENT> TGT
    • 我添加的唯一逻辑是计算每个传入行的行号(暂时保持逻辑简单)
  • 执行手动解决方案时:

    • 顺序行号存储在TGT表(test_np_02)
    • 大!
  • 但是,当我尝试使用附加的BIML创建完全相同的包时,我收到以下错误:


SSIS输出日志:

Error 0 The namespace '<global namespace>' already contains a definition for 'Input0Buffer'.  ...\Designer\BufferWrapper.cs    14 14
Error 0 The namespace '<global namespace>' already contains a definition for 'UserComponent'. ...\Designer\ComponentWrapper.cs 12 14
Error 0 The namespace '<global namespace>' already contains a definition for 'Connections'.   ...\Designer\ComponentWrapper.cs 49 14
Error 0 The namespace '<global namespace>' already contains a definition for 'Variables'.     ...\Designer\ComponentWrapper.cs 60 14
EmitSsis. Internal Compiler Error: Workflow EmitSsis contains fatal errors. Phase execution halted.


当我尝试使用BIML创建PKG时,我不确定出了什么问题:

  • 当我手动创建包(使用相同的代码)
  • 时,这些错误永远不会弹出
  • 我将手动解决方案中的重要C#文件复制粘贴到BIML


问题/想法:

  1. 是否与必须用于ProjectCoreName,AssemblyProduct和AssemblyTitle的GUID有关?

    • 是每次扩展BIML时自动生成的吗?
    • 如果是这样,我怎样才能在BIML中为这些项创建一个GUID ..这样它在扩展后可以直接使用?
  2. 是否与我必须在BIML中创建.cs文件的序列有关,在&lt; Files&gt;内。标记

    • 我目前假设&lt; File&gt;的实际序列。 &lt; Files&gt;中的项目标签与BIML无关
  3. 可能是我必须生成&#34; Resources.resx / Resources.Designer.cs&#34;和&#34; Settings.settings / Settings.Designer.cs&#34;以及BIML?

  4. 拥有&#34; #region命名空间&#34;是非常重要的。每个.cs文件中的部分?

    • 我从手动解决方案中移除了它...仍然可以正常工作!

  5. 请帮助。

    说明:

    • 我正在使用SSDT 2015和Varigence BIMLExpress 2017(Build 5.0.61915.0)

    • 我知道在SRC本身的SQLServer中使用ROW_NUMBER()非常容易,但是:

      • 我在附加示例中使用OleDbSource只是为了保持简单
      • 最后,我将不得不用BIML生成数百个代码PKG,它将SRC作为平面文件,而不是OleDB。
      • 显然,我希望我的生成的ScriptComponents在扩展后立即运行..无需任何进一步的手动干预:)


    感谢名单,


    NP


    BIML文件:https://drive.google.com/file/d/10O3aSL5IO34ULS44wl7IX4LUmPH_pI6V/view?usp=sharing

1 个答案:

答案 0 :(得分:0)

如果将类包装在自定义命名空间中,错误将消失。

namespace SomeNamespace {
    public class UserComponent: ScriptComponent
    {
         ...
    }

    public class Connections
    {
          ...    
    }

    public class Variables
    {
          ...     
    }
}

namespace SomeNamespace {

    public class Input0Buffer: ScriptBuffer
    {
         ...
    }
}

还有一个关于(动态)从这个Biml文件创建多个包的评论:你必须像这样分配动态命名空间名称:

namespace <#=variableContainingNamespaceName#> {
    ...
}

关于你的评论:

  1. 该问题与ProjectCoreName无关,但我担心如果为同一个biml生成的多个包重用相同的ProjectCoreName(未经实际测试),可能会遇到问题。
  2. 没有
  3. 没必要
  4. 不,该部分不一定是必需的。