19 messaggi dal 25 novembre 2006
Salve a tutti.

Tools : VS2013

Ho alcune vecchie DLL Unmanaged in C++ (ricompilate con VS2013) ed ho tentato l'utilizzo all'interno di un progetto ASP.NET MVC 5 ma ho alcuni problemini.

Al progetto MVC creato con il wizard ho aggiunto una DLL C++ CLR che esporta una classe con una sola funzione statica che inizialmente simulava i risultati e fin qui tutto bene.

I problemi sono sorti quando ho aggiunto 2 progetti DLL C++ Unmanaged e sostituito la simulazione con il richiamo delle funzioni esportate dalle DLL Unmanaged ... il giochino si è rotto ...

Lanciando il sito da VS2013 visualizza questi errori :


[FileNotFoundException: Impossibile caricare il file o l'assembly 'MyDllCLR.DLL' o una delle relative dipendenze. Impossibile trovare il modulo specificato.]
   System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +0
   System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +34
   System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +152
   System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean forIntrospection) +77
   System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +16
   System.Reflection.Assembly.Load(String assemblyString) +28
   System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +38

[ConfigurationErrorsException: Impossibile caricare il file o l'assembly 'MyDllCLR.DLL' o una delle relative dipendenze. Impossibile trovare il modulo specificato.]
   System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +736
   System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +217
   System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai) +130
   System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) +170
   System.Web.Compilation.BuildManager.GetPreStartInitMethodsFromReferencedAssemblies() +91
   System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath, Boolean& isRefAssemblyLoaded) +284
   System.Web.Compilation.BuildManager.ExecutePreAppStart() +153
   System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +521

[HttpException (0x80004005): Impossibile caricare il file o l'assembly 'MyDllCLR.DLL' o una delle relative dipendenze. Impossibile trovare il modulo specificato.]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +9930568
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +101
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +254



Dopo di che ho provato a seguire alcuni suggerimenti trovati in rete che dicevano di copiare le DLL Unmanaged sotto :

\System32\Inetsrv
\System32

ma non ho avuto successo.

Qualche suggerimento ?

Grazie in anticipo
19 messaggi dal 25 novembre 2006
Aggiornamento :

sulla macchina di sviluppo con IISExpress se copio le DLL nella cartella C:\Windows funziona !!

Peccato che pubblicando il progetto su Windows 2012 con IIS questa soluzione non funziona generando lo stesso errore.

Aiutoooo ....
19 messaggi dal 25 novembre 2006
E' stata dura ma sono arrivato a capo del problema ... dei problemi.

A futura memoria ecco le modifiche apportare :

1) Tutti i progetti "Any CPU" sono diventati "x86" perchè le DLL C++ native sono "Win32"
2) Nella procedura di "Pubblicazione Web" usare "Release - x86"
3) Nel Pool del IIS 8 abilitare le applicazioni a 32bit
4) Creare una cartella sul server (tipo C:\MYDLL), aggiungerla nel path di sistema ed copiarci dentro le DLL C++ native
5) Bisogna installare vcredist_x86.exe per avere le DLL CRT del VS2013

Riavviare il server ... nel mio caso tutto è ripartito esattamente come mi funzionava in locale usando IIS Express (il punto 4 vale per entrambi).

Se qualcuno ha suggerimenti per migliorare questa soluzione sono ben accetti.

Ciao

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.