Ssis 找不到方法:Microsoft.AnalysisServices
我已经为带有SSIS包的数据仓库创建了一个ETL设置。 在最后一步“AnalysisServices处理任务编辑器”之前,一切正常 每当我添加多维数据集并按“确定”时,都会出现以下错误: 未找到方法:“'Void Microsoft.AnalysisServices.Commands.ProcessCommand.set_Type(Microsoft.AnalysisServices.ProcessType)'” 我怀疑DLL有问题,但我不确定是哪个。 我在SQL Server安装(C:\Program Files(x86)\Microsoft SQL Server\120\SDK\Assembly)下找到了一个Ssis 找不到方法:Microsoft.AnalysisServices,ssis,Ssis,我已经为带有SSIS包的数据仓库创建了一个ETL设置。 在最后一步“AnalysisServices处理任务编辑器”之前,一切正常 每当我添加多维数据集并按“确定”时,都会出现以下错误: 未找到方法:“'Void Microsoft.AnalysisServices.Commands.ProcessCommand.set_Type(Microsoft.AnalysisServices.ProcessType)'” 我怀疑DLL有问题,但我不确定是哪个。 我在SQL Server安装(C:\Pro
Microsoft.AnalysisServices.dll
我在我的Visual Studio安装文件夹中没有找到它。MS论坛帖子有以下建议
如果存在,请将以下文件夹从GAC剪切并粘贴到其他位置
C:\Windows\Microsoft.NET\assembly\GAC\U MSIL\Microsoft.AnalysisServices.DeploymentEngine
然后,重建项目
public void Main()
{
布尔tstFire=false;
Microsoft.AnalysisServices.Server myServer=新的Microsoft.AnalysisServices.Server();
//从包中获取到SSAS数据库的连接
ConnectionManager myConn=Dts.Connections[“SSAS”];
//供将来使用的模板
字符串ProcessingCommandTemplate=“XXXXXXX”;
字符串myProcessingCommand=“”;
//用于收集维度(不含重复项)的数组
Dictionary AmodDictionary=新字典();
字符串myServerName=myConn.ConnectionString;
字符串myDatabaseName=myConn.Properties[“InitialCatalog”].GetValue(myConn.ToString();
//连接到SSAS服务器实例
Connect(myServer名称);
Database amoDb=myServer.Databases.FindByName(myDatabaseName);
//获取多维数据集中使用的所有维度
foreach(amoDb.Cubes中的立方体amoCube)
{
foreach(立方体尺寸amoCube中的amoDimension.Dimensions)
{
如果(!amoDimDictionary.ContainsKey(amodiment.Dimension))
{
amoDimDictionary.Add(amodiment.Dimension,amoCube);
}
}
}
//启动XML捕获维度
myServer.CaptureXml=true;
foreach(维度amodDictionary.Keys中的维度amodedimension)
{
if(amodedimension.State==AnalysisState.Unprocessed)
{
amodimmension.Process(ProcessType.ProcessFull);
}
其他的
{
进程(ProcessType.ProcessUpdate);
}
}
myServer.CaptureXml=false;
//生成命令
foreach(myServer.CaptureLog中的字符串strXML)
{
myProcessingCommand=myProcessingCommand+strXML.ToString();
}
myProcessingCommand=ProcessingCommandTemplate.Replace(“XXXXXXX”,myProcessingCommand);
变量[“User::DimensionsProcessingCommand”]。值=myProcessingCommand.ToString();
//要在VS 2015运行时查看的命令输出
Dts.Events.FireInformation(1,“,Dts.Variables[“User::DimensionsProcessingCommand”].Value.ToString(),”,0,ref-tstFire);
附言。
在我们的开发机器上从头开始安装:SQL Server 2016、Visual Studio 2015、SSDT 17.1
当我们试图在SQL Server 2016兼容性下开发一些SSIS包时,我们偶然发现了这么多问题……所以我们停止了计算。GAC被谷歌搜索并反复调整,没有任何结果。
14.0 Microsoft DEV环境似乎有很多问题,如果您试图在13.0及更低版本下创建一些东西,就会出现问题。我找到了解决方法 我试图用AdventureWorks数据集重现问题,以验证问题是由于.dll而不是我的多维数据集或任何其他原因造成的 因此,我从AdventureWorks数据集中使用多维数据集创建了一个新的OLTP&DWH,并创建了一个新的SSIS项目,其中唯一的步骤就是处理多维数据集 在这个设置中,我没有得到与我在原始项目中得到的相同的错误,似乎.dll没有任何问题 然而,我也尝试将目标服务器和多维数据集更改为我原来的服务器和多维数据集,令我惊讶的是,它居然成功了 所以我保存了这个包,并将它导入到我的原始项目中,然后从那里删除了这个包,它就可以工作了 编辑:请参阅Pavel的Possibile解决方案
奇怪的是,如果我们在项目部署模式下创建新的SSIS项目,请保留2017版,并将其部署到2016年的SSIS服务上-一切都很好。因此…我们只需要迁移到项目部署模式即可)-Pavel Botygin
这似乎是因为VS-2015组件不支持部署版本
- 转到项目->属性
- 在配置中
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);