Le point de rupture des tâches du Script SIS de débogage est activé, mais il ne fonctionne pas
je travaille sur un paquet SSIS. Le paquet a une tâche script (C# language). J'ai besoin de déboguer le script de la tâche. Je définir le point de rupture. Le script dans script editor (Visual Studio) et la tâche dans SSIS package editor, tous les deux, montrent le point de rupture en couleur rouge - signifie que le point de rupture est activé. Cependant, lorsque je corrige le paquet, le point de rupture n'est pas atteint.
le point de rupture n'a pas de conditions sur lui, donc je m'attends à ce qu'il frappe chaque fois que le paquet court.
je suis en utilisant Visual Studio 2008 on Windows 2003 R2 64-bit SP2.
12 réponses
après plus de recherches et d'essais, a trouvé que le paquet SSIS ignore les points de rupture dans une tâche de Script lors du débogage sur une machine 64 bits. Pour le fixer -
- aller à la Solution Explorer
- clic droit sur votre nœud de projet SIS > propriétés
- Dans Les Propriétés De Configuration > Débogage > Options De Débogage > Set
Run64BitRunTime
False
.
après avoir fait ce changement, les points de rupture frappent comme magie.
mise à Jour: les Gars, je againg perdu toute capacité à définir des points d'arrêt (une demande de MS)
Mes corrections précédentes sont ci-dessous.
Maintenant j'utilise la journalisation et le traçage au lieu du débogage.
C# de nouvelles fonctionnalités (après C# 4.0) sont mis en cause pour le meurtre de débogage de la Tâche de Script de SSIS.
pour retourner la capacité du point de rupture, je fais ce qui suit.
- Supprimer c # new caractéristiques
- exécutez ma tâche Script une fois, avec succès. I. e. sans un crash.
- rouvrez le projet Vsta de ma tâche de Script et mettez des points de rupture là.
À la fin, vous devez voir un cercle rouge sur votre Tâche de Script.
(Testé dans VS 2017.)
Remarque:. Je dois mentionner que le débogage fonctionne même si votre utilisation "Exécution de la Tâche", pas "Exécuter Package"!
Supprimer les C# new
pour supprimer le C # nouvelles fonctionnalités, je peux vous conseiller deux façons.
Premier, restreindre les propriétés du projet Vsta à C # 4.0 (les paquets migrés peuvent ne pas supporter cela).
- Dobule cliquez sur votre " Script Task "pour ouvrir"Script Task Editor".
- Cliquez Sur " Modifier Le Script..."bouton pour ouvrir Visual Studio.
- dans "Solution Explorer" sélectionner le projet et cliquez sur la touche F4 de votre clavier.
- Dans ouvert "" Propriétés de la fenêtre en "Langage C# Niveau de" choix "C# 4.0"
- Construisez votre projet et corriger les erreurs de compilation.
Secundo, les projets Vsta dans les paquets anciens / migrés peuvent ne pas afficher la propriété "C# Language Level" ci-dessus.
Ainsi, vous pouvez mettre votre code dans un faux projet dans Visual Studio 2010 et le compiler.
exécutez-le une fois
après avoir corrigé votre C#, vous devez exécuter votre tâche Script une fois avec succès.
Vous voudrez peut-être mettre le return
déclaration au début de l' Main()
méthode pour empêcher toute exécution réelle.
Désolé, cela ne fonctionne pas toujours et je ne sais pas pourquoi mais vous devez certainement réparer votre C# en premier lieu.
Au moins vous obtiendrez une tâche de Script de travail et pouvez la déboguer dans un vieux de façon traditionnelle (journaux par Dts.Events...
, les exceptions, etc.)
TL;DR
il semble que j'ai même eu des cas graves quand C# nouvelles fonctionnalités ont forcé les tâches de Script à échouer silencieusement avec un statut de réussite d'achèvement.
à titre d'exemple, ajoutez ce qui suit à votre tâche Script.
string Bug { get; } // Only getter properties.
//...
var str = $"Now is {DateTime.Now}"; // String Interpolation in C#
//...
var dummy = val?.ToUpper(); // ?. and ?[] null-conditional Operators
Et des solutions de contournement pour cette liste non-complète:
string Bug { get; set; }
//...
var str = string.Format("Now is {0}", DateTime.Now);
// etc.
Ce que je fais aussi, j'ai construit mon code C# en Visual Studio 2010. Simplement ne compile pas les nouvelles fonctionnalités .NET et n'autorise pas les versions .net Framework supérieures à 4.0. Pour l'instant, donc bon.
bien sûr, d'autres réponses à cette SO-question ne m'ont pas aidé.
j'ai essayé toutes les réponses fournies ici sans succès (en utilisant VS2015). Après quelques recherches, j'ai trouvé ce question qui est en réalité une réponse qui indiquait que les nouvelles fonctionnalités / syntaxe de C# faisaient que le débogueur ne fonctionnait pas correctement.
dans leur exemple (et aussi dans le mien), l'interpolation des cordes empêchait de frapper les points de rupture.
Remplacer
$"{someVariable} - {someOtherVariable}"
string.Format("{0} - {1}", someVariable, someOtherVariable);
a fait le tour pour je.
Utiliser Système.Diagnostic.Débogueur classe pour ajouter un point d'arrêt du programme:
System.Diagnostics.Debugger.Launch();
System.Diagnostics.Debugger.Break();
Vous pouvez vérifier si le débogueur est attaché ou pas:
if (System.Diagnostics.Debugger.IsAttached)
System.Diagnostics.Debugger.Break();
suivez cette étape:
j'ai hérité d'un paquet SSIS où malheureusement les réponses ci-dessus n'ont pas aidé.
à la fin, j'ai trouvé que les propriétés de construction du script pour le mode de débogage avaient coché le code optimize. Assurez-vous que ce n'est pas coché parce que pour moi visual studio serait le feu vers le haut pour le débogage de script et fermer peu de temps après sans casser du tout.
assez obscur mais digne de mention.
nous avons eu le même problème récemment. Pour nous, la solution était de s'assurer que l' projet de tâche de script a été marqué pour fonctionner comme avec la cible de la plate-forme fixée à x86.
- modifier la tâche script
- Cliquez sur le projet et sélectionnez propriétés
- Sélectionner pour définir la plate-forme cible pour x86
en plus de la suggestion de Jeff, changez aussi la cible de la plate-forme en "x86" (dans L'onglet Build des propriétés du script. Cela M'a finalement permis de déboguer à nouveau sur un système 64 bits.
dans mon cas, j'ai dû me débarrasser de toutes les fonctionnalités de C# 6: interpolation de chaîne, opérateurs de conditionnel nuls (?.
,?()
,?[]
) et les membres ayant un corps d'expression (=>
) (il pourrait y en avoir plus dans votre cas). Vous pouvez vérifier tous les ici. Bien sûr, la même chose s'applique aux caractéristiques C# 7.
les changements de bit 32/64 des autres réponses n'ont pas aidé, donc je les ai fait revenir et le débogage fonctionnait très bien.
Dans mon cas, aucune de ces solutions n'a fonctionné. J'ai fini par savoir que le Resharper était coupable. Après l'avoir désinstallé, il a commencé à fonctionner comme un charme.
mes points d'arrêt ont refusé de frapper quoi que je fasse. J'ai fini par déboguer et régler les problèmes en utilisant des lancers d'exception. Une fois que j'ai réglé les problèmes que j'avais, les points d'arrêt ont commencé à frapper!
donc mes points d'arrêt ne se déclencheraient que lorsque le code ne connaîtrait pas de problèmes d'exécution... ce qui est bizarre.
D'après mon expérience, cela n'a pas d'importance:
- si Run64BitRuntime est true ou false
- si vous construisez la version 32 ou 64 bits de votre colis
mais il y a quelque chose de très important, qui n'est mentionné dans aucune autre réponse: vous devez exécuter le paquet entier. Si vous exécutez une Tâche ou un Conteneur, le point d'arrêt sera ignoré.
J'utilise Visual Studio 2013, sur une machine 64 bits.
Je n'ai eu qu'un seul composant de Script où aucun point d'arrêt n'a été touché (je faisais quelques trucs de CRM sans avoir besoin de source/cible). Je trid pour ajouter un componenet Source avec un simple fetchXML (même si je n'en avais pas besoin). Puis il a travaillé! : -)