Warum kann die SSIS -Skript -Aufgabe keine genaue Fehleranzeige für fehlende DLL zurückgeben?C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Warum kann die SSIS -Skript -Aufgabe keine genaue Fehleranzeige für fehlende DLL zurückgeben?

Post by Anonymous »

Wir haben herausgefunden, dass wir zur Verwendung von Bibliotheken in der Skriptaufgabe von SSIS -Paketen die DLL zu GAC (globaler Assembly -Cache) manuell hinzufügen und eine Referenz in die DLL -Datei im Code -Editor des Skriptaufgabe hinzufügen müssen. Weitere Informationen finden Sie in diesem Beitrag. Um das Testszenario zu erstellen, können wir nur als Beispiel einen fehlenden DLL -Fehler durch entweder erstellen:

AWSSDK.core.dll Nehmen Sie beispielsweise einen fehlenden DLL -Fehler:

In das Verzeichnis C: \ Programme (x86) \ Microsoft SQL Server \ 130 \ dts \ Binn \ und umbenennen Sie AWSSDK.Core.dll zu um Awssdk.core.dll.bak . Auf diese Weise kann das System die DLL nicht zum Verknüpfen finden. Auf diese Weise können wir den Fehler für das Testen auf Visual Studio erzeugen, jedoch nicht auf der Bereitstellung von SQL Server. >
Wenn die Skriptaufgabe den folgenden Quellcode verwendet, ist Regionendpoint Region = RegionEndPoint.USEAST1; < /code> erfordert die AWS -Bibliothek, so Eine klare Anzeige. > at system.reflection.runtimemethodinfo.unsafeinvokeInternal (Objekt OBJ, Objekt [] Parameter, Objekt [] Argumente)

at system.reflection.runtimemethodinfo.invoke (Object OBJ, BindingFlags Invokeattr, Binder Binder, Objekt [] Parameter, CultureInfo -Kultur)

at system.runtimetype.invokemember (String -Name, BindingFlags BindingFlags, Bindemittelbindemittel, Objektziel, Objekt [] bereitgestelltesArgs, Parametermodifier [] Modifikatoren, CultureInfo -Kultur, String [] namensParams)

at microsoft.sqlserver.dts.tasks.scripttask.vstataScscriptingEngine.executscript ()
< /p>

< /Blockquote>

Code: Select all

public void Main()
{
try
{
RegionEndpoint region = RegionEndpoint.USEast1;
bool fireAgain = false;
Dts.Events.FireInformation(0, "Test", region.SystemName, string.Empty, 0, ref fireAgain);
}
catch (Exception ex)
{
Dts.Events.FireError(0, "Error", ex.Message, string.Empty, 0);
throw;
}

Dts.TaskResult = (int)ScriptResults.Success;
}
< /code>
Wir sehen uns vor, eine Ausnahme von fehlender DLL zu sehen, und durch ein glückliches Zufall fanden wir eine Problemumgehung von 1) [url=viewtopic.php?t=12045]Ändern[/url] Sie die Funktionen in Async und 2) die funktionale Logik in eine andere Funktion zum Aufrufen einwickeln In der main () 
. "Lang-none PrettyPrint-Override ">

Code: Select all

#pragma warning disable CS1998
public async System.Threading.Tasks.Task Main()
#pragma warning restore CS1998
{
try
{
this.ScriptAction().GetAwaiter().GetResult();
}
catch (Exception ex)
{
Dts.Events.FireError(0, "Error", ex.Message, string.Empty, 0);
throw;
}

Dts.TaskResult = (int)ScriptResults.Success;
}

#pragma warning disable CS1998
async System.Threading.Tasks.Task ScriptAction()
#pragma warning restore CS1998
{
RegionEndpoint region = RegionEndpoint.USEast1;
bool fireAgain = false;
Dts.Events.FireInformation(0, "Test", region.SystemName, string.Empty, 0, ref fireAgain);
}

< /code>
 Unsere Frage < /h5>

  Wir verstehen immer noch nicht, warum die obige Problemumgehung eine Ausnahme genau zurückgeben kann Fehlende DLL, z. B. [Datei nicht gefunden] Fehler: Eine erforderliche Montage fehlt: awssdk.core, Version = 3.3.0.0, Culture = neutral, PublicKeyToken = 885C28607f98e604 
Aber der gerade void main () kann nicht in der Lage sein. Wir müssen die Warnungen für den Compiler durch #Pragma Warnung deaktivieren CS1998 und soweit wir wissen, die SSIS -Skript -Aufgabe nicht unterstützt Async/wartet sehr gut, und wir haben keinen asynchronen Betrieb in der Logik. Gibt es also einen besseren Weg? Wenn ja, wie können Sie es verhindern?>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post