2010-01-18 4 views
2

J'ai un problème de chargement d'assemblage qui se reproduit lorsque je convertis Vista (32 bits) en Windows 7 (32 bits). Cela se produit lorsque j'essaie de charger de très vieilles DLL de fournisseur de données Sybase ASE ADO.NET.Problème de chargement de l'assemblage

Le journal de la visionneuse de journal de fusion montre ceci:

*** Assembly Binder Log Entry (18/01/2010 @ 5:00:38 PM) *** 

The operation failed. 
Bind result: hr = 0x80131018. No description available. 

Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll 
Running under executable c:\windows\system32\inetsrv\w3wp.exe 
--- A detailed error log follows. 

=== Pre-bind state information === 
LOG: User = NT AUTHORITY\NETWORK SERVICE 
LOG: DisplayName = sybdrvado11 
(Partial) 
LOG: Appbase = file:///C:/dev/AgentDesktop/ui/newweb/ 
LOG: Initial PrivatePath = C:\dev\AgentDesktop\ui\newweb\bin 
LOG: Dynamic Base = C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\newweb\f57489cf 
LOG: Cache Base = C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\newweb\f57489cf 
LOG: AppName = d293c3e5 
Calling assembly : (Unknown). 
=== 
LOG: This bind starts in default load context. 
LOG: Using application configuration file: C:\dev\AgentDesktop\ui\newweb\web.config 
LOG: Using host configuration file: C:\Windows\Microsoft.NET\Framework\v2.0.50727\Aspnet.config 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config. 
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind). 
LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/newweb/f57489cf/d293c3e5/sybdrvado11.DLL. 
LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/newweb/f57489cf/d293c3e5/sybdrvado11/sybdrvado11.DLL. 
LOG: Attempting download of new URL file:///C:/dev/AgentDesktop/ui/newweb/bin/sybdrvado11.DLL. 
LOG: Assembly download was successful. Attempting setup of file: C:\dev\AgentDesktop\ui\newweb\bin\sybdrvado11.dll 
LOG: Entering download cache setup phase. 
ERR: Error extracting manifest import from file (hr = 0x80131018). 
ERR: Setup failed with hr = 0x80131018. 
ERR: Failed to complete setup of assembly (hr = 0x80131018). Probing terminated. 

J'ai passé pas mal de temps googler cela et le message d'erreur qui se manifeste par ASP.NET, et aucune des solutions communes semble être pertinent. J'ai remarqué qu'il y avait un moyen de provoquer cette erreur en utilisant des vérificateurs de virus. Est-il possible de le faire sur une machine Windows 7 vierge? c'est-à-dire existe-t-il un type de système de protection qui peut interférer avec le chargement de l'assemblage?

Cela échoue à la fois VS.NET 2008 et 2010 VS.NET beta 2.

Les indices seraient appréciés.

Répondre

0

Le problème semble se produire lors de la tentative de chargement C:\dev\AgentDesktop\ui\newweb\bin\sybdrvado11.dll.

Il s'agit d'une DLL non managée requise par le fournisseur Sybase ADO.NET et qui devrait normalement être installée quelque part sur le PATH.

+0

Notez que le chargeur d'assembly a trouvé l'assembly OK (ai-je mentionné que l'assembly + DLL fonctionne correctement sur Vista) mais a un problème de manifeste d'assembly: "Erreur d'extraction d'importation manifeste du fichier". C'est cette partie qui me rend confus. –

+0

Il peut être utile de regarder/afficher le journal de fusion de la machine Vista où la charge fonctionne. – Joe

2

Pour utiliser Sybase ASE ADO.NET avec sybdrvado11.dll vous avez besoin d'un autre fichier: MSVCR71.dll Peut-être qu'il manque dans Windows\System32?

2

Je résous mon problème, dans le dossier GAC avec l'explorateur. Je pouvais voir la DLL system.runtime.serialization mais quand j'ai utilisé l'invite cmd sur ce dossier la DLL existe sur GAC_MSIL et pas sur GAC. J'ai donc copié dossier System.Runtime.Serialization de GAV_MSIL sur GAC et après reboot VS mon projet compile parfaitement.

Pour déplacer dll easly i utilisé les commandes suivantes dans cmd.exe:

cd\windows\assembly 
attrib -r -h -s desktop.ini 
ren desktop.ini desktop.bak 

Maintenant, je peux ouvrir le dossier GAC normalement dans votre explorateur, et vous pouvez voir la structure réelle.