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

时间:2011-10-21 08:24:39

标签: c# ssis directory task

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

现在问题是我从BIDS调试我的任务时:

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 \ 的相对路径....这怎么可能?

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:-1)

使用:

Environment.CurrentDirectory