2015-12-15 19 views
7

Nelle versioni precedenti di ASP.NET (fino a ver 4.6), siamo in grado di caricare un * .dll che è stato costruito per un'altra versione .net modificando il web.config come segue:Come caricare un file .dll creato per un'altra versione .net in .Net 5?

<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true" > 
    </startup> 
</configuration> 

Ma in ASP. NET 5, non c'è web.config, ma un sistema di configurazione completamente diverso. Quindi, come possiamo ottenere lo stesso risultato con la nuova versione?

+0

Hi benvenuto a SO, si prega di fornire una sintesi della questione (non si protende un elenco di tecnologie) nel titolo. In genere le tecnologie dovrebbero essere elencate utilizzando i tag – Liam

risposta

1

Questo post del blog mostra come impostare questa politica in fase di esecuzione (rispetto a "design-time" - modificando web.config) http://reedcopsey.com/2011/09/15/setting-uselegacyv2runtimeactivationpolicy-at-runtime/ ma non l'ho provato con ASP.NET 5 da solo. Ha funzionato su versioni precedenti però.

In sostanza si crea questa classe di supporto statica

public static class RuntimePolicyHelper 
{ 
    public static bool LegacyV2RuntimeEnabledSuccessfully { get; private 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(); 
    } 
} 

Usage:

// before calling the code from your legacy assembly - 
if (RuntimePolicyHelper.LegacyV2RuntimeEnabledSuccessfully) 
{ 
    // your Legacy code 
} 
Problemi correlati