Question

J'ai écrit une bibliothèque de classes il y a dans .NET 2.0 pour un accès de base de données quelque 2 ans et ont utilisé tout le long de .NET 2.0, 3.0 et 3.5.

Dans le projet actuel Je travaille sur (ce qui est une application .NET 4.0), essayé d'utiliser l'ancienne bibliothèque de classes fidèle et je suis 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 mal et comment puis-je résoudre ce problème?

Était-ce utile?

La solution

Le mieux serait probablement recompiler votre bibliothèque de classes pour .NET 4.0 dans Visual Studio 2010 (à savoir l'ouverture. Le projet, la conversion, et la modification du cadre cible.)

Si vous ne pouvez pas, ou ne sera pas, faire cela, alors vous pouvez essayer d'ajouter ce qui suit à votre fichier app.config pour votre .NET 4.0 Application:

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

ie.

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

Autres conseils

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

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

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

Si vous n'êtes pas passer à travers, même en spécifiant useLegacyV2RuntimeActivationPolicy = « true », vous devrez peut-être installer une configuration qui est compatible avec votre système d'exploitation et la version .NET. Vous pouvez trouver le même http: // système. data.sqlite.org/index.html/doc/trunk/www/downloads.wiki .

Avant d'installer cette configuration, SQLite désinstaller 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édente 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 construire votre projet et toutes vos erreurs de code auraient dû.

Vous pouvez essayer d'ouvrir l'ancien projet fidèle (Bibliothèque de classes) à l'intérieur de Visual Studio 2010 et lui permettre de faire la conversion pour vous.

Si quelqu'un d'autre encore rencontré ce problème, voici mon diagnostic: Vous utilisez paquet SQLite faux. Il existe plusieurs versions de SQLite sous http: // système .data.sqlite.org / index.html / doc / trunk / www / downloads.wiki

Par exemple, si vous ciblez .net 4.5 avec x86 platorm vous devez utiliser ce fichier:

sous précompilés statiquement-Linked Binaires pour Windows 32 bits (.NET Framework 4.5)

sqlite-netFx45-static-binary-bundle-Win32-2012-1.0.106.0.zip

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top