Получить каталог проекта для SSIS пользовательских задач

#c# #ssis #directory #task

#c# #ssis #каталог #задача

Вопрос:

Я создаю пользовательскую задачу SSIS. В задаче я запускаю несколько сценариев. Они расположены в проекте/ во вложенной папке scripts/.

Теперь проблема в том, что я отлаживаю свою задачу из заявок:

 Directory.GetCurrentDirectory();
  

ВОЗВРАТ: C:Program Files (x86)Microsoft Visual 9.0Common7

Но если я запускаю / отлаживаю из Visual Studio (с DTExec), я получаю:

 C:UsersnwadikeDocumentsVisual Studio 2008ProjectsBloombergRequestBloombergRequestbin
  

Теперь, если я использую: System.Reflection.Assembly.GetCallingAssembly().Location ,
Я получаю: C:WindowsassemblyGAC_MSILBloombergRequestversionNumBBG.dll выполняю ли я отладку из SSIS или Visual studio…

По сути, я ищу, как получить относительный путь к projectscripts …. Как это возможно?

Ответ №1:

В SSIS нет способа получить относительный путь к определенной папке в проекте Visual Studio, что имеет смысл, поскольку весь проект Visual Studio обычно не развертывается вместе с пакетом. И, как вы заметили, концепция «текущего каталога» не помогает, поскольку она основана на том, откуда запускается исполняемый файл, а не на том, где находится исходный код.

Однако существует (своего рода) простой обходной путь.

  1. Добавьте свойство к вашей пользовательской задаче для абсолютного пути к папке scripts.
  2. В пакете SSIS, использующем пользовательскую задачу, установите для этого свойства значение переменной пакета и настройте пакет на получение этой переменной из файла конфигурации (.dtsconfig)
  3. Либо:
    • В вашем решении Visual Studio добавьте еще один проект C # DLL. В нем не обязательно должен быть какой-либо код. Вместо этого на странице свойств событий сборки проекта вызовите скрипт, который генерирует файл .dtsconfig на шаге 2, и передайте макрос $(SolutionDir)/project/scripts в качестве аргумента; или
    • Вручную задайте для значения конфигурации абсолютный путь к папке скриптов

Ответ №2:

использовать:

 Environment.CurrentDirectory
  

Комментарии:

1. К сожалению, когда я выполняю отладку из заявок, это возвращает: C:Program Files (x86)Microsoft Visual 9.0Common7IDE … И из VS: C:UsersnwadikeDocumentsVisual Studio 2008ProjectsBloombergRequestBloombergRequestbinDebug