2016-05-07 6 views
0

Zugriff Ich habe folgende C# -Code innerhalb eines 2012 SSIS-Paket Script Task mit 4.5 Framework:Kann nicht statisch # Fehler Feld c

[Microsoft.sqlServer.Dts.Tasks.ScripTask.SSISScriptTaskEntryPointAttribute] 
Public partial class ScriptMain 
{ 
    static ScriptMain() 
    { 
      AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomai_AssemblyResolveForDLL); 
    } 

     Static System.Reflection.Assembly CurrentDomain_AssemblyResolveForDLL(object sender, ResolveEventArgs args) 
     { 
      If (args.Name.Contains("NameofMydll")) 
      { 
       string path = @"c:\Temp\"; 
       return System.Reflection.Assembly.LoadFile(System.IO.Path.Combine(path, "NameofMydll.dll")); 
      } 
     } 
     return null; 
    } 

Der Zweck dieses Codes ist eine DLL-Datei in einem SSIS Script verwendet zu laden Aufgabe während der Laufzeit. Die Art, wie der Code funktioniert, ist genau wie beschrieben here. Mit dem Pfad hart codiert, es funktioniert gut.

Das Problem, das ich habe, ist, dass ich den Wert des Pfads dynamisch festlegen muss, damit ich den Code von Server zu Server ohne fest codierte Werte heraufstufen kann. Da die Funktion statisch ist, wusste ich nicht, wie es geht.

Die Codezeile hier:

MyVariable = (string)Dts.Variables.["MyVariable"].value; 

... den Wert mit MyVariable als globalem öffentlichen String-Variable deklarierte erhält (dies oben in Ordnung, solange es nicht im Code funktioniert). Aber mit "MyVariable" anstelle der @"c:\Temp\" ist, wo ich den Cannot access non static field ... Fehler bekomme.

Wenn Sie die Deklaration in public static string ändern, kann sie kompiliert werden, aber zur Laufzeit wird ein Fehler ausgegeben.

Exception has been thrown by the target of invocation. 

Der Wert durch eine Funktion unmittelbar vor der Zeile des Codes zugewiesen ist nachfolgend genannt:

AppDomain.CurentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolveForDLL)

Der Aufruf der Funktion ist die erste Zeile des Codes in Main(), die Linie von Code oben ist der 2..

Alles, was ich tun muss, ist den Wert des Pfades von einer Variablen zuweisen. Jede Hilfe wird sehr geschätzt.

+0

wo Sie den Wert dieser statischen Pfadvariablen zuweisen kann? –

+0

@MinaJacob, siehe Update. –

+1

können Sie den Gültigkeitsbereich von der globalen öffentlichen Zeichenfolgenvariablen auf die statische Klassenvariable eingrenzen? Ich vermute, dass die statische Vars-Initialisierungsreihenfolge diesen Fehler verursacht –

Antwort

0

Wechsel zu MyVariable = (string)Dts.Variables.["MyVariable"].value;

oder Zugriff über seine Position MyVariable = (string)Dts.Variables.[0].value;

+0

Ich erwähnte dies in meiner Frage, es ist falsch zu sagen, es kann nicht darauf zugreifen. Es ist eine statische Funktion. –

+0

Der Beispielcode ist nicht gültig und muss gemäß meiner Antwort geändert werden. – BIDeveloper

+0

Ich verstehe jetzt, ja du bist richtig der Beispielcode ist falsch. Aber dein Code ist wie ich es eigentlich mein Projekt habe. Mein Beispiel ist jetzt aktualisiert. Danke für deinen Beitrag –

Verwandte Themen