web-dev-qa-db-fra.com

"Une exception d'erreur d'exécution a été levée par la cible d'un appel" dans Tâche de script

J'ai un package SSIS avec une tâche de script, j'obtiens l'erreur suivante lorsque j'essaie de l'exécuter dans mon système local. Cela fonctionne très bien pour mes collègues ainsi qu'en production. Cependant, je ne peux pas l'exécuter localement, pour tester. Je garde un point de débogage dans la méthode principale, mais il n'est jamais atteint, j'obtiens l'erreur avant qu'il ne passe à la méthode principale.

enter image description here

J'utilise VS 2010, .Net Framework 4.5.

La tâche de script se compile. Je reçois le message SSIS package "..\Test.dtsx" suivant au démarrage. Erreur: 0x1 lors du test: une exception a été levée par la cible d'une invocation. Échec de la tâche: test du package SSIS "..\Test.dtsx" terminé: succès. Le programme "[2552] DtsDebugHost.exe: DTS" s'est terminé avec le code 0 (0x0).

Voici le code:

public void Main()
{
try
{
 LogMessages("Update Bug package execution started at :: " + DateTime.Now.ToLongTimeString());
 LogMessages("Loading package configuration values to local variables.");

strDBConn = Dts.Variables["User::DBConnection"] != null ? Dts.Variables["User::DBConnection"].Value.ToString() : string.Empty;
strTPCUrl = Dts.Variables["User::TPCUrl"] != null ? Dts.Variables["User::TPCUrl"].Value.ToString() : string.Empty;

TfsTeamProjectCollection objTPC = new TfsTeamProjectCollection(new Uri(strTPCUrl));
WorkItemStore objWIS = new WorkItemStore(objTPC);
WorkItemCollection objWIC = objWIS.Query("SELECT...");

foreach (WorkItem wi in objWIC)
{
}

}
catch(Exception ex)
{
}

Lorsque j'ai commenté le code de TfsTeamProjectCollection objTPC = new TfsTeamProjectCollection (new Uri (strTPCUrl)); Le script s'exécute avec succès. Cependant, si je garde TfsTeamProjectCollection objTPC = new TfsTeamProjectCollection (new Uri (strTPCUrl)); et commenter le reste, je reçois l'exception. J'ai accès à l'URL.

J'utilise Microsoft.TeamFoundation.Client.dll et Microsoft.TeamFoundation.WorkItemTracking.Client.dll, dans ma tâche de script. Cependant, la version de la DLL dans le package est 10.0, et la version de la DLL dans mon GAC est 12.0. Cela causerait-il un problème?

9
perplexedDev

J'ai eu le même problème (c'est-à-dire le même code d'erreur Erreur: 0x1 ...).

Le problème était avec certaines des bibliothèques référencées à partir d'un dossier manquant.

Supprimer les références et les rajouter du chemin correct a résolu le problème.

La référence Microsoft ( https://msdn.Microsoft.com/en-us/library/ms345164.aspx ) liée au code d'erreur est très générique et ne vous aide pas beaucoup. Cependant, en lisant d'autres articles, il est fort probable qu'il indique une raison d'échec inconnue pour exécuter la tâche de script.

  • Code hexadécimal: 0x1
  • Code décimal: 1
  • Nom symbolique: DTS_MSG_CATEGORY_SERVICE_CONTROL
  • Description: fonction incorrecte.
2
Ylli Prifti

Il s'agit simplement d'une situation différente et non destinée à être la solution finale pour tous.

Lorsque j'installais mes DLL dans le GAC, j'ai oublié d'exécuter mon script en tant qu'administrateur et le script s'est exécuté en silence sans erreur comme s'il fonctionnait.

Je me sentais vraiment stupide quand j'ai réalisé que c'était ce que j'avais fait de mal. J'espère que cela peut aider à empêcher d'autres personnes de perdre du temps sur quelque chose de si stupide.

Pour référence, voici ce que j'utilise pour installer mes DLL dans le GAC et je l'ai modifié pour me dire quand je ne l'exécute pas en tant qu'administrateur maintenant:

#https://superuser.com/questions/749243/detect-if-powershell-is-running-as-administrator
$isAdmin = ([Security.Principal.WindowsPrincipal] `
  [Security.Principal.WindowsIdentity]::GetCurrent() `
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)

if($isAdmin -eq $false)
{
    Write-Host "You have to run this script as Administrator or it just won't work!" -ForegroundColor Red

    return;
}

$strDllPath = "C:\PathToYourDllsHere\"

#Note that you should be running PowerShell as an Administrator
[System.Reflection.Assembly]::Load("System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")            
$publish = New-Object System.EnterpriseServices.Internal.Publish            


$arr = @(
    "YourDLL01.dll",
    "YourDLL02.dll",
    "YourDLL03.dll"
)

get-date

foreach($d in $arr)
{
    $p = ($strDllPath + $d);

    $p

    $publish.GacInstall($p);
}

#If installing into the GAC on a server hosting web applications in IIS, you need to restart IIS for the applications to pick up the change.
#Uncomment the next line if necessary...
#iisreset

Crédit pour savoir si votre script PowerShell s'exécute en mode administrateur ou non: https://superuser.com/questions/749243/detect-if-powershell-is-running-as-administrator

0
dyslexicanaboko

J'ai reçu ce message d'erreur lorsque j'ai fait référence à une variable ssis transmise dans Dts.Variables ["User :: xxxx] .Value (); où xxxx n'existait pas et n'a pas été transmis par le programme appelant. Il s'agissait d'une simple console.Writeline se référant à une variable passée qui n'existait pas.

0
flashgordon

Son fixe, lorsqu'il a été ajouté une référence à la version 12.0.0 de la DLL et changé le Framework cible en .Net Framework 4.5

0
perplexedDev