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

发布于 2024-12-11 13:13:27 字数 663 浏览 1 评论 0原文

我正在构建一个自定义 SSIS 任务。在任务中,我运行一些脚本。它们位于项目/子文件夹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\assemble\GAC_MSIL\BloombergRequest\versionNum\BBG.dll 无论我是从 SSIS 还是 Visual studio 进行调试...

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

I am building a custom SSIS task. In the task, I run some scripts. These are located in the project/ in a subfolder scripts/.

Now the problem is when I debug my task from BIDS:

Directory.GetCurrentDirectory();

returns: C:\Program Files (x86)\Microsoft Visual 9.0\Common7

But if I run/debug from visual studio (with DTExec) I get:

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

Now if I use: System.Reflection.Assembly.GetCallingAssembly().Location,
I get: C:\Windows\assembly\GAC_MSIL\BloombergRequest\versionNum\BBG.dll whether I debug from SSIS or Visual studio...

Basically I am looking for how to get a relative path to project\scripts\.... How is this possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

好倦 2024-12-18 13:13:27

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

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

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

There is no way within SSIS to get a relative path to a particular folder in a Visual Studio project - which makes sense, since the whole Visual Studio project normally doesn't get deployed with the package. And, as you noted, the concept of the "current directory" doesn't help, as it's based on where the executable is run from, not where the source code lives.

However, there's a (sort-of) straightforward workaround.

  1. Add a property to your custom task for the absolute path to the scripts folder.
  2. In the SSIS package using the custom task, set that property to the value of a package variable, and configure the package to get that variable from a configuration file (.dtsconfig)
  3. Either:
    • In your Visual Studio solution, add another C# DLL project. It doesn't need to have any code in it. Instead, in the project's Build Events property page, call a script that generates the .dtsconfig file in step 2 and pass the macro $(SolutionDir)/project/scripts as an argument; or
    • Manually set the configuration value to the absolute path to your scripts folder
用心笑 2024-12-18 13:13:27

使用:

Environment.CurrentDirectory

use:

Environment.CurrentDirectory
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文