【问题标题】:Method not found: Microsoft.AnalysisServices找不到方法:Microsoft.AnalysisServices
【发布时间】:2018-08-22 21:23:00
【问题描述】:

我已经为带有 SSIS 包的数据仓库创建了 ETL 设置。 一切正常,直到最后一步,即“分析服务处理任务编辑器”

每当我添加我的立方体并按确定时,我都会收到以下错误:

“找不到方法:“'Void Microsoft.AnalysisServices.Commands.ProcessCommand.set_Type(Microsoft.AnalysisServices.ProcessType)'。

我怀疑 DLL 存在一些问题,但我不确定是哪个问题。 我在我的 SQL Server 安装 (C:\Program Files (x86)\Microsoft SQL Server\120\SDK\Assemblies) 下找到了 Microsoft.AnalysisServices.dll 我没有在我的 Visual Studio 安装文件夹中找到它。

【问题讨论】:

  • DLL 可能需要存在于 GAC 中。您能告诉我们您使用的是什么版本的 SSIS/SSDT 和 SQL?
  • SQL Server 2016 SSDT 14.0.61705.170 SSIS 14.0.600.250
  • 用另一件事更新了我的答案。
  • 谢谢特洛伊,不幸的是该文件夹不存在:/
  • 如果您已验证 DLL 存在于 GAC 中并且没有冲突的 DLL,那么我开始感到困惑。你能在另一台机器上重现这个问题吗?

标签: ssis


【解决方案1】:

我找到了解决方法。

我试图重现 AdventureWorks 数据集的问题,以验证问题的发生是由于 .dll 而不是我的多维数据集或其他任何东西。

因此,我使用 AdventureWorks 数据集中的 Cube 创建了一个新的 OLTP 和 DWH,并创建了一个新的 SSIS 项目,其中唯一的步骤是处理该多维数据集。

通过这个设置,我没有得到与原始项目相同的错误,看起来,.dll 没有任何问题?

不过,我也尝试将目标服务器和多维数据集更改为我原来的那个,令我惊讶的是它成功了!

所以我保存了那个包并将其导入到我的原始项目中,然后从那里执行了这个包,它就可以工作了。

编辑:另请参阅 Pavel 的可能解决方案。

奇怪的是,如果我们在项目部署模式下创建新的 SSIS 项目,离开 2017 版本,并将其部署在我们的 2016 SSIS 服务上 - 一切正常。所以...我们只需要迁移到项目部署模式))) – Pavel Botygin

【讨论】:

  • 这是一个非常有趣的信息,谢谢分享。我需要考虑一下...
【解决方案2】:

我们有同样的问题。

一个有趣的事情:你可以尝试将你的项目兼容性切换到SQL Server vNext,然后正常创建你的处理任务,点击OK等成功(真是奇迹!),然后切换回想要的版本并部署.

