#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 обычно не развертывается вместе с пакетом. И, как вы заметили, концепция «текущего каталога» не помогает, поскольку она основана на том, откуда запускается исполняемый файл, а не на том, где находится исходный код.
Однако существует (своего рода) простой обходной путь.
- Добавьте свойство к вашей пользовательской задаче для абсолютного пути к папке scripts.
- В пакете SSIS, использующем пользовательскую задачу, установите для этого свойства значение переменной пакета и настройте пакет на получение этой переменной из файла конфигурации (.dtsconfig)
- Либо:
- В вашем решении Visual Studio добавьте еще один проект C # DLL. В нем не обязательно должен быть какой-либо код. Вместо этого на странице свойств событий сборки проекта вызовите скрипт, который генерирует файл .dtsconfig на шаге 2, и передайте макрос
$(SolutionDir)/project/scripts
в качестве аргумента; или - Вручную задайте для значения конфигурации абсолютный путь к папке скриптов
- В вашем решении Visual Studio добавьте еще один проект C # DLL. В нем не обязательно должен быть какой-либо код. Вместо этого на странице свойств событий сборки проекта вызовите скрипт, который генерирует файл .dtsconfig на шаге 2, и передайте макрос
Ответ №2:
использовать:
Environment.CurrentDirectory
Комментарии:
1. К сожалению, когда я выполняю отладку из заявок, это возвращает:
C:Program Files (x86)Microsoft Visual 9.0Common7IDE
… И из VS:C:UsersnwadikeDocumentsVisual Studio 2008ProjectsBloombergRequestBloombergRequestbinDebug
…