获取自定义任务SSIS的项目目录

本文关键字:项目 SSIS 自定义 任务 获取 | 更新日期: 2023-09-27 18:11:49

我正在构建一个自定义SSIS任务。在这个任务中,我运行了一些脚本。它们位于项目/子文件夹scripts/.

中。

现在的问题是当我调试我的任务从出价:

Directory.GetCurrentDirectory();

返回:C:'Program Files (x86)'Microsoft Visual 9.0'Common7

但如果我运行/调试从visual studio(与DTExec)我得到:

C:'Users'nwadike'Documents'Visual Studio 2008'Projects'BloombergRequest'BloombergRequest'bin

现在如果我使用:System.Reflection.Assembly.GetCallingAssembly().Location,我得到:C:'Windows'assembly'GAC_MSIL'BloombergRequest'versionNum'BBG.dll是否我从SSIS或Visual studio调试…

基本上我正在寻找如何获得项目'scripts'....的相对路径这怎么可能呢?

获取自定义任务SSIS的项目目录

在SSIS中没有办法获得Visual Studio项目中特定文件夹的相对路径——这是有意义的,因为整个Visual Studio项目通常不会与包一起部署。而且,正如您所指出的,"当前目录"的概念没有帮助,因为它基于可执行文件的运行位置,而不是源代码所在的位置。

然而,有一个(某种程度上)直接的解决方法。

  1. 为您的自定义任务添加一个属性,用于到脚本文件夹的绝对路径。
  2. 在使用自定义任务的SSIS包中,将该属性设置为包变量的值,并配置包以从配置文件(.dtsconfig)中获取该变量
  3. :
      在您的Visual Studio解决方案中,添加另一个c# DLL项目。它不需要包含任何代码。相反,在项目的Build Events属性页中,调用在步骤2中生成.dtsconfig文件的脚本,并将宏$(SolutionDir)/project/scripts作为参数传递;
  4. 手动设置配置值为脚本文件夹的绝对路径

use:

Environment.CurrentDirectory