L'assemblage en mode mixte est construit avec la version 'v2.0.50727' du runtime


163

J'obtiens l'exception suivante:

L'assembly en mode mixte est construit avec la version 'v2.0.50727' du runtime et ne peut pas être chargé dans le runtime 4.0 sans informations de configuration supplémentaires.

alors que j'essayais d'exporter le rapport Crystal de mon programme WPF ...

J'ai déjà ajouté ce qui suit dans l'app.config ...

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

Tous les experts peuvent vous aider ????

Référence que j'ai trouvée: http://www.davidmoore.info/2010/12/17/running-net-2-runtime-applications-under-the-net-4-runtime


1
IMPORTANT: si l'erreur se produit avec la colonne d'erreur "Fichier" comme SGEN, le correctif doit se trouver dans un fichier sgen.exe.config, à côté de sgen.exe. Par exemple, pour VS 2015, créez C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\sgen.exe.config. Source: Assemblage en mode mixte SGEN Contenu minimum du fichier:<configuration><startup useLegacyV2RuntimeActivationPolicy="true"/></configuration>
ToolmakerSteve

1
Sachez que vous pouvez non seulement avoir "C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6 Tools \", mais en dessous, un répertoire 'x64' qui a également un sgen. exe, et éventuellement plusieurs autres copies / versions de sgen, toutes dans des chemins différents, en fonction du nombre et des versions de VS que vous avez installées.
MickeyfAgain_BeforeExitOfSO

@ToolmakerSteve Veuillez poster votre commentaire en tant que réponse afin que je puisse le voter; aucune des autres réponses ne m'a aidé.
Malcolm

Réponses:


238

Essayez d'utiliser cette balise de démarrage exacte dans votre app.config sous le nœud de configuration

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

2
En fait, vous devriez ajouter les lignes délicates à YourApp. ** exe **. Config.
AntonK

24
C'est app.config. Le compilateur le renommera lors de la construction.
Jeff

65
La seule partie requise est useLegacyV2RuntimeActivationPolicy = "true". Vous pouvez laisser votre version actuelle du framework.
Ben Gripka

3
Je peux doubler quand Ben dit, j'ai omis le temps d'exécution supplémentaire requis et mon problème a disparu.
Mike Malter le

1
Ce lien devrait également vous aider à comprendre quel est le problème et ce que la solution fait pour vous: msdn.microsoft.com/en-us/magazine/ee819091.aspx
Mouhammed Soueidane

85

L'exception identifie clairement certains composants .NET 2.0.50727 inclus dans .NET 4.0. Dans le fichier App.config, utilisez ceci:

<startup useLegacyV2RuntimeActivationPolicy="true" /> 

Cela a résolu mon problème


Cela nécessite une barre oblique de fermeture<startup useLegacyV2RuntimeActivationPolicy="true" />
Jonn

8

Veuillez ajouter l'attribut useLegacyV2RuntimeActivationPolicy = "true" dans le fichier app.config de vos applications.

Ancienne valeur

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

Nouvelle valeur

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

Cela résoudra votre problème.


Ravi de savoir que cela a fonctionné pour vous. Merci pour votre commentaire !
Brijesh Kumar Tripathi

4

J'ai en fait eu ce problème identique avec la solution inverse . J'avais mis à niveau un projet .NET vers .NET 4.0, puis je suis revenu à .NET 3.5. L'app.config dans mon projet a continué à avoir les éléments suivants, ce qui causait l'erreur ci-dessus en question:

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

La solution pour résoudre l'erreur était de la rétablir à la bonne référence 2.0 comme suit:

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

Par conséquent, si une mise à niveau inférieure génère l'erreur ci-dessus, vous devrez peut-être sauvegarder la version prise en charge par .NET Framework.


1

Pour moi, cela a été lancé lors de l'exécution de tests unitaires sous MSTest(VS2015). Dû ajouter

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

dans

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

Échec du test MST d'assemblage en mode mixte dans VS2015


1

L'activation de l'héritage de app.config n'a pas fonctionné pour moi. Pour des raisons inconnues, mon application n'activait pas la politique d'exécution V2. J'ai trouvé un travail ici .

L'activation de l'héritage depuis app.config est une approche recommandée, mais dans certains cas, cela ne fonctionne pas comme prévu. Utilisez le code suivant avec dans votre application principale pour forcer la stratégie 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

Essayez d'utiliser un autre fichier de configuration (pas celui de votre projet) et RESTART Visual Studio:

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

ou

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

Je voudrais développer cela, car contourner le natif .configqui réside dans une application et généralement nécessaire pour des configurations d'application supplémentaires ne serait pas une bonne solution.
atconway

3
Pour les tests unitaires, le changement de configuration doit se produire dans le fichier vstest.executionengine.x86.exe.config car cet exécutable est le processus parent du code que vous testez. Ce problème aurait été résolu dans Visual Studio 2012 SP4, mais il est toujours présent sur ma machine.
Brandon S

(Notez que vous ne devriez pas avoir à redémarrer Visual Studio pour que les modifications prennent effet. Vous devriez juste avoir besoin de terminer la tâche sur les processus vstest. * Car ceux-ci traînent même après la fin de vos tests unitaires.)
Brandon S

Faire une mise à jour car cela m'a conduit à l'endroit où j'ai dû changer cela.
Janis S.

1

Si l'erreur se produit avec la colonne d'erreur "Fichier" comme SGEN, le correctif doit se trouver dans un fichier sgen.exe.config, à côté de sgen.exe. Par exemple, pour VS 2015, créez C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\sgen.exe.config. Contenu minimum du fichier:<configuration><startup useLegacyV2RuntimeActivationPolicy="true"/></configuration>

Source: assemblage en mode mixte SGEN

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.