【问题标题】:Protection level changed mid project - now project won't build保护级别在项目中更改 - 现在项目不会构建
【发布时间】:2013-09-09 19:06:00
【问题描述】:

开始了一个新的 SSIS 项目,忘记将默认保护级别设置为“不保存敏感”(我们的标准) 现在在项目进行到一半并进行了更改(在项目级别和每个包中。)选中时所有包都是不保存敏感的,项目是不保存敏感的,但是在尝试构建时,我得到了

项目一致性检查失败。以下不一致是 检测到:PACKAGE1.dtsx 的保护级别与 项目。 PACKAGE2.dtsx 的 ProtectionLevel 与 项目。 ... PACKAGE(N).dtsx 的 ProtectionLevel 不同于 项目。

(它列出了项目中的每个包,即使它们都符合项目级别保护。)

【问题讨论】:

  • 您是通过 GUI 进行更改还是手动编辑 dtsx?
  • 先通过 GUI,然后手动通过,然后我开始处理 .dtproj 文件,然后我必须重新构建以将它们捆绑在一起。

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


【解决方案1】:

我怀疑你遇到了和我一样的问题。我通过 API 更正了我的所有包,以便它们都表明它们是未受保护的 DTS:ProtectionLevel="0"

项目 (.dtproj) 文件还具有设置为 DontSaveSensitive 的保护级别。 <SSIS:Project SSIS:ProtectionLevel="DontSaveSensitive" xmlns:SSIS="www.microsoft.com/SqlServer/SSIS">

对我来说不匹配的是在项目文件中,它跟踪了太多关于每个包的信息,所以如果你向下滚动,你会看到每个包的条目,比如 <SSIS:Property SSIS:Name="ProtectionLevel">3</SSIS:Property> 或任何默认数字。在文件中创建0(搜索和替换)。保存项目文件,它现在将构建。

您可能需要执行 Build All 才能构建它。我怀疑 VS/SSDT 正在尝试使用它存储在 .dtproj 文件中的额外数据来确定它是否需要验证项目中的所有包。由于我们手动编辑了文件,因此它不会触发任何通常会翻转以指示需要完全重新编译的传感器。

【讨论】:

  • 刚开始走这条路...仍然有问题,但你是对的。我将完成我的修复,在此处使用 cmets 进行更新并很快接受您的回答。
  • 就是这样。修复并签入后第一次构建仍然失败,但它可能正在查看 bin 文件夹中的一些信息???无论如何,我需要进行重建以使其成功。完成后,Build 再次正常工作。
  • 在答案中考虑了重建的需要以及对原因的​​一些猜测。
【解决方案2】:

billinkc 的答案对我不起作用,因为使用文本编辑器更改值并不能正确更改它。下面的 MSDN 页面解释了有一个命令行工具来管理这个:

http://technet.microsoft.com/en-us/library/cc879310.aspx

像这样:

for %f in (*.dtsx) do dtutil.exe /file %f /encrypt file;%f;2;strongpassword

它将项目中的每个模块更改为倒数第二个值中指定的保护级别。如果为 0,则不存储值,则不需要密码,可以去掉最后一个分号和后面的所有内容。

以下 MSDN 文章有一个表格,其中包含每个保护级别的数字,与 dtutil 一起使用:

http://technet.microsoft.com/en-us/library/ms141747.aspx

【讨论】:

    【解决方案3】:

    Microsoft 已经打破了这一点,因此即使使用 DTUTIL 实用程序更改包保护也无法修复项目文件元数据。

    我必须申请手动修复项目文件,以将存储包的包保护级别副本的元数据更改为与项目和包的相同。

    想清楚了吗?应该不会吧。

    获取包列表(已经部署并创建 DTUTIL 语句。将它们放入批处理文件并从命令行执行。

    这仅适用于已部署的包,因为我们正在查看 SSISDB 而不是 Project 文件夹

    USE SSISDB
    DECLARE @projName VARCHAR(250) = 'Sales'
    
    DECLARE @FolderPath VARCHAR(1000) = 'E:\ssis_' + @projName
    
    DECLARE @DtutilString VARCHAR(1000) =
        '"C:\Program Files\Microsoft SQL Server\130\DTS\Binn\dtutil.exe"/file "'+ @FolderPath +'\XXX" /encrypt file;"'+ @FolderPath +'\XXX";0 /quiet'
    
    SELECT DISTINCT
           REPLACE(@DtutilString, 'XXX', pack.[name])
    --     SELECT *
    FROM internal.packages AS pack
        INNER JOIN
            [internal].[projects] AS proj
            ON pack.project_id = proj.project_id
    
    WHERE proj.name = 'ssis_' + @projName
    

    【讨论】:

    • 两件事:A)请不要在本网站上使用淫秽内容,B)这不是试图回答这个问题,它看起来更像是在咆哮。如果您想详细说明您是如何修复项目文件以及如何解决您的问题的,请发帖edit
    猜你喜欢
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多