170 votes

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

J'obtiens l'exception suivante :

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

alors que j'essayais d'exporter un rapport cristal depuis 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>

Tout expert peut 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

2 votes

IMPORTANT : Si l'erreur se produit avec la colonne d'erreur "Fichier" comme SGEN alors le correctif doit être 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 : SGEN Assemblage en mode mixte Contenu minimal du fichier : <configuration><startup useLegacyV2RuntimeActivationPolicy="true"/></configuration>

1 votes

Sachez que vous pouvez non seulement avoir " C:\Program Fichiers (x86) \Microsoft SDKs \Windows\v10.0A\bin\NETFX 4.6 Tools\", mais sous ce répertoire, un répertoire 'x64' qui contient également un sgen.exe, et peut-être plusieurs autres copies/versions de sgen, toutes dans des chemins différents, selon le nombre et les versions de VS que vous avez installés.

0 votes

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

2voto

Talha Imam Points 821

L'activation de l'héritage depuis app.config n'a pas fonctionné pour moi. Pour des raisons inconnues, mon application n'activait pas la politique d'exécution de la V2. J'ai trouvé un moyen de contourner le problème aquí .

Activer l'héritage à partir d'app.config est une approche recommandée mais dans certains cas, cela ne fonctionne pas comme prévu. Utilisez le code suivant dans votre application principale pour forcer la politique 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();
}
}

1voto

Essayez d'utiliser un autre fichier de configuration (pas celui de votre projet) et redémarrez 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)

0 votes

Je voudrais m'étendre sur ce sujet, parce que contourner le natif .config qui réside dans une application et qui est généralement nécessaire pour des configurations d'applications supplémentaires ne serait pas une bonne solution.

3 votes

Pour les tests unitaires, le changement de configuration doit se faire dans le fichier vstest.executionengine.x86.exe.config car cet exécutable est le processus parent du code que vous testez. Ce problème a été soi-disant corrigé dans Visual Studio 2012 SP4, mais il est toujours présent sur ma machine.

0 votes

(Notez que vous ne devriez pas avoir à redémarrer Visual Studio pour que les changements prennent effet. Vous devriez juste avoir besoin de mettre fin à la tâche sur les processus vstest.* parce que ceux-ci restent en place même après que vos tests unitaires soient terminés).

1voto

Janis S. Points 1489

Pour moi, cela s'est produit lors de l'exécution de tests unitaires sous le nom de MSTest (VS2015). J'ai dû ajouter

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

en

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

Le test MST de l'assemblage en mode mixte échoue dans VS2015

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X