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

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

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

Я использую Visual Studio 2008 для 64-разрядного пакета обновления 2 (SP2) для Windows 2003 R2.

Ответ 1

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

  • Перейдите в Обозреватель решений
  • Щелкните правой кнопкой мыши ваш проект SSIS node > Свойства
  • В свойствах конфигурации > Отладкa > Параметры отладки > Установите Run64BitRunTime в False.

SSIS Project configuration settings

После выполнения этого изменения точки останова попадают подобно магии.

Ответ 2

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

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

Замена

$"{someVariable} - {someOtherVariable}"

с

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

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

Ответ 3

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


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

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

  1. Удалить новые функции С#
  2. Запустите мою задачу скрипта один раз, успешно. Т.е. без сбоев.
  3. Снова откройте проект Vsta из задачи "Сценарий" и установите точки останова.

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

enter image description here

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

Удалить новые функции С#

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

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

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

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

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

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

TL; DR

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

Например, добавьте следующее в задачу "Сценарий".

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.

Что я также делаю, я строю свой код С# в Visual Studio 2010. Он просто не компилирует новые функции .NET и не допускает версии .NET Framework выше 4.0. Все идет нормально.

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

Ответ 4

Используйте System.Diagnostics.Debugger класс, чтобы программно добавить точку останова:

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

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

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

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

  • Сохраните проект или решение.
  • Запустите приложение, чтобы попасть в точку останова.
  • Выберите свой проект в Отладчике "Just-In-Time Debugger" . Просто -Встреча с отладчиком во времени

Ответ 5

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

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

Make sure Optimize code is not ticked

Довольно непонятно, но стоит упомянуть.

Ответ 6

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

Ответ 7

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

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

Ответ 8

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

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

Ответ 9

В дополнение к предложению Джеффа также измените целевую платформу на "x86" (на вкладке "Свойства" script свойств. Это НАКОНЕЧНО получило отладку снова в 64-битной системе.

Ответ 10

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

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

Ответ 11

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

  • если Run64BitRuntime имеет значение true или false
  • если вы собираете 32 или 64-битную версию вашего пакета

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

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

Ответ 12

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