Lắp ráp chế độ hỗn hợp được xây dựng dựa trên phiên bản 'v2.0.50727 của thời gian chạy


163

Tôi đang nhận được ngoại lệ sau:

Việc lắp ráp chế độ hỗn hợp được xây dựng dựa trên phiên bản 'v2.0.50727 của thời gian chạy và không thể được tải trong thời gian chạy 4.0 mà không có thông tin cấu hình bổ sung.

khi tôi đang cố gắng xuất báo cáo tinh thể từ chương trình WPF của mình ...

Tôi đã thêm phần sau vào app.config rồi ...

<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
<runtime>
  <NetFx40_LegacySecurityPolicy enabled="true"/>
</runtime>

Bất kỳ chuyên gia có thể giúp đỡ ????

Tài liệu tham khảo tôi thấy: http://www.davidmoore.info/2010/12/17/running-net-2-runtime-applications-under-the-net-4-runtime


1
QUAN TRỌNG: Nếu lỗi xảy ra với cột lỗi "Tệp" SGEN, thì sửa lỗi cần phải nằm trong một tệp sgen.exe.config, bên cạnh sgen.exe. Ví dụ, đối với VS 2015, hãy tạo C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\sgen.exe.config. Nguồn: sgen chế độ hỗn hợp lắp ráp nội dung tập tin tối thiểu:<configuration><startup useLegacyV2RuntimeActivationPolicy="true"/></configuration>
ToolmakerSteve

1
Xin lưu ý rằng bạn không chỉ có "C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6 Tools \", mà dưới đó, thư mục 'x64' cũng có sgen. exe, và có thể một số bản sao / phiên bản khác của sgen tất cả trong các đường dẫn khác nhau, tùy thuộc vào số lượng và phiên bản VS bạn đã cài đặt.
MickeyfAgain_B BeforeExitOfSO

@ToolmakerSteve Vui lòng gửi bình luận của bạn dưới dạng câu trả lời để tôi có thể nâng cấp nó; không có câu trả lời nào khác giúp tôi
Malcolm

Câu trả lời:


238

Hãy thử sử dụng thẻ khởi động chính xác này trong app.config dưới nút cấu hình

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    <requiredRuntime version="v4.0.20506" />
  </startup>

2
Trên thực tế, bạn nên thêm các dòng khó khăn vào YourApp. ** exe **. Config.
AntonK

24
Đó là app.config. Trình biên dịch sẽ đổi tên nó khi xây dựng.
Jeff

65
Phần duy nhất được yêu cầu là useLegacyV2R nbActivationPolicy = "true". Bạn có thể để phiên bản khung hiện tại của bạn.
Ben Gripka

3
Tôi có thể tăng gấp đôi khi Ben nói, tôi đã bỏ qua các yêu cầu bổ sung và vấn đề của tôi đã biến mất.
Mike Malter

1
Liên kết này cũng sẽ giúp bạn hiểu vấn đề là gì và giải pháp đang làm gì cho bạn: msdn.microsoft.com/en-us/magazine/ee819091.aspx
Mouhammed Soueidane

85

Ngoại lệ xác định rõ ràng một số thành phần .NET 2.0.50727 được bao gồm trong .NET 4.0. Trong tệp App.config, hãy sử dụng tệp này:

<startup useLegacyV2RuntimeActivationPolicy="true" /> 

Nó đã giải quyết vấn đề của tôi


Điều này cần một dấu gạch chéo kết thúc<startup useLegacyV2RuntimeActivationPolicy="true" />
Jonn

8

Vui lòng thêm thuộc tính useLegacyV2R.78ActivationPolicy = "true" trong tệp app.config ứng dụng của bạn.

Giá trị cũ

  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1"/>
  </startup>

Giá trị mới

  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1"/>
  </startup>

Nó sẽ giải quyết vấn đề của bạn.


Rất vui khi biết rằng nó đã làm việc cho bạn. Cám ơn bạn đã góp ý !
Brijesh Kumar Tripathi

4

Tôi thực sự đã có vấn đề giống hệt với giải pháp nghịch đảo . Tôi đã nâng cấp một dự án .NET lên .NET 4.0 và sau đó trở lại .NET 3.5. App.config trong dự án của tôi tiếp tục có lỗi sau gây ra lỗi trên:

<startup>
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>

Giải pháp để khắc phục lỗi này là hoàn nguyên nó về tham chiếu 2.0 thích hợp như sau:

<startup>
  <supportedRuntime version="v2.0.50727"/>
</startup>

Vì vậy, nếu hạ cấp đang tạo ra lỗi trên, bạn có thể cần sao lưu phiên bản được hỗ trợ .NET Framework.



1

Việc kích hoạt di sản từ app.config không hiệu quả với tôi. Vì lý do không rõ, ứng dụng của tôi không kích hoạt chính sách thời gian chạy V2. Tôi tìm thấy một công việc xung quanh đây .

Kích hoạt di sản từ app.config là một cách tiếp cận được đề xuất nhưng trong một số trường hợp, nó không hoạt động như mong đợi. Sử dụng mã sau với trong ứng dụng chính của bạn để buộc chính sách Legacy V2:

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

1

Hãy thử sử dụng tệp cấu hình khác (không phải tệp từ dự án của bạn) và RESTART Visual Studio:

C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.executionengine.x86.exe.config
(32-bit)

hoặc là

C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.executionengine.exe.config
(64-bit)

Tôi sẽ mở rộng về điều này, bởi vì phá vỡ bản gốc .confignằm trong một ứng dụng và thường cần cho các cấu hình ứng dụng bổ sung sẽ không phải là một giải pháp tốt.
atconway

3
Đối với các thử nghiệm đơn vị, thay đổi cấu hình phải xảy ra trong tệp vstest.executengine.x86.exe.config vì tệp thực thi đó là quy trình chính của mã bạn đang kiểm tra. Sự cố này được cho là đã được khắc phục trong Visual Studio 2012 SP4, nhưng nó vẫn còn hiện diện trên máy của tôi.
Brandon S

(Lưu ý: Bạn không cần phải khởi động lại Visual Studio để những thay đổi có hiệu lực Bạn chỉ nên cần phải nhiệm vụ kết thúc vào vstest * quá trình bởi vì những treo xung quanh ngay cả sau khi đơn vị của bạn kiểm tra hoàn tất...)
Brandon S

Tăng cường điều này khi nó dẫn tôi đến nơi thực sự mà tôi phải thay đổi điều này.
Janis S.

1

Nếu lỗi xảy ra với cột lỗi "Tệp" là SGEN, thì sửa lỗi cần phải nằm trong một tệp sgen.exe.config, bên cạnh sgen.exe. Ví dụ, đối với VS 2015, hãy tạo C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\sgen.exe.config. Nội dung tệp tối thiểu:<configuration><startup useLegacyV2RuntimeActivationPolicy="true"/></configuration>

Nguồn: SGEN Chế độ hỗn hợp

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.