2016-06-17 6 views
0

Ich habe eine Anwendung in Skripten hinzugefügt und einige Referenzen auf Assemblys mit der Version v2.0.50727 hinzugefügt. Während der Ausführung der Skriptdatei wird die Assembly im gemischten Modus für die Version 'v2.0.50727' der Laufzeit erstellt und kann nicht in die 4.0-Laufzeitumgebung geladen werden. Das Setting-Attribut useLegacyV2RuntimeActivationPolicy = "true" in app.config kann das Problem in ASP beheben .net Webanwendung. aber in Skripten funktioniert es nicht. Weitere Suche zeigt, dass über attribute useLegacyV2RuntimeActivationPolicy = "true" als scriptcs.exe.config hinzugefügt werden sollte. Ich habe eine Anwendungsdatei mit dem Namen FMUpgrade.csx und wie können wir diese scriptcs.exe.config in der FMUpgrade.csx-Datei referenzieren.scriptcs docs sagt nicht viel über scriptcs.exe.config.Also hinzugefügt program.exe.config mit app .config aber immer noch nicht erfolgreich.scriptcs Assembly-Fehler im gemischten Modus

Antwort

0

Nach viel Forschung bekam ich eine Umgehungslösung für das oben genannte Problem. Durch Verwendung der Klasse ExeConfigurationFileMap konnten wir die Schlüsselwerte von app.config abrufen, es ist nicht in der Lage, den unterstützten Laufzeitfehler zu umgehen, der durch einen Assembly-Fehler im gemischten Modus verursacht wurde. Server Server = neuer Server (neue ServerConnection (con)); server.ConnectionContext.ExecuteNonQuery (Skript); Der Fehler wird beim Ausführen der Anweisung ExecuteNonQuery verursacht. Also, bevor die Anweisung

if (RuntimePolicyHelper.LegacyV2RuntimeEnabledSuccessfully) server.ConnectionContext.ExecuteNonQuery (Skript) ausgeführt wird;

Lösung ist unter mit System.Runtime.CompilerServices; mithilfe von System.Runtime.InteropServices; öffentliche statische Klasse RuntimePolicyHelper { öffentliche statische bool LegacyV2RuntimeEnabledSuccessfullyly {get; privates Set; }

static RuntimePolicyHelper() 
    { 
     ICLRRuntimeInfo clrRuntimeInfo = 
     (ICLRRuntimeInfo)RuntimeEnvironment.GetRuntimeInterfaceAsObject(
     Guid.Empty, 
     typeof(ICLRRuntimeInfo).GUID); 
     try 
     { 
      clrRuntimeInfo.BindAsLegacyV2Runtime(); 
      LegacyV2RuntimeEnabledSuccessfully = true; 
     } 
     catch (COMException) 
     { 
      // This occurs with an HRESULT meaning 
      // "A different runtime was already bound to the legacy CLR version 2 activation policy." 
      LegacyV2RuntimeEnabledSuccessfully = false; 
     } 
    } 

    [ComImport] 
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
    [Guid("BD39D1D2-BA2F-486A-89B0-B4B0CB466891")] 
    private interface ICLRRuntimeInfo 
    { 
     void xGetVersionString(); 
     void xGetRuntimeDirectory(); 
     void xIsLoaded(); 
     void xIsLoadable(); 
     void xLoadErrorString(); 
     void xLoadLibrary(); 
     void xGetProcAddress(); 
     void xGetInterface(); 
     void xSetDefaultStartupFlags(); 
     void xGetDefaultStartupFlags(); 

     [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] 
     void BindAsLegacyV2Runtime(); 
    } 
} using System.Runtime.CompilerServices; 

mit System.Runtime.InteropServices; öffentliche statische Klasse RuntimePolicyHelper { öffentliche statische Bool LegacyV2RuntimeEnabledSuccessfully {get; privates Set; }

static RuntimePolicyHelper() 
    { 
     ICLRRuntimeInfo clrRuntimeInfo = 
     (ICLRRuntimeInfo)RuntimeEnvironment.GetRuntimeInterfaceAsObject(
     Guid.Empty, 
     typeof(ICLRRuntimeInfo).GUID); 
     try 
     { 
      clrRuntimeInfo.BindAsLegacyV2Runtime(); 
      LegacyV2RuntimeEnabledSuccessfully = true; 
     } 
     catch (COMException) 
     { 
      // This occurs with an HRESULT meaning 
      // "A different runtime was already bound to the legacy CLR version 2 activation policy." 
      LegacyV2RuntimeEnabledSuccessfully = false; 
     } 
    } 

    [ComImport] 
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
    [Guid("BD39D1D2-BA2F-486A-89B0-B4B0CB466891")] 
    private interface ICLRRuntimeInfo 
    { 
     void xGetVersionString(); 
     void xGetRuntimeDirectory(); 
     void xIsLoaded(); 
     void xIsLoadable(); 
     void xLoadErrorString(); 
     void xLoadLibrary(); 
     void xGetProcAddress(); 
     void xGetInterface(); 
     void xSetDefaultStartupFlags(); 
     void xGetDefaultStartupFlags(); 

     [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] 
     void BindAsLegacyV2Runtime(); 
    } 
} 
Verwandte Themen