【问题标题】:SSIS package template locationSSIS 包模板位置
【发布时间】:2013-02-22 11:04:15
【问题描述】:

我们可以更改包模板的默认位置吗?或者至少添加更多位置?

我想创建一些模板并将它们添加到源代码管理,但我不太热衷于将C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\ProjectItems\DataTransformationProject\DataTransformationItems 文件夹中的文件添加到源代码管理。

你是怎么处理的?

【问题讨论】:

  • 如果您对其他方法感兴趣,使用 BIML + BIDSHelper 定义模板然后生成新模板可能是一种有趣的方法。

标签: sql-server ssis sql-server-2012 ssis-2012


【解决方案1】:

我从未尝试过移动它,但是当我们构建模板时,我们有一个 Common 项目,其中包含通用材料(我们很有创意),例如数据库的配置设置以及模板包。该解决方案还有一个启动项目,其中除了一个构建后脚本之外什么都没有,我们将在其中将模板复制到上述路径中。这样一来,人们就不必担心这种“复杂的复制内容”就可以开始了。

copy /y "$(SolutionDir)\SQL\SSIS\PackageTemplate.dtsx" "$(DevEnvDir)\PrivateAssemblies\ProjectItems\DataTransformationProject\DataTransformationItems"

正如 rvphx 提醒我的那样,您会希望有人使用您的模板来重置包 ID。否则,您对 sysdtslog90/sysssislog 表的报告会变得非常复杂。免费的 Visual Studio 插件 BIDSHelper 具有从项目窗口重置 GUID 的功能。我在使用我们自己的模板时遇到的另一个问题是我们提供的物理文件名与 SSIS 中的 Package Name 属性不匹配。我们要么分配一个垃圾物理文件名,然后将其重命名为正确的名称,要么只记得在包属性中修复它。

【讨论】:

  • 只是看看我是否做对了!如果新开发人员加入,他或她从源代码管理中下载包含模板(和其他内容)的通用项目,构建它,然后构建将模板复制到适当的文件夹?
  • 通过构建空项目,触发后部署事件,该事件处理将模板包复制到正确的文件夹中。否则,是的,这就是我们的流程。不知道是否有更好的机制,但它对我们有用。
  • 只是想指出,当我们考虑从模板文件构建包时,包 GUIDS 往往保持不变。因此,当您进行日志记录等工作时,根据 GUIDS 聚合数据会有些困难。只是说因为我遇到了类似的问题。
  • 为了解决 @rvphx 问题,我们的模板有注释明确指出“重命名对象,而不仅仅是物理文件。使用 BIDSHelper 重置所有 ID”
  • 听起来很奇怪,这个 GUID 是一个已知问题。如果你查看培训手册,它会说“从用户定义的模板创建包后,其 ID 属性的值将与模板中的值相同。因为这会导致难以区分在日志条目和审计中从同一模板创建的不同包之间,您应该在部署包之前更改标识符,最好在创建它之后立即更改。”不知道他们为什么不解决这个问题!
【解决方案2】:

我们一直使用的模板非常简单(主要是一堆标准变量、连接管理器和 SSIS 2008 的事件处理程序),几年前我写了一个 NAnt 脚本来构建一个简单的一包解决方案。由于 .dtsx 格式只是 XML,因此从极简包中制作文本模板文件并使用 NAnt 的 <replacetokens> 任务来替换包名称和 GUID 之类的东西并不是非常困难。甚至可以轻松创建唯一的 GUID,因为 NAnt 允许您在脚本中嵌入 C# 代码:

<script language="C#" prefix="script" >
    <references>
        <include name="System.dll" />
        <include name="System.DirectoryServices.dll" />
    </references>
    <imports>
        <import namespace="System.DirectoryServices"/>
    </imports>
    <code>
        <![CDATA[
        [Function("create-guid")]
        public static string CreateGuid() 
        {
            return Guid.NewGuid().ToString().Trim();
        }
        ]]>
    </code>
</script>

<property name="PACKAGE_DTSID_GUID" value="${script::create-guid()}"/>
<property name="PACKAGE_VERSION_GUID" value="${script::create-guid()}"/>

【讨论】:

    【解决方案3】:

    明确回答您的问题:

    不,你不能改变它。 不,您不能添加更多位置。

    如上所述,您可以将脚本从一个位置复制到此文件夹。这是我们大多数人所做的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-03
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-18
      相关资源
      最近更新 更多