Assemblage en mode mixte dans.NET 4




.net-4.0 mixed-mode (4)

Comme votre assembly est en mode mixte, il peut potentiellement appeler du code managé à partir du code machine non géré dans l'assembly. Avec le nouveau support de version CLR côte à côte en cours de traitement dans .NET 4.0, le moteur d'exécution ne sait pas quelle version du CLR doit être fournie lorsque cela se produit. Vous devez le dire avec un fichier app.exe.config qui devrait ressembler à ceci:

<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>

J'ai écrit une bibliothèque de classes dans .NET 2.0 pour l'accès à la base de données il y a 2 ans et je l'ai toujours utilisé sur .NET 2.0, 3.0 et 3.5.

Dans le projet en cours sur lequel je travaille (qui est une application .NET 4.0), j'ai essayé d'utiliser l'ancienne bibliothèque de classes fidèles et j'ai obtenu l'exception suivante:

System.InvalidOperationException was unhandled
  Message=An error occurred creating the form. See Exception.InnerException for details.
    The error is: Mixed mode assembly is built against version 'v2.0.50727' of the runtime
    and cannot be loaded in the 4.0 runtime without additional configuration information.
    Source=SchoolManager
  StackTrace:
       at SchoolManager.My.MyProject.MyForms.Create__Instance__[T](T Instance) in 17d14f5c-a337-4978-8281-53493378c1071.vb:line 190
       at SchoolManager.My.MyProject.MyForms.get_frmGeneric()
       at SchoolManager.My.MyApplication.OnCreateMainForm() in D:\Alex\Documents\Visual Studio 2008\Projects\School Manager\SchoolManager\My Project\Application.Designer.vb:line 35
       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
       at SchoolManager.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:line 81
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: System.IO.FileLoadException
       Message=Mixed mode assembly is built against version 'v2.0.50727' of 
           the runtime and cannot be loaded in the 4.0 runtime without additional
           configuration information.
       Source=Dinofage.Data.XpressData
       StackTrace:
            at Dinofage.Data.XpressData.ExecuteSelectInternal(String selectCommand)
            at Dinofage.Data.XpressData.ExecuteSelect(String selectCommand)
            at SchoolManager.Academics.GetNewAdmissionCode(String academicYear) in D:\Alex\Documents\Visual Studio 2008\Projects\School Manager\SchoolManager\Modules\Academics.vb:line 89
            at SchoolManager.StudentDetail..ctor() in D:\Alex\Documents\Visual Studio 2008\Projects\School Manager\SchoolManager\UserControls\StudentDetail.vb:line 20
            at SchoolManager.frmGeneric.InitializeComponent() in D:\Alex\Documents\Visual Studio 2008\Projects\School Manager\SchoolManager\frmGeneric.Designer.vb:line 25
            at SchoolManager.frmGeneric..ctor()
       InnerException: 

Qu'est-ce qui pourrait être mauvais et comment puis-je le réparer?


Le mieux serait probablement de recompiler votre bibliothèque de classes pour .NET 4.0 dans Visual Studio 2010 (c'est-à-dire ouvrir le projet, le convertir et changer le framework cible).

Si vous ne pouvez pas ou ne le faites pas, vous pouvez essayer d'ajouter ce qui suit à votre fichier app.config pour votre application .NET 4.0:

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
</startup>

c'est à dire.

<?xml version ="1.0"?> 
<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0"/>
    </startup>
</configuration>

Si vous ne parvenez même pas à spécifier useLegacyV2RuntimeActivationPolicy = "true", vous devrez peut-être installer une configuration compatible avec votre système d'exploitation et votre version .NET. Vous pouvez trouver la même chose sur http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki .

Avant d'installer cette configuration, désinstallez SQLite à partir des programmes installés. Cela montrera des erreurs dans votre code.

Si cela ne fonctionne pas même après l'installation de la configuration compatible, vous devez supprimer la référence à votre fichier DLL précédent et ajouter une nouvelle référence à ce fichier DLL compatible.

Lorsque vous ajoutez une référence à un fichier DLL compatible, il vous suffit de créer votre projet et toutes vos erreurs de code doivent avoir disparu.


Une autre façon: Dans VB 2010 Express, vous pouvez ouvrir votre projet et aller dans l'onglet Compiler puis Advanced Compile Options... Sélectionnez .NET Framework 2.0 dans la liste déroulante nommée Target framework (all configurations) .





mixed-mode