但是,如果您在同一个包中有脚本任务 - 那么您可以尝试其他解决方法(我现在实际上正在使用)。使用脚本任务为“分析服务执行 DDL 任务”填充变量(在我的示例中为 User::DimensionsProcessingCommand)。这是一点复杂的方式,但在未来非常有用。

    public void Main()
    {
        Boolean tstFire = false;
        Microsoft.AnalysisServices.Server myServer = new Microsoft.AnalysisServices.Server();
        //Get connection to SSAS database from package
        ConnectionManager myConn = Dts.Connections["SSAS"];
        //Template for future use
        String ProcessingCommandTemplate = "<Batch xmlns=\"http://schemas.microsoft.com/analysisservices/2003/engine\"><Parallel>XXXXXXX</Parallel></Batch>";
        String myProcessingCommand = "";
        //Array for gathering dimensions w/o duplicates
        Dictionary<Dimension, Cube> amoDimDictionary = new Dictionary<Dimension, Cube>();

        String myServerName = myConn.ConnectionString;
        String myDatabaseName = myConn.Properties["InitialCatalog"].GetValue(myConn).ToString();
        //Connect to SSAS server instance
        myServer.Connect(myServerName);

        Database amoDb = myServer.Databases.FindByName(myDatabaseName);

        //Get all dimensions used in cubes
        foreach (Cube amoCube in amoDb.Cubes)
        {
                foreach (CubeDimension amoDimension in amoCube.Dimensions)
            {
                if (!amoDimDictionary.ContainsKey(amoDimension.Dimension))
                {
                    amoDimDictionary.Add(amoDimension.Dimension, amoCube);
                }
            }
        }

        //Start XML capture Dimensions
        myServer.CaptureXml = true;
        foreach (Dimension amoDimension in amoDimDictionary.Keys)
        {
            if (amoDimension.State == AnalysisState.Unprocessed)
            {
                amoDimension.Process(ProcessType.ProcessFull);
            }
            else
            {
                amoDimension.Process(ProcessType.ProcessUpdate);
            }
        }
        myServer.CaptureXml = false;

        //Build command
        foreach (String strXML in myServer.CaptureLog)
        {
            myProcessingCommand = myProcessingCommand + strXML.ToString();
        }

        myProcessingCommand = ProcessingCommandTemplate.Replace("XXXXXXX", myProcessingCommand);
        Dts.Variables["User::DimensionsProcessingCommand"].Value = myProcessingCommand.ToString();
        //Command output to see at runtime from VS 2015
        Dts.Events.FireInformation(1, "", Dts.Variables["User::DimensionsProcessingCommand"].Value.ToString(), "", 0, ref tstFire);

附: 在我们的 DEV 机器上从头开始安装:SQL Server 2016、Visual Studio 2015、SSDT 17.1 当我们尝试在 SQL Server 2016 兼容性下开发一些 SSIS 包时 - 我们偶然发现了很多问题......所以我们不再计算它们。 GAC 被谷歌搜索并来回调整,没有任何结果。 14.0 Microsoft DEV Environment 似乎有很多 bug,而且...如果您尝试在 13.0 及更低版本下创建某些东西,就会损坏。

【讨论】:

  • 谢谢帕维尔!如果一切都失败了,我会把它放在后袋里作为备用解决方案。
  • @VegardKT,嗨!自从我们上次谈话以来有任何结果吗? :)
  • 嘿,我使用了我在上面的答案中解释的解决方法。 (2017 年 7 月 21 日 11:10 回答)我不知道为什么会这样,但确实成功了。
  • 您是否使用 AdventureWorks 数据库测试过您的环境?
  • 奇怪的事情,如果我们在项目部署模式下创建新的 SSIS 项目,离开 2107 版本,并将其部署在我们的 2016 SSIS 服务上 - 一切正常。所以...我们只需要迁移到Project部署模式)))
【解决方案3】:

This MS 论坛帖子有以下建议。

如果存在,请将以下文件夹从 GAC 剪切并粘贴到其他位置。

C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.AnalysisServices.DeploymentEngine

然后,重建项目。

  1. 右键项目

  2. 点击属性

  3. 展开配置属性 -> 选择部署

  4. 在目标服务器:输入 \(确保 SSAS 服务器是多维 SSAS 实例)

  5. 点击应用

  6. 保存项目。重启IDE(SSDT)

  7. 启动 SSDT -> 选择项目 -> 并重建解决方案 \ 重建项目。

  8. 再次测试。

【讨论】:

  • 谢谢 Troy,我检查了部署配置中的目标服务器,它已经设置为正确的服务器。如何验证 DLL 是否存在于 GAC 中?编辑:我假设你的意思是这里? C:\Windows\Microsoft.NET\程序集。我能够找到 C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.AnalysisServices.Core,如果我是正确的,那是 Microsoft.AnalysisServices.ProcessType 的一部分。
【解决方案4】:

这似乎是因为 VS-2015 组件不支持的部署版本。

  • 转到项目-> 属性
  • 在配置属性中 -> 常规
  • 将 TargetServerVersion 设置为 SQL Server 2017

【讨论】:

  • 这个答案没有帮助,因为我们需要在 SQL Server 2016 下开发 SSIS-packages。如果你设置 SQL Server 2017 - 生成的处理命令不同,你不能将你的包部署到 SSIS 2016 ,即使你成功了 - 包也不会启动。
猜你喜欢
  • 2018-12-12
  • 2011-10-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-07
  • 2020-03-16
  • 2021-05-31
  • 2018-10-28
  • 2011-04-01
相关资源
最近更新 更多