1

我正在尝试使用 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. 这与我必须在 <Files> 标签内的 BIML 中创建 .cs 文件的顺序有关吗?

    • 我目前假设 <Files> 标签中 <File> 项目的实际顺序与 BIML 无关
  3. 难道我也必须在 BIML 中生成“Resources.resx/Resources.Designer.cs”和“Settings.settings/Settings.Designer.cs”吗?

  4. 在每个 .cs 文件中都有“#region 命名空间”部分真的很重要吗?

    • 我从手册中删除了它 .. 仍然可以正常工作!


请帮忙。

笔记:

  • 我正在使用 SSDT 2015 和 Varigence BIMLExpress 2017(内部版本 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

4

1 回答 1

1

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

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. 不,该部分不一定是必需的。
于 2018-04-19T11:32:22.427 回答