2015-12-15 16 views
7

Trong các phiên bản trước của ASP.NET (đến ver 4.6), chúng ta có thể tải một * .dll đó là xây dựng cho một phiên bản .net bằng cách sửa đổi web.config như sau:Cách tải tệp .dll đã được tạo cho phiên bản .net khác trong .Net 5?

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

Nhưng trong ASP. NET 5, không có web.config, nhưng một hệ thống cấu hình hoàn toàn khác. Vậy làm thế nào chúng ta có thể có được kết quả tương tự với phiên bản mới?

+0

Hi hoan nghênh SO, vui lòng cung cấp một bản tóm tắt của câu hỏi (không nhô một danh sách các công nghệ) trong tiêu đề của bạn. Thông thường các công nghệ sẽ được liệt kê bằng cách sử dụng thẻ – Liam

Trả lời

1

Bài đăng trên blog này cho biết cách đặt chính sách này khi chạy (so với "thời gian thiết kế" - bằng cách chỉnh sửa web.config) http://reedcopsey.com/2011/09/15/setting-uselegacyv2runtimeactivationpolicy-at-runtime/ nhưng tôi không dùng thử với ASP.NET 5. Làm việc trên các phiên bản trước đó mặc dù.

Về cơ bản bạn tạo lớp helper tĩnh này

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(); 
    } 
} 

Cách sử dụng:

// before calling the code from your legacy assembly - 
if (RuntimePolicyHelper.LegacyV2RuntimeEnabledSuccessfully) 
{ 
    // your Legacy code 
} 
Các vấn đề liên quan