Karışık mod montajı, çalışma zamanının 'v2.0.50727 ′ sürümüne göre üretilmiştir


163

Aşağıdaki istisnayı alıyorum:

Karma mod montajı, çalışma zamanının 'v2.0.50727 ′ sürümüne göre oluşturulmuştur ve ek yapılandırma bilgileri olmadan 4.0 çalışma zamanına yüklenemez.

WPF programımdan kristal raporu ihraç etmeye çalışırken ...

Zaten app.config içinde aşağıdaki ekledim ...

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

Herhangi bir uzman yardımcı olabilir ????

Referans buldum: http://www.davidmoore.info/2010/12/17/running-net-2-runtime-applications-under-the-net-4-runtime


1
ÖNEMLİ: Hata, "Dosya" hata sütununda olursa SGEN, düzeltmenin sgen.exe.configyanındaki bir dosyada olması gerekir sgen.exe. Örneğin, VS 2015 için oluşturun C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\sgen.exe.config. Kaynak: SGEN Karışık mod montajı Minimum dosya içeriği:<configuration><startup useLegacyV2RuntimeActivationPolicy="true"/></configuration>
ToolmakerSteve

1
Yalnızca "C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6 Tools \" olabileceğinizi, bununla birlikte sgen içeren bir 'x64' dizininiz olabileceğini unutmayın. exe ve muhtemelen VS'nin kaç ve hangi sürümlerini yüklediğinize bağlı olarak, farklı yollardaki diğer sgen kopyaları / sürümleri.
MickeyfAgain_BeforeExitOfSO

@ToolmakerSteve Lütfen yorumunuzu cevap olarak gönderin, böylece oyunuzu yükseltebilirim; diğer cevapların hiçbiri bana yardımcı olmadı.
Malcolm

Yanıtlar:


238

Bu başlangıç ​​etiketini yapılandırma düğümü altında app.config dosyanızda kullanmayı deneyin.

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

2
Aslında Zorlu satırları Uygulamanıza eklemelisiniz. ** exe **. Config.
AntonK

24
Bu app.config. Derleyici derleme üzerine yeniden adlandırır.
Jeff

65
Gereken tek bölüm useLegacyV2RuntimeActivationPolicy = "true". Mevcut çerçeve sürümünüzü bırakabilirsiniz.
Ben Gripka

3
Ben derken iki katına çıkabiliyorum, ek zorunlu çalışma zamanını bıraktım ve sorunum gitti.
Mike Malter

1
Bu bağlantı ayrıca sorunun ne olduğunu ve çözümün sizin için ne yaptığını anlamanıza yardımcı olmalıdır: msdn.microsoft.com/en-us/magazine/ee819091.aspx
Mouhammed Soueidane

85

İstisna, .NET 4.0'da bulunan bazı .NET 2.0.50727 bileşenlerini açıkça tanımlar. App.config dosyasında şunu kullanın:

<startup useLegacyV2RuntimeActivationPolicy="true" /> 

Sorunumu çözdü


Bu bir kapanış eğik <startup useLegacyV2RuntimeActivationPolicy="true" />
çizgisine

8

Lütfen uygulamalar app.config dosyanıza useLegacyV2RuntimeActivationPolicy = "true" niteliğini ekleyin.

Eski Değer

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

Yeni değer

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

Sorununuzu çözecektir.


Senin için işe yaradığını bilmek güzel. Yorumun için teşekkürler !
Brijesh Kumar Tripathi

4

Aslında ters çözüm ile aynı sorunu yaşadım . Bir .NET projesini .NET 4.0'a yükselttim ve sonra .NET 3.5'e geri döndüm. Projemdeki app.config, söz konusu yukarıdaki hataya neden olan aşağıdakileri almaya devam etti:

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

Bunun için hatayı çözmenin çözümü, aşağıdaki gibi uygun 2.0 referansına geri döndürmekti:

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

Bu nedenle, bir yükseltme işlemi yukarıdaki hatayı oluşturuyorsa, .NET Framework tarafından desteklenen sürümü yedeklemeniz gerekebilir.


1

Benim için MSTest(VS2015) altında ünite testleri yapılırken bu atıldı . Eklemek zorunda kaldı

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

içinde

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

Karışık Mod Montajı MSTest VS2015'te Başarısız


1

Eski uygulamayı app.config'den etkinleştirmek benim için işe yaramadı. Bilinmeyen nedenlerden dolayı, uygulamam V2 çalışma zamanı ilkesini etkinleştirmiyordu. Burada bir iş buldum .

Eski uygulamayı app.config'den etkinleştirmek önerilen bir yaklaşımdır, ancak bazı durumlarda beklendiği gibi çalışmaz. Eski V2 ilkesini zorlamak için ana uygulamanızda aşağıdaki kodu kullanın:

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

Başka bir yapılandırma dosyası (projenizdeki dosyayı değil) ve RESTART Visual Studio'yu kullanmaya çalışın:

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

veya

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

.configBir uygulamada bulunan ve genellikle ek uygulama yapılandırmaları için gerekli olan yerel olanı atlatmak iyi bir çözüm olmayacağı için bunu genişleteceğim .
atconway

3
Birim sınamalarında, vstest.executionengine.x86.exe.config dosyasında yapılandırma değişikliğinin olması gerekir, çünkü bu yürütülebilir dosya sınadığınız kodun üst işlemidir. Bu sorun Visual Studio 2012 SP4'te giderildi, ancak makinemde hala mevcut.
Brandon S

(Değişikliklerin etkili olması için Visual Studio'yu yeniden başlatmanız gerekmediğini unutmayın. Yalnızca en son. * İşlemlerinde görevi sonlandırmanız gerekir, çünkü bunlar birim testleri tamamlandıktan sonra bile takılır.)
Brandon S

Bunu değiştirerek beni değiştirmek zorunda olduğum gerçek yere götürdüm.
Janis S.21

1

Hata SGEN olarak "Dosya" hata sütununda olursa, düzeltmenin sgen.exe.configyanındaki bir dosyada olması gerekir sgen.exe. Örneğin, VS 2015 için oluşturun C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\sgen.exe.config. Minimum dosya içeriği:<configuration><startup useLegacyV2RuntimeActivationPolicy="true"/></configuration>

Kaynak: SGEN Karışık mod montajı

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.