我在哪里部署DLL';从将部署到GAC的自定义.Net数据提供程序调用非托管代码时要使用的

本文关键字:部署 程序 数据 调用 非托管代码 Net 自定义 DLL GAC 在哪里 | 更新日期: 2023-09-27 18:20:24

我已经构建了一个自定义.Net数据提供程序,并且正在尝试部署它,以便在SQL Integration Services(SSIS)中使用它。我遇到的问题是,我引用了Win32 DLL中的非托管方法。为了使我的数据提供程序在SSIS中工作,我必须对托管提供程序DLL进行签名,并将其部署到全局程序集缓存(GAC)中。当我尝试在商业智能开发工作室(BIDS)中使用我的数据提供程序时,它会给我以下错误:

TITLE: Connection Manager
------------------------------
Test connection failed because of an error in initializing provider. Unable to load DLL 'RTB32.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
------------------------------
BUTTONS:
OK
------------------------------

我应该如何/在哪里将非托管代码与我的提供程序一起部署,以使其正常工作?我尝试过的东西:

  1. 将DLL嵌入到托管DLL中
  2. 将非托管DLL添加到GAC
  3. 将非托管DLL的位置添加到PATH系统变量中
  4. 将非托管DLL放入System32目录(出于绝望)

附带说明:当我在Forms应用程序中使用数据提供程序时,将非托管程序集和托管程序集放在同一目录中,一切都可以正常工作。

旁注2:我希望这个数据提供程序能在更多的地方工作,而不仅仅是SSIS。我还希望它能作为SQL Server中的链接服务器、SSRS中的数据源、Visual Studio的数据源和实体框架等工作。我更愿意将DLL放在一个可以用于所有这些的地方。

谢谢!

Chris

我在哪里部署DLL';从将部署到GAC的自定义.Net数据提供程序调用非托管代码时要使用的

如果这是一个在64位操作系统上运行的32位应用程序,则需要在C:'Windows'SysWOW64目录中安装DLL。

否则,它们应该进入C:'Windows'System32

显然,在这两种情况下,您都需要为正在安装的机器使用适当的驱动器和目录。