Отладка SSIS Script task-точка останова включена, но не попадает

Я работаю над пакетом служб SSIS. Пакет имеет задачу скрипта (язык C#). Мне нужно отладить задачу скрипта. Я установил точку разрыва. Сценарий в Редакторе сценариев (Visual Studio) и задача в Редакторе пакетов служб SSIS показывают точку останова красным цветом - это означает, что точка останова включена. Однако, когда я отлаживаю пакет, точка останова не попадает.

точка останова не имеет условий на нем, поэтому я ожидаю, что он ударит каждый раз, когда пакет запускается.

Я использование Visual Studio 2008 в Windows 2003 R2 с 64-разрядной версией SP2.

12 ответов


после дополнительных исследований и пробной ошибки обнаружено, что пакет служб SSIS игнорирует точки останова в задаче сценария при отладке на 64-разрядной машине. Чтобы исправить это -

  1. перейдите в Обозреватель решений
  2. щелкните правой кнопкой мыши узел проекта SSIS > свойства
  3. Свойства Конфигурации > Отладка > Настройки Отладка > Набор Run64BitRunTime до False.

SSIS Project configuration settings

после внесения этого изменения точки останова ударили как магия.


обновление: Ребята, я againg потерял любую способность устанавливать точки останова (запрос к MS)
Мои предыдущие исправления ниже.
Теперь я использую logging и tracing вместо отладки.


новые функции C# (после C# 4.0) обвиняются в убийстве отладки задачи сценария SSIS.

чтобы вернуть возможность точки останова, я делаю следующее.

  1. удалить c# новые возможности
  2. запустить мой скрипт Задача один раз, успешно. Т. е. без аварии.
  3. откройте проект Vsta из моей задачи скрипта и поместите туда точки останова.

в конце вы должны увидеть красный круг на задаче скрипта.
(Проверял в VS 2017.)

enter image description here

Примечание. Я должен упомянуть, что отладка работает, даже если вы используете только "выполнить задачу", а не "выполнить пакет"!

удалить c# new особенности

чтобы удалить новые функции C#, я могу посоветовать вам два способа.

первый, ограничьте свойства проекта Vsta C# 4.0 (перенесенные пакеты могут не поддерживать это).

  1. Dobule щелкните "задачи " скрипт"," открыть "редактор задачи "скрипт"".
  2. Нажмите " Изменить Сценарий..."кнопка для открытия Visual Studio.
  3. в "обозревателе решений" выберите проект и нажмите клавишу F4 на клавиатура.
  4. в открывшемся окне "Свойства" В "уровень языка C#"выберите" C# 4.0"
  5. создайте свой проект и исправить ошибки компиляции.

во-вторых, проекты Vsta в старых / перенесенных пакетах могут не показывать вышеуказанное свойство " уровень языка C#".
Так что вы можете поместить свой код в поддельный проект в Visual Studio 2010 и скомпилировать его там.

запустите его один раз успешно

после исправления C#, Вы должны запустить задачу сценария один раз успешно.
Вы можете поставить return заявление в начале Main() метод для предотвращения любого реального выполнения.
жаль, это не всегда работает, и я не понимаю, почему, но вам определенно нужно исправить свой C# в первую очередь.
по крайней мере вы получите рабочую задачу скрипта и можете отладить ее старомодным способом (журналы Dts.Events..., исключений и т. д.)

TL; DR

похоже, что я даже получил серьезные случаи, когда новые функции C# заставляли задачи скрипта терпеть неудачу молча со статусом завершения успеха.

в качестве примера добавьте в задачу сценария следующее.

string Bug { get; } // Only getter properties.
//...
var str = $"Now is {DateTime.Now}"; // String Interpolation in C#
//...
var dummy = val?.ToUpper(); // ?. and ?[] null-conditional Operators

и обходные пути для этого неполного списка:

string Bug { get; set; }
//...
var str = string.Format("Now is {0}", DateTime.Now);
// etc.

что я также делаю, я строю свой код C# в Visual Studio 2010. Он просто не компилирует новый Функции .NET и не позволяют версии .NET Framework выше 4.0. Пока все идет хорошо.

конечно, другие ответы от этого SO-вопроса мне не помогли.


Я пробовал все ответы, представленные здесь, без успеха (используя VS2015). После некоторых поисков я нашел это вопрос, который на самом деле является ответом который заявил, что новые функции / синтаксис C# вызывают неправильный запуск отладчика.

в их примере (а также моем) использование Строковой интерполяции приводило к тому, что точки останова не попадали.

замена

$"{someVariable} - {someOtherVariable}"

С

string.Format("{0} - {1}", someVariable, someOtherVariable);

сделал трюк для мне.


использовать система.Диагностика.Отладчик класс для добавления точки останова программно:

System.Diagnostics.Debugger.Launch();
System.Diagnostics.Debugger.Break();

вы можете проверить, подключен ли отладчик или нет:

    if (System.Diagnostics.Debugger.IsAttached)
        System.Diagnostics.Debugger.Break();

выполните следующие действие:

  1. держите проект или решение открытым.
  2. запустите приложение, чтобы попасть в точку останова.
  3. выберите свой проект в Отладчик Just-In-Time.Just-In-Time Debugger snapshot

я унаследовал пакет служб SSIS, где, к сожалению, вышеуказанные ответы не помогли.

в конце концов я обнаружил, что в свойствах сборки задачи сценария для режима отладки был отмечен код оптимизации. Убедитесь, что это не отмечено, потому что для меня visual studio запустится для отладки скриптов и закроется вскоре после этого, не нарушая вообще.

Make sure Optimize code is not ticked

довольно странно, но стоит упомянуть.


недавно мы столкнулись с той же проблемой. Для нас решением было обеспечить, чтобы сценарий задачи проекта ознаменовался для запуска с платформы установлен на x86.

  1. изменить задачу скрипта
  2. нажмите на проект и выберите Свойства
  3. выберите для установки целевой платформы x86

в дополнение к предложению Джеффа также измените цель платформы на " x86 "(на вкладке "сборка" свойств скрипта. Это, наконец, заставило меня снова отлаживать 64-битную систему.


в моем случае мне пришлось избавиться от всех функций из C# 6: строковая интерполяция, нулевые условные операторы (?., ?(), ?[]) и члены с телом выражения (=>) (в вашем случае может быть больше). Вы можете проверить их все здесь. Конечно, то же самое относится и к C# 7 функций.

изменения 32/64 бит из других ответов не помогли, поэтому я откатил их, и отладка продолжала работать нормально.


в моем случае, ни одно из этих решений работал. В конце концов я узнал, что виновником был арфист. После удаления он начал работать как charm.


мои точки останова отказывались попадать, что бы я ни делал. Я закончил отладку и исправление проблем, просто используя броски исключений. Как только я исправил проблемы, которые у меня были, точки останова начали бить!

таким образом, мои точки останова будут поражены только после того, как код не испытает никаких проблем во время выполнения... что странно.


по моему опыту, это не имеет значения:

  • Если Run64BitRuntime является true или false
  • Если вы создаете версию 32 или 64 бит вашего пакета

но есть что-то очень важное, не упомянутое ни в одном другом ответе: вы должны запустить весь пакет. Если вы запустите задачу или контейнер, точка останова будет проигнорирована.

Я использую Visual Studio 2013 на 64-битном компьютере.


У меня был только один компонент скрипта, не было точек останова (я делал некоторые вещи CRM без необходимости источника / цели). Я trid, чтобы добавить исходный componenet с простым fetchXML (даже если он мне не нужен). Значит, сработало! :-)