Perakitan mode campuran dibuat berdasarkan versi 'v2.0.50727 ′ dari runtime

163

Saya mendapatkan pengecualian berikut:

Rakitan mode campuran dibuat berdasarkan versi 'v2.0.50727 ′ dari runtime dan tidak dapat dimuat dalam runtime 4.0 tanpa informasi konfigurasi tambahan.

ketika saya mencoba untuk mengekspor laporan kristal dari program WPF saya ...

Saya telah menambahkan yang berikut ini di app.config sudah ...

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

Adakah pakar yang bisa membantu ????

Referensi yang saya temukan: http://www.davidmoore.info/2010/12/17/running-net-2-runtime-applications-under-the-net-4-runtime

Christina Wong
sumber
1
PENTING: Jika kesalahan terjadi dengan kolom kesalahan "File" sebagai SGEN, maka perbaikan harus dalam file sgen.exe.config, di sebelah sgen.exe. Misalnya, untuk VS 2015, buat C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\sgen.exe.config. Sumber: Rakitan mode campuran<configuration><startup useLegacyV2RuntimeActivationPolicy="true"/></configuration>
SGEN
1
Ketahuilah bahwa Anda tidak hanya memiliki "C: \ Program Files (x86) \ Microsoft SDKs Windows \ v10.0A \ bin \ NETFX 4.6 Tools \", tetapi di bawahnya, direktori 'x64' yang juga memiliki sgen. exe, dan mungkin beberapa salinan / versi sgen lainnya di jalur yang berbeda, tergantung pada berapa banyak dan versi VS yang telah Anda instal.
MickeyfAgain_BeforeExitOfSO
@ToolmakerSteve Silakan kirim komentar Anda sebagai jawaban agar saya dapat meningkatkannya; tidak ada jawaban lain yang membantu saya.
Malcolm
@ Malcolm - OK, diposting sebagai jawaban
ToolmakerSteve

Jawaban:

238

Cobalah untuk menggunakan tag startup yang tepat ini di app.config Anda di bawah node konfigurasi

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    <requiredRuntime version="v4.0.20506" />
  </startup>
Talha
sumber
2
Sebenarnya Anda harus menambahkan garis rumit ke YourApp. ** exe **. Config.
AntonK
24
Itu adalah app.config. Compiler akan mengganti nama saat dibuat.
Jeff
65
Satu-satunya bagian yang diperlukan adalah useLegacyV2RuntimeActivationPolicy = "true". Anda dapat meninggalkan versi kerangka kerja Anda saat ini.
Ben Gripka
3
Aku bisa berlipat ganda ketika Ben berkata, aku meninggalkan tambahan waktu yang dibutuhkan dan runtuh masalahku.
Mike Malter
1
Tautan ini juga akan membantu Anda memahami apa masalahnya, dan apa solusi yang dilakukan untuk Anda: msdn.microsoft.com/en-us/magazine/ee819091.aspx
Mouhammed Soueidane
85

Pengecualian dengan jelas mengidentifikasi beberapa komponen .NET 2.0.50727 termasuk dalam .NET 4.0. Dalam file App.config gunakan ini:

<startup useLegacyV2RuntimeActivationPolicy="true" /> 

Itu memecahkan masalah saya

Bibaswann Bandyopadhyay
sumber
Ini membutuhkan tebasan penutup<startup useLegacyV2RuntimeActivationPolicy="true" />
Jonn
8

Silakan tambahkan atribut useLegacyV2RuntimeActivationPolicy = "true" di file app.config aplikasi Anda.

Nilai lama

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

Nilai baru

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

Itu akan menyelesaikan masalah Anda.

Brijesh Kumar Tripathi
sumber
Senang mengetahui bahwa itu bekerja untuk Anda. Terima kasih atas komentar Anda !
Brijesh Kumar Tripathi
4

Saya sebenarnya memiliki masalah identik ini dengan solusi terbalik . Saya telah memutakhirkan proyek .NET ke .NET 4.0 dan kemudian kembali ke .NET 3.5. App.config dalam proyek saya terus memiliki yang berikut ini yang menyebabkan kesalahan di atas dalam pertanyaan:

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

Solusi untuk mengatasi kesalahan untuk ini adalah mengembalikannya ke referensi 2.0 yang tepat sebagai berikut:

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

Jadi, jika penurunan versi menghasilkan kesalahan di atas, Anda mungkin perlu mencadangkan versi yang didukung .NET Framework.

atconway
sumber
1

Bagi saya ini terlempar saat menjalankan tes unit di bawah MSTest(VS2015). Harus menambahkan

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

di

C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\TE.ProcessHost.Managed.exe.config

Perakitan Mode Campuran MSTest Gagal di VS2015

Janis S.
sumber
1

Mengaktifkan warisan dari app.config tidak berfungsi untuk saya. Untuk alasan yang tidak diketahui, aplikasi saya tidak mengaktifkan kebijakan runtime V2. Saya menemukan pekerjaan di sekitar sini .

Mengaktifkan warisan dari app.config adalah pendekatan yang disarankan tetapi dalam beberapa kasus itu tidak berfungsi seperti yang diharapkan. Gunakan kode berikut dengan di aplikasi utama Anda untuk memaksa kebijakan 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();
}
}
Talha Imam
sumber
1

Coba gunakan file konfigurasi lain (bukan yang berasal dari proyek Anda) dan RESTART Visual Studio:

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

atau

C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.executionengine.exe.config
(64-bit)
Alexander Tytarchuk
sumber
Saya akan memperluas ini, karena menghindari yang asli .configyang berada dalam aplikasi dan biasanya diperlukan untuk konfigurasi aplikasi tambahan tidak akan menjadi solusi yang baik.
atconway
3
Untuk pengujian unit, perubahan konfigurasi harus terjadi dalam file vstest.executionengine.x86.exe.config karena executable itu adalah proses induk dari kode yang Anda uji. Masalah ini seharusnya diperbaiki di Visual Studio 2012 SP4, tetapi masih ada di komputer saya.
Brandon S
(Perhatikan bahwa Anda tidak perlu me-restart Visual Studio agar perubahan diterapkan. Anda hanya perlu mengakhiri tugas pada vstest. * Proses karena hal-hal tersebut bertahan bahkan setelah pengujian unit Anda selesai.)
Brandon S
Mengunggulkan ini karena itu menuntun saya ke tempat yang sebenarnya di mana saya harus mengubah ini.
Janis S.
1

Jika kesalahan terjadi dengan kolom kesalahan "File" sebagai SGEN, maka perbaikan harus dalam file sgen.exe.config, di sebelah sgen.exe. Misalnya, untuk VS 2015, buat C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\sgen.exe.config. Isi file minimum:<configuration><startup useLegacyV2RuntimeActivationPolicy="true"/></configuration>

Sumber: Rakitan mode campuran SGEN

ToolmakerSteve
sumber