当涉及到 ssis 2016 时,我能够以编程方式创建包,但是当我尝试以编程方式创建包时,我遇到了错误。
无法加载文件或程序集“microsoft.sqlserver.dtsruntimewrap,version=15.100.0.0,culture=neutral,publickeytoken=89845dcd8080cc91”或其依赖项之一。该系统找不到指定的文件。”
创建示例包并上传到以下一个驱动器位置。
我观察到的是 2016 年的 Microsoft.SqlServer.DTSRuntimeWrap 存在于
C:\Windows\Microsoft.NET\assembly\GAC_32\Microsoft.SqlServer.DTSRuntimeWrap\v4.0_13.0.0.0__89845dcd8080cc91
但是作为visual studio 2017安装一部分的ssis 2019没有安装在GAC_32中,而是安装在
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\CommonExtensions\Microsoft\SSIS\150\Binn\Microsoft.SQLServer.DTSRuntimeWrap.dll
所以使用 gacutil 将它安装到 gac 中,但现在我遇到了错误。
Microsoft.SqlServer.Dts.Runtime.DtsComException:'找不到集成服务类。确保在运行应用程序的计算机上正确安装了集成服务。此外,如果您正在运行 64 位应用程序,请确保安装了 64 位版本的 Integration Services。
更新:
我知道安装 SSIS (MsDtsServer150) 可以解决这个问题,但是在 32 位模式下运行 ssis 确实不需要,因为我的应用程序在 32 位模式下运行,它应该可以在不安装类似于 SSMS 中的导入导出向导的 SSIS 的情况下工作。
做了更多的研究,我的应用程序在 32 位模式下运行 SSIS 2017 即使没有安装 SSIS,因为 SSMS 17.* 添加了需要的 dll 但 SSMS 18.0 没有安装需要的 dll,并且导入导出向导在 ssms 18.0 中被禁用,所以我的应用程序不再工作了。
我能够从 Visual Studio 运行 SSIS 包,所以我的主要问题是,我如何能够在没有 gac 中的 dll 的情况下在 Visual Studio 中运行它?我怎样才能利用同样的东西?
这里有一个详细的解释:
我们可以使用 Sql server * 版本安装程序(例如:sql server developer edition)为 SSIS 32 位和 64 位安装 SSIS,用于任何调用 DTSRuntime.Application() 的应用程序,但如果没有使用 sql server 安装程序安装 SSIS,而是刚刚安装了 SSMS,它仍然会向 gac 添加 32 位版本,并在 DTS 文件夹下创建包含所有需要的 dll 的“C:\Program Files (x86)\Microsoft SQL Server\140”文件夹,这样我们就可以在其中运行 SSIS通过调用 DTSRuntime.Application() 并将项目设置为 32 位模式来实现 32 位模式。
Visual Studio 正在为 15.0.0.0 创建 dll 的 ex: 15.100.0.0 版本,并且它能够以某种方式使用同一文件夹中的 dll,以利用我尝试在 app.config 中创建绑定重定向的相同功能,如下所示,但那没有不工作
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.SqlServer.ManagedDTS" publicKeyToken="89845dcd8080cc91" culture="neutral"/>
<bindingRedirect oldVersion="11.0.0.0-15.0.0.0" newVersion="15.100.0.0"/>
<codeBase version="15.100.0.0" href="C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\SSIS\150\Binn\Microsoft.SqlServer.ManagedDTS.dll"/>
</dependentAssembly>
</assemblyBinding>
甚至尝试将 href 更改为“.\Microsoft.SqlServer.ManagedDTS.dll”以指向 bin 中的程序集,但即使这样也无济于事。