Die Assembly im gemischten Modus basiert auf der Version 'v2.0.50727' der Laufzeit

165

Ich erhalte die folgende Ausnahme:

Die Assembly im gemischten Modus basiert auf der Version 'v2.0.50727' der Laufzeit und kann ohne zusätzliche Konfigurationsinformationen nicht in die 4.0-Laufzeit geladen werden.

als ich versuchte, einen Kristallbericht aus meinem WPF-Programm zu exportieren ...

Folgendes habe ich in der app.config bereits hinzugefügt ...

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

Jeder Experte kann helfen ????

Referenz Ich fand: http://www.davidmoore.info/2010/12/17/running-net-2-runtime-applications-under-the-net-4-runtime

Christina Wong
quelle
1
WICHTIG: Wenn der Fehler mit der Fehlerspalte "Datei" als SGENauftritt, muss sich das Update in einer Datei sgen.exe.configneben befinden sgen.exe. Erstellen Sie beispielsweise für VS 2015 C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\sgen.exe.config. Quelle: SGEN Assembly im gemischten Modus Mindestinhalt der Datei:<configuration><startup useLegacyV2RuntimeActivationPolicy="true"/></configuration>
ToolmakerSteve
1
Beachten Sie, dass Sie möglicherweise nicht nur "C: \ Programme (x86) \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6 Tools \" haben, sondern auch ein "x64" -Verzeichnis, das auch ein sgen enthält. exe und möglicherweise mehrere andere Kopien / Versionen von sgen in unterschiedlichen Pfaden, je nachdem, wie viele und welche Versionen von VS Sie installiert haben.
MickeyfAgain_BeforeExitOfSO
@ToolmakerSteve Bitte poste deinen Kommentar als Antwort, damit ich ihn positiv bewerten kann. Keine der anderen Antworten hat mir geholfen.
Malcolm
@Malcolm - OK, als Antwort gepostet
ToolmakerSteve

Antworten:

240

Versuchen Sie, genau dieses Start-Tag in Ihrer app.config unter dem Konfigurationsknoten zu verwenden

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    <requiredRuntime version="v4.0.20506" />
  </startup>
Talha
quelle
2
Eigentlich sollten Sie die kniffligen Zeilen zu YourApp. ** exe **. Config hinzufügen.
AntonK
25
Das ist app.config. Der Compiler benennt es beim Erstellen um.
Jeff
66
Der einzige Teil, der erforderlich ist, ist useLegacyV2RuntimeActivationPolicy = "true". Sie können Ihre aktuelle Framework-Version verlassen.
Ben Gripka
3
Ich kann mich verdoppeln, wenn Ben sagt, ich habe die zusätzlich erforderliche Laufzeit weggelassen und mein Problem ist verschwunden.
Mike Malter
1
Dieser Link soll Ihnen auch helfen zu verstehen, was das Problem ist und was die Lösung für Sie tut: msdn.microsoft.com/en-us/magazine/ee819091.aspx
Mouhammed Soueidane
86

Die Ausnahme identifiziert eindeutig, dass eine .NET 2.0.50727-Komponente in .NET 4.0 enthalten war. Verwenden Sie in der Datei App.config Folgendes:

<startup useLegacyV2RuntimeActivationPolicy="true" /> 

Es hat mein Problem gelöst

Bibaswann Bandyopadhyay
quelle
Dies braucht einen abschließenden Schrägstrich<startup useLegacyV2RuntimeActivationPolicy="true" />
Jonn
8

Bitte fügen Sie das Attribut useLegacyV2RuntimeActivationPolicy = "true" in die Anwendungsdatei app.config ein.

Alter Wert

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

Neuer Wert

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

Es wird Ihr Problem lösen.

Brijesh Kumar Tripathi
quelle
Schön zu wissen, dass es bei Ihnen funktioniert hat. Vielen Dank für Ihren Kommentar !
Brijesh Kumar Tripathi
4

Ich hatte tatsächlich dieses identische Problem mit der inversen Lösung. Ich hatte ein .NET-Projekt auf .NET 4.0 aktualisiert und dann wieder auf .NET 3.5 zurückgesetzt. Die app.config in meinem Projekt hatte weiterhin Folgendes, was den oben genannten Fehler verursachte:

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

Die Lösung zur Behebung des Fehlers bestand darin, ihn wie folgt auf die richtige 2.0-Referenz zurückzusetzen:

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

Wenn bei einem Downgrade der oben genannte Fehler auftritt, müssen Sie möglicherweise die von .NET Framework unterstützte Version sichern.

atconway
quelle
2

Wenn der Fehler mit der Fehlerspalte "Datei" als SGEN auftritt, muss sich das Update in einer Datei sgen.exe.configneben befinden sgen.exe. Erstellen Sie beispielsweise für VS 2015 C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\sgen.exe.config. Minimaler Dateiinhalt:<configuration><startup useLegacyV2RuntimeActivationPolicy="true"/></configuration>

Quelle: SGEN Mixed-Mode-Baugruppe

ToolmakerSteve
quelle
1

Für mich wurde dies beim Ausführen von Unit-Tests unter MSTest(VS2015) geworfen . Musste hinzufügen

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

im

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

Mixed-Mode-Assembly MSTest schlägt in VS2015 fehl

Janis S.
quelle
1

Das Aktivieren des Legacy von app.config hat bei mir nicht funktioniert. Aus unbekannten Gründen hat meine Anwendung die V2-Laufzeitrichtlinie nicht aktiviert. Ich habe hier eine Arbeit gefunden .

Das Aktivieren des Legacy von app.config wird empfohlen, funktioniert jedoch in einigen Fällen nicht wie erwartet. Verwenden Sie den folgenden Code in Ihrer Hauptanwendung, um die Legacy V2-Richtlinie zu erzwingen:

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
quelle
1

Versuchen Sie, eine andere Konfigurationsdatei (nicht die aus Ihrem Projekt) und RESTART Visual Studio zu verwenden:

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

oder

C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.executionengine.exe.config
(64-bit)
Alexander Tytarchuk
quelle
Ich würde darauf näher eingehen, da .configes keine gute Lösung wäre, das native System zu umgehen , das sich in einer Anwendung befindet und normalerweise für zusätzliche Anwendungskonfigurationen benötigt wird.
Atconway
3
Bei Komponententests muss die Konfigurationsänderung in der Datei vstest.executionengine.x86.exe.config erfolgen, da diese ausführbare Datei der übergeordnete Prozess des zu testenden Codes ist. Dieses Problem wurde angeblich in Visual Studio 2012 SP4 behoben, ist aber auf meinem Computer immer noch vorhanden.
Brandon S
(Beachten Sie, dass Sie Visual Studio nicht neu starten müssen, damit die Änderungen wirksam werden. Sie müssen lediglich die Aufgabe auf dem vstest beenden. * Prozesse, da diese auch nach Abschluss Ihrer Komponententests hängen bleiben.)
Brandon S
Dies zu verbessern, da es mich zu dem tatsächlichen Ort führte, an dem ich dies ändern musste.
Janis S.