Отладка задачи 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.
Чтобы вернуть возможность точки останова, я делаю следующее.
- Удалить новые функции С#
- Запустите мою задачу скрипта один раз, успешно. Т.е. без сбоев.
- Снова откройте проект Vsta из задачи "Сценарий" и установите точки останова.
В конце вы должны увидеть красный кружок на вашей задаче сценария.
(Проверено в VS 2017.)
![enter image description here]()
Примечание Я должен отметить, что отладка работает, даже если вы используете только "Выполнить задачу", а не "Выполнить пакет"!
Удалить новые функции С#
Чтобы удалить новые функции С#, я могу посоветовать вам два способа.
Во-первых, ограничьте свойства проекта Vsta С# 4.0 (перенесенные пакеты могут не поддерживать это).
- Dobule нажмите "Задача сценария", чтобы открыть "Редактор задачи сценария".
- Нажмите кнопку "Редактировать сценарий...", чтобы открыть Visual Studio.
- В "Обозревателе решений" выберите проект и нажмите клавишу F4 на клавиатуре.
- В открывшемся окне "Свойства" в "С# Language Level" выберите "С# 4.0"
- Создайте свой проект и исправьте ошибки компиляции.
Во-вторых, в проектах 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.
- Изменить задачу скрипта
- Нажмите на проект и выберите свойства
- Выберите, чтобы установить целевую платформу на 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 (даже если он мне не нужен). Тогда это сработало! :-)
Ответ 13
Это была моя проблема, и это должно быть ошибка!
https://developercommunity.visualstudio.com/content/problem/349680/gettersetter-variables-make-breakpoints-stop-worki.html