2011-10-21 46 views
1

我正在构建自定义的SSIS任务。在这个任务中,我运行了一些脚本。这些位于项目/子文件夹脚本中。获取自定义任务的项目目录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进行调试...

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

回答

2

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

但是,有一种(简单的)简单的解决方法。

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

使用:

Environment.CurrentDirectory 
+0

不幸的是,当我从BIDS调试这将返回: 'C:\ Program Files文件(x86)的\微软的Visual 9.0 \ Common7 \ IDE' ... 并从VS: 'C:\ Users \ nwadike \ Documents \ Visual Studio 2008 \ Projects \ BloombergRequest \ BloombergRequest \ bin \ Debug' ... – nche