【问题标题】:Get project directory for custom task SSIS获取自定义任务 SSIS 的项目目录
【发布时间】:2011-10-23 04:50:34
【问题描述】:

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

现在问题是当我从 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 调试...

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

【问题讨论】:

    标签: c# ssis directory task


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      使用:

      Environment.CurrentDirectory
      

      【讨论】:

      • 不幸的是,当我从 BIDS 调试时返回:C:\Program Files (x86)\Microsoft Visual 9.0\Common7\IDE... 而从 VS:C:\Users\nwadike\Documents\Visual Studio 2008\Projects\BloombergRequest\BloombergRequest\bin\Debug...
      猜你喜欢
      • 2014-02-13
      • 2010-10-23
      • 2012-06-29
      • 1970-01-01
      • 2017-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